首页 > 技术文章 > Linux 启动参数介绍

super-king 2013-09-02 13:37 原文

 

Linux 启动参数介绍

取自2.6.18 kernel

Documentation/i386/boot.txt 文件中介绍

vga=

这里的不是一个整数(在C语言表示法中,应是十进制,八进制或者十六进制其中之一),就是“normal”(0xFFFF),“ext”(0xFFFE),“ask”(0xFFFD)中的一个。这个值应被填入vid_mode(视频模式控制)域,

因为他会在命令行被解析前被内核使用。


mem=

是用C语言表示法定义的整形,后面可以追加(大小写不敏感的)K,M,G,T,P或者E(代表<< 10, << 20, << 30, << 40, << 50

或者 << 60)。这就指明了内核文件在内存中的末尾。它影响了initrd可能存放的位置,因为initrd应该被放置在内核末尾的附近。

要注意:这个选项同时作用于内核和启动装载器!


initrd=

指定装载的initrd,显然是和启动装载器是独立的文件,而且一些启动装载器(比如LILO)甚至不需要这个选项。


Documentation/kernel-parameters.txt 文件

对于可加载模块在启动时添加参数一般约定为如下:

modprobe usbcore blinkenlights=1   //modprode加模块名加参数名加等号加值


对于编译在核心中的模块约定如下:

usbcore.blinkenlights=1             //模块名加“.”加参数名加等号加值

所有模块在加载到核心后会出现在目录/sys/module/${modulename}/中,其中模块参数在parameters/目录中,有的可以进行修改在kernel运行时。


53c7xx=    [HW,SCSI] Amiga SCSI controllers

参考文件Documentation/scsi/ncr53c7xx.txt,有详细说明。


[acpi]

acpi=           [HW,ACPI] Advanced Configuration and Power Interface

force : 强制开启acpi.

off   : 关闭acpi.

noirq : 不要使用acpi去路由irq。禁止使用ACPI来处理PCI设备中断路由,和pci=noacpi的区别是它允许使用ACPI来枚举PCI root bus.

ht    : 只使用足够的acpi去支持超线程

这个参数和"acpi=off"几乎一样,它禁止了除多处理器配置相关的内容以外的所有ACPI功能。

如果acpi=off正常,但acpi=ht不正常, 则解析ACPI表或者Linux SMP的代码有bug.

strict : 降低对不严格遵循acpi规范平台的兼容性


acpi_sleep=     [HW,ACPI] Sleep options

Format: { s3_bios, s3_mode }

ACPI休眠选项。在从S3状态(挂起到内存)恢复的时候,硬件需要被正确的初始化。这对大多数硬件都不成问题,

除了显卡之外,因为显卡是由BIOS初始 化的,内核无法获取必要的恢复信息(仅存在于BIOS中,内核无法读取)。

这个选项允许内核以两种方式尝试使用ACPI子系统来恢复显卡的状态。


acpi_sci=       [HW,ACPI] ACPI System Control Interrupt trigger mode

Format: { level | edge | high | low }

ACPI系统控制终端触发器模式


acpi_irq_balance [HW,ACPI]

使ACPI对中断请求进行平衡,在APIC模式下为默认值


acpi_irq_nobalance [HW,ACPI]

ACPI不对中断请求进行平衡(默认),PIC模式下为默认值


acpi_irq_pci=   [HW,ACPI]

Format: <irq>,<irq>...

如果启用了irq_balance则将列出的中断号标记为已经被PCI子系统使用,可用于屏蔽某些中断。


acpi_irq_isa=   [HW,ACPI]

Format: <irq>,<irq>...

如果irq balance选项被开启,表示列出的irq号被isa子系统使用。


acpi_os_name=   [HW,ACPI]

告诉ACPI BIOS操作系统的名称。常常用来哄骗某些老旧的BIOS以为运行的是Windows系统。比如"Microsoft 2001"表示WinXP,"Microsoft Windows"表示Win98。


acpi_osi=       [HW,ACPI]

空参数是关闭 _OSI方法.


acpi_serialize  [HW,ACPI]

强制串行化ACPI机器语言(ACPI Machine Language)方法,操作系统使用这种语言与BIOS打交道。


acpi_skip_timer_override [HW,ACPI]

对于某些有毛病的 Nvidia NF5 主板需要使用此选项才能正常使用,不过此时 HPET 将失效。


acpi_dbg_layer= [HW,ACPI]

acpi_dbg_level= [HW,ACPI]

每一个int位标明一个debug layer或level,1开启,0关闭。对于系统启动时debug acpi有用。

启动后可以通过/proc/acpi/debug_layer 或 debug_level 设置。


acpi_fake_ecdt  [HW,ACPI]

当bios缺乏 ecdt,允许acpi去代替它工作。

Embedded Controller Boot Resources Table (ECDT)

This optional table provides the processor-relative, translated resources of an Embedded Controller. The

presence of this table allows OSPM to provide Embedded Controller operation region space access before

the namespace has been evaluated. If this table is not provided, the Embedded Controller region space will

not be available until the Embedded Controller device in the AML namespace has been discovered and

enumerated. The availability of the region space can be detected by providing a _REG method object

underneath the Embedded Controller device.


acpi_generic_hotkey   [HW,ACPI]

允许acpi使用通用热插拔驱动去代替平台特殊的驱动。


acpi_pm_good    [IA-32,X86-64]

跳过pmtimer的bug检测,强制内核假设这台机器的pmtimer没有毛病。用于解决某些有缺陷的BIOS。


memmap=nn[KMG]#ss[KMG]   [KNL,ACPI]

将从ss开始的nn长度的内存区域标记为ACPI数据。


memmap=nn[KMG]$ss[KMG]   [KNL,ACPI]

将从ss开始的nn长度的内存区域标记为"保留"。


pnpacpi=off  [ACPI]

禁用ACPI的即插即用功能,而使用PNPBIOS来代替。


processor.max_cstate=  [HW,ACPI]

{0|1|2|3|4|5|6|7|8|9}

无视ACPI表报告的值,强制制定CPU的最大C-state值。这里的数字必须是一个有效的C-state值,

比如Yonah处理器支持"0-4"五个 级别:C0为正常状态,其他则为不同的省电模式(数字越大表示CPU休眠的程度越深/越省电)。

"9"表示超越所有的DMI黑名单限制。你的CPU的 95%的时间应该处于最深度的idle状态。


processor.nocst

不使用_CST方法来侦测C-state值,而是使用传统的FADT方法。


ec_intr=n

指定acpi中断控制器的模式。如果n是0那么轮询模式将被启用,否则中断模式将被使用,默认是中断模式。 

[/acpi]


[pci]

pci=option[,option...]

off [IA-32]

不检测PCI总线,也就是关闭所有PCI设备。

bios [IA-32]

强制使用PCI BIOS而不是直接访问硬件,这表示内核完全信任BIOS(大多数情况下它并不可信)。仅在你的机器有一个不标准的PCI host bridge的时候才用。

nobios [IA-32]

强制直接访问硬件而不使用PCI BIOS,2.6.13之后这是默认值。如果你确定在内核引导时的崩溃是由BIOS所致就可以使用它。

conf1 [IA-32]

强制硬件设备使用PCI Configuration Mechanism 1访问PCI Memory以与内核中的驱动程序进行通信。

conf2 [IA-32]

强制硬件设备使用PCI Configuration Mechanism 2访问PCI Memory以与内核中的驱动程序进行通信。

nommconf [IA-32,X86_64]

禁止为 PCI Configuration 使用 MMCONFIG 表。

nomsi [MSI]

如果启用了PCI_MSI内核配置选项,那么可以使用这个参数在系统范围内禁用MSI中断。

nosort [IA-32]

不在检测阶段根据PCI BIOS给出的顺序对PCI设备进行排序。进行这样的排序是为了以与早期内核兼容的方式获取设备序号。

biosirq [IA-32]

使用PCI BIOS调用来获取中断路由表。这些调用在不少机器上都有缺陷,会导致系统在使用过程中挂起。

但是在某些机器上却是唯一获取中断路由表的手段。如果内核无法分配IRQ或者发现了第二个PCI总线,就可以尝试使用这个选项解决问题。

rom [IA-32]

为扩展ROM分配地址空间。使用此选项要小心,因为某些设备在ROM与其它资源之间共享地址解码器。

pirqaddr=0xAAAAA [IA-32]

指定物理地址位于F0000h-100000h范围之外的PIRQ表(通常由BIOS产生)的物理地址。

lastbus=N [IA-32]

扫描所有总线,直到第N个总线。如果内核找不到第二条总线的时候,你就需要使用这个选项明确告诉它。

assign-busses [IA-32]

总是使用你自己指定的PCI总线号(而不是firmware提供的)。

usepirqmask [IA-32]

优先使用可能存在于BIOS $PIR表中的IRQ掩码。某些有缺陷的BIOS需要这个选项,特别是在HP Pavilion N5400和Omnibook XE3笔记本上。

如果启用了ACPI IRQ路由的话,将不会考虑这个选项的设置。

noacpi [IA-32]

不为IRQ路由或者PCI扫描使用ACPI。

禁止使用ACPI来处理任何PCI相关的内容,包括PCI root bus的枚举和PCI设备中断路由。

routeirq

为所有PCI设备执行IRQ路由。这个通常在pci_enable_device()中执行,所以这是一个解决不调用此函数的bug驱动程序的临时解决方法。

bfsort

按照宽度优先的顺序对PCI设备进行排序。进行这样的排序是为了以与2.4内核兼容的方式获取设备序号。

nobfsort

不按照宽度优先的顺序对PCI设备进行排序。

cbiosize=nn[KMG]

从CardBus bridge 的 IO 窗口接受的固定长度的总线空间(bus space),默认值是256字节。

cbmemsize=nn[KMG]

从CardBus bridge 的 memory 窗口接受的固定长度的总线空间(bus space),默认值是64MB。

[/pci]


[中断]

这些参数影响内核与处理中断的硬件之间的接口。常见的中断控制器有两种:传统的8259A和新式的APIC,前者也被称为"PIC"。

8259A只适合单CPU的场合,而APIC则能够把中断传递给系统中的每个CPU,从而充分挖掘SMP体系结构的并行性。所以8259A已经被淘汰了。

APIC系统由3部分组成:APIC总线、IO-APIC、本地APIC。

每个CPU中集成了一个本地APIC,负责传递中断信号到处理器。而IO-APIC是系统芯片组中一部分,负责收集来自I/O设备的中断信号并发送到本地APIC。

APIC总线则是连接IO-APIC和各个本地APIC的桥梁。


apic=   [APIC,i386]

Format: { quiet (default) | verbose | debug }

在初始化 APIC 和 IO-APIC 组件的时候,显示调试信息的详细程度。


noapic          [SMP,APIC]

强制内核禁止使用IO-APIC(输入输出高级可编程输入控制器).

禁止使用io-apic来做设备中断路由,这样做的效果之一是ACPI返回的中断路由表将是针对PIC(8259)的。


nolapic         [IA-32,APIC]

强制内核禁用 local APIC ,即使 BIOS 已经启用了。


lapic           [IA-32,APIC]

强制内核启用 local APIC ,即使 BIOS 已经禁用了。


noirqbalance    [IA-32,SMP,KNL]

禁止使用内核中的中断平衡逻辑.


irqfixup        [HW]

用于修复基本的中断问题:当一个中断没有被处理时搜索所有可用的中断处理器。用于解决某些firmware缺陷。


irqpoll         [HW]

用于修复更进一步的中断问题:当一个中断没有被处理时搜索所有可用的中断处理器,并且对每个时钟中断都进行搜索。用于解决某些严重的firmware缺陷。


noirqdebug      [IA-32]

默认情况下,内核将探测并且禁止未处理的中断源,以免引起内核其他部分的响应问题,这个选项禁止该功能。

[/中断]


[内存]

highmem=nn[KMG]  [KNL,BOOT]

强制指定highmem区域的大小,甚至在默认没有highmem的机器上也能工作。这个选项还可以用来在大内存的机器上强制减少highmem区域的大小。

内核使用低于896M的"直接映射物理内存"很方便,但使用大于896M的部分(highmem)却比较麻烦,所以系统在给用户进程分配内存时会优先 使用highmem。

对于小于等于 1G 内存的用户来说,则无需关心这个问题。


hugepages=<num>      [HW,IA-32,IA-64]

指定 HugeTLB 页的最大数量,仅在内核启用了CONFIG_HUGETLBFS之后才有效。大多数现代计算机体系结构提供对多页面大小的支持,

比如IA-32结构支持4K和4M(PAE模式为2M)两种页面。因此Linux将物理内存划分成许多固定大小的页面(默认大小为 4k),

每个页对应一个page结构,这些结构组成一个mem_map[]数组。TLB(Translation Lookaside Buffer)是虚拟地址到物理地址的翻译缓冲区,

这种缓冲区在处理器上是很宝贵的,操作系统总是尝试将有限的TLB资源发挥到极致。特别是能够轻松获得若干G内存的时候(>4G),这种优化就显得尤为关键。

而 HugeTLB 特性则允许将某些页的尺寸增大到 4MB 。用户可以使用mmap系统调用或者标准的SYSv共享内存调用(shmget,shmat)来使用hugepage。

可以使用 grep Huge /proc/meminfo 命令查看是否开启了 hugepage 支持。


ihash_entries=<num>  [KNL]

内核会在内存中缓存一定数量的inode结构来加速文件访问,每个inode对应一个文件(不同于文件系统中的inode概念),

包含文件访问权限/属主/组/大小/生成时间/访问时间/最后修改时间等信息。这些inode保存在一个哈希表中。这个值用于指定这个哈希表的最大项数。

比如 1G 内存推荐为 16384 ,4G 及以上内存推荐 131072 ,但你可以根据自己硬盘上可能被访问的文件数量对默认值进行调整(注意需要考虑哈希值的碰撞)。

最大就到内存的 1/16 的数量。


max_addr=[KMG]    [KNL,BOOT,ia64]

内核将忽略在该物理地址以上的内存.


mem=nn[KMG]     [KNL,BOOT]

强制指定内核使用多少数量的内存。缺乏远见设计的传统BIOS只能报告最大64MB内存。新的e820规范则突破了这个限制,使得BIOS可以正确报告大于64MB的内存。

如果你在老旧的机器上使用大内存就需要指定这个参数(最保险的做法是在实际内存的总数上减掉1MB)。但有时候e820报告的数量并不准确,

此时就需要使用下面的memmap参数精确指定内存映射(此时就不要使用"mem="了)。


memmap=exactmap [KNL,IA-32,X86_64]

指定将要使用随后的"memmap=nn@ss"等参数进行精确的E820内存映射。比如对于一个4G内存的机器可能是:"memmap=exactmap memmap=640K@0 memmap=4095M@1M"。


memmap=nn[KMG]@ss[KMG]  [KNL]

强制内核只使用从ss开始的nn长度的特定内存区域。可以多次使用以指定多个区域。


noexec={on|off}       [IA-32,X86-64,IA-64]

允许(on,默认)或禁止(off)内核将部分内存映射设置为"不可执行"区域。


reserve=nn[KMG]        [KNL,BUGS]

强制内核忽略(预留)一定量的IO内存区域.


vmalloc=nn[KMG] [KNL,BOOT]

强制指定vmalloc区域的大小。可用于增加vmalloc区域的最小尺寸(x86默认128MB),也可以用于减少vmalloc的大小,增加更多的空间用于直接映射内核RAM。


norandmaps

默认内核随机化程序启动的地址,该选项禁用该功能。该选项等价于"echo 0 > /proc/sys/kernel/randomize_va_space"命令。

[/内存]


[CPU]

cachesize=<NUM>  [BUGS=IA-32]

强制指定 CPU L2 cache 的大小,单位是字节。


nmi_watchdog={0|1|2|3}  [KNL,BUGS=IA-32]

设置非屏蔽中断(NMI)watchdog的特性。"0"表示禁用NMI watchdog;"1"表示使用APIC;"2"表示使用local APIC;"3"表示NMI watchdog有缺陷,因此被禁用。


mce

nomce [IA-32]

启用/禁用Machine Check Exception功能。

如果你的系统出现一些问题比如CPU过热,内核将会在屏幕上打印相关信息来提醒你。这个功能是需要硬件支持的。

你可以查看/proc/cpuinfo看看是否有mce标志,有的话就选吧。如果你十分十分的不幸,选了它之后出现问题,可以在启动时加nomce参数来关闭它。


maxcpus=<NUM>   [SMP]

明确指定一个SMP内核能够使用的最大CPU数量。最好使用"maxcpus=0"而不是"maxcpus=1"来禁用SMP功能。

[/CPU]


[ramdisk]

initrd=         [BOOT]

指定initial ramdisk的位置.


noinitrd        [RAM]

禁止使用任何initial RAM disk.


ramdisk_blocksize=      [RAM]

指定ramdisk的块尺寸,默认是"1024"。


ramdisk_size=   [RAM]

RAM disks的大小(kB),默认为4096(4MB)。

[/ramdisk]


[根文件系统]

root=           [KNL]

告诉核心启动时根文件系统位置。


rootdelay=      [KNL] Delay

挂载文件系统前延迟多少秒,当根文件系统在USB或FireWire设备上时常用。


rootflags=      [KNL]

设置根文件系统的挂载选项,比如"noatime,ro"。


rootfstype=     [KNL]

根文件系统的类型,比如"xfs"。

[/根文件系统]


[init]

init=           [KNL]

指定内核启动后运行的第一个程序的绝对路径。默认为"/sbin/init"。


rdinit=         [KNL]

从ramdisk中运行的第一个程序的绝对路径,默认为"/init"。指定的文件必须是在ramdisk而不是在根文件系统中进行。


S               [KNL]

以单用户模式运行init,默认是多用户模式。

[/init]


[网络]

netdev=<irq>,<io>,<mem_start>,<mem_end>,<name>        [NET]

网络设备参数。具体细节取决于不同的驱动程序,请参考各自的驱动程序文档。该选项通常不用于PCI/USB等即插即用网卡。


rhash_entries=  [KNL,NET]

设置内核路由缓冲区哈希表桶的大小,仅供内核网络专家使用。


shapers=        [NET]

设置内核允许使用的最大网络Shaper(限制网络速率的虚拟网络设备)。


thash_entries=   [KNL,NET]

设置内核允许使用的TCP链接哈希表的桶大小。

[/网络]


[定时器]

enable_8254_timer

disable_8254_timer    [i386,x86-64]

启用/禁用 在通过IO-APIC对IRQ0(时钟中断)进行路由之外,还通过8254进行路由。内核将尽可能通过检测来选择正确的值。


enable_timer_pin_1

disable_timer_pin_1    [i386,x86-64]

启用/禁用APIC定时器的PIN1,可以用于解决某些有bug的芯片组(特别是ATI芯片组)。内核将尽可能自动探测正确的值。


hpet=           [IA-32,HPET]

Format: disable

禁用HPET,转而使用PIT。

HPET是intel制定的新的用以代替传统的8254(PIT)中断定时器与RTC的定时器,全称叫作高精度事件定时器。


clocksource={hpet|pit|tsc|acpi_pm}    [GENERIC_TIME,IA-32,X86-64,ACPI]

强制指定clocksource来取代默认值。

[/定时器]


dhash_entries=  [KNL]

设置dentry hash桶数。


ihash_entries=  [KNL]

设置inode hash桶数。

 

推荐阅读