资讯详情

Linux内核引导选项

概述

一般可分为两类:一类与设备无关,另一类与设备有关。与设备与设备相关的指导选项,您需要阅读内核中相应的驱动程序源代码,以获得可接受的指导选项。例如,如果你想知道,你可以去 AHA1542 SCSI 检查驱动程序传输的指导选项 drivers/scsi/aha1542.c 文件,一般在前面 100 所接受的指导选项说明可以在行注中找到。大多数选项都是通过的"__setup()"函数设置的,少部分是通过"early_param()"或"module_param()"或"module_param_named()"等函数设置,逗号前的部分是引导选项的名称,后面的部分是处理这些选项的函数名。

[提示]您可以在源码树的根目录下尝试以下命令:

grep -r '\b__setup *(' * grep -r '\bearly_param *(' * grep -r '\bmodule_param *(' * grep -r '\bmodule_param_named *(' * 

在格式上,多个选项之间用空格分割,选项值是逗号分割的列表,选项值包含空白。

正确:ether=9,0x300,0xd0000,0xd4000,eth0  root=/dev/sda2 错误:ether = 9, 0x300, 0xd0000, 0xd4000, eth0  root = /dev/sda2 

注意,所有的指导选项都对大小写敏感!

内核运行后,可以通过 cat /proc/cmdline 命令检查原始使用的指导选项和相应值。

内核模块

对于模块,引导选项只能直接编译到核心模块,格式是"模块名.选项=值",比如"usbcore.blinkenlights=1"。动态加载模块可用于 modprobe 命令行指定相应的选项值,如"modprobe usbcore blinkenlights=1"。

可以使用"modinfo -p ${modulename}"命令显示可加载模块的所有可用选项。内核中加载的模块将在 /sys/module/${modulename}/parameters/ 显示其选项,在运行过程中可以显示某些选项的值"echo -n ${value} > /sys/module/${modulename}/parameters/${parm}"进行修改。

如何处理内核引导选项?

大多数核心引导选项的格式如下:

name[=value_1][,value_2]...[,value_10]

如果"name"无法识别和满足"name=value"格式将被解译为环境变量(例如"TERM=linux"或"BOOT_IMAGE=vmlinuz.bak"),否则,它将被原封不动地传递给 init 程序(比如"single")。

内核可接受的选项数量没有限制,但整个命令行的总长度(包括选项/值/空间)有限制,定义为 include/asm/setup.h 中的 COMMAND_LINE_SIZE 宏中(对于X86_64而言是2048)。

选择内核引导选项

由于引导选项多如牛毛,本文不可能全部涉及,本文仅基于 X86_64 平台以及 Linux-3.13.2 一些与设备无关的指导选项和少数与设备有关的指导选项,过时的选项,非x86平台选项、与设备有关的选项,基本上都被忽略了。

[提示]内核源码树下 Documentation/kernel-parameters.txt 和 Documentation/x86/x86_64/boot-options.txt 本文列出了所有可用的指导选项,并作了简要说明。

标记说明

并不是所有的选项都是永久性的,只有在特定的模块和相应的硬件中才能使用。指南选项上的方括号解释了其依赖性,标记如下:

ACPI     开启高级配置和电源接口(CONFIG_ACPI)支持 AGP      开启了AGP(CONFIG_AGP)支持 APIC     开启高级可编程中断控制器支持(2000年以后)CPU都支持) APPARMOR 开启了AppArmor(CONFIG_SECURITY_APPARMOR)支持 DRM      开启了Direct Rendering Manager(CONFIG_DRM)支持 EFI      开启了EFI分区(CONFIG_EFI_PARTITION)支持 EVM      开启了Extended Verification Module(CONFIG_EVM)支持 FB       打开帧缓冲设备(CONFIG_FB)支持 HIBERNATION  开启了"休眠到硬盘"(CONFIG_HIBERNATION)支持 HPET_MMAP    允许对HPET寄存器映射(CONFIG_HPET_MMAP) HW       有相应的硬件设备 IOMMU    开启了IOMMU(CONFIG_IOMMU_SUPPORT)支持 IOSCHED  多个不同的开启I/O调度程序(CONFIG_IOSCHED_*) IPV6     开启了IPv6(CONFIG_IPV6)支持 IP_PNP   打开自动获取IP的协议(DHCP,BOOTP,RARP)支持 IP_VS_FTP    开启了IPVS FTP协议连接跟踪(CONFIG_IP_VS_FTP)支持 KVM      开启了KVM(CONFIG_KVM_*)支持 LIBATA   开启了libata(CONFIG_ATA)驱动支持 LOOP     开启回环设备(CONFIG_BLK_DEV_LOOP)支持 MCE      开启了Machine Check Exception(CONFIG_X86_MCE)支持 MOUSE    开启了鼠标(CONFIG_INPUT_MOUSEDEV)支持 MSI      开启了PCI MSI(CONFIG_PCI_MSI)支持 NET      打开网络支持 NETFILTER    开启了Netfilter(CONFIG_NETFILTER)支持 NFS      开启了NFS支持网络文件系统 NUMA     开启了NUMA(CONFIG_NUMA)支持 PCI      开启了PCI总线(CONFIG_PCI)支持 PCIE     开启了PCI-Express(CONFIG_PCIEPORTBUS)支持 PNP      打开即插即用(CONFIG_PNP)支持 PV_OPS   内核本身是半虚拟化的。(paravirtualized) RAID     开启了软RAID(CONFIG_BLK_DEV_MD)支持 SECURITY 多个不同的安全模型被打开(CONFIG_SECURITY) SELINUX  开启了SELinux(CONFIG_SECURITY_SELINUX)支持 SLUB     开启了SLUB内存分配管理器(CONFIG_SLUB) SMP      打开对称多处理器(CONFIG_SMP)支持 TPM      可信平台模块开启(CONFIG_TCG_TPM)支持 UMS      开启了USB大容量存储设备(CONFIG_USB_STORAGE)支持 USB      开启了USB(CONFIG_USB_SUPPORT)支持 USBHID   开启了USB HID(CONFIG_USB_HID)支持 VMMIO    利用内存映射机制开启内存映射机制virtio设备驱动(CONFIG_VIRTIO_MMIO) VT       打开虚拟终端(CONFIG_VT)支持 

此外,下面的标记与上面的标记不同:

BUGS    解决特定硬件的缺陷 KNL     是内核启动选项 BOOT    是指导程序选项 

标记为"BOOT"选项实际上是由指导程序(例如GRUB)使用对核心本身没有直接意义。如果没有特殊需求,请不要修改此类选项的语法。请阅读更多信息 Documentation/x86/boot.txt 文档。

说明:下文中的 [KMG] 后缀表示 210, 220, 230 的含义。

控制台和终端

[KNL] console=设备及选项
设置输出控制台使用的设备和选项。ttyN 表示使用第N个虚拟控制台。主要用于嵌入式环境( Documentation/serial-console.txt)。
[KNL] consoleblank=秒数
控制台多长时间不操作后黑屏,默认值为600秒,0表示禁止黑屏。
[HW] no_console_suspend
永远不要把控制台放进休眠状态。因为当控制台进入休眠状态时,所有的核心消息都是看不见的(包括串口和VGA)。打开此选项有助于调试休眠/唤醒系统中的故障。
[VT] vt.default_utf8={0|1}
是否将所有TTY默认设置为UTF-8模式。默认值"1"将所有新开放的终端设置为UTF-8模式。

日志与调试

earlyprintk=设备[,keep]
使用哪种设备来显示早期的指导信息,主要用于调试硬件故障。由于在某些情况下无法正常工作,因此默认情况下未打开此选项。 内核日志信息显示在传统控制台初始化之前。如果你不使用这个选项,你将永远没有机会看到它。 在尾部加上",keep"选项表示,在真正的内核控制台初始化并接管系统后,本选项消息的显示不会被抹去。 earlyprintk=vga 表示在VGA内核日志信息显示在上面,是最常用的选项,但不能用于EFI环境。 earlyprintk=efi v3.13新增,表示将错误日志写入EFI framebuffer,专用于EFI环境。 earlyprintk=xen 仅可用于XEN的半虚拟化客户机。
loglevel={0|1|2|3|4|5|6|7}
设置内核日志的级别,所有小于该数字的内核信息(具有更高优先级的信息)都将在控制台上显示出来。这个级别可以使用 klogd 程序或者修改 /proc/sys/kernel/printk 文件进行调整。取值范围是"0"(不显示任何信息)到"7"(显示所有级别的信息)。建议至少设为"4"(WARNING)。[提示]级别"7"要求编译时加入了调试支持。
[KNL] ignore_loglevel
忽略内核日志等级的设置,向控制台输出所有内核消息。仅用于调试目的。
[KNL] debug
将引导过程中的所有调试信息都显示在控制台上。相当于设置"loglevel=7"(DEBUG)。
[KNL] quiet
静默模式。相当于设置"loglevel=4"(WARNING)。
log_buf_len=n[KMG]
内核日志缓冲区的大小。"n"必须是2的整数倍(否则会被自动上调到最接近的2的整数倍)。该值也可以通过内核配置选项CONFIG_LOG_BUF_SHIFT来设置。
[KNL] initcall_debug
跟踪所有内核初始化过程中调用的函数。有助于诊断内核在启动过程中死在了那个函数上面。
kstack=N
在内核异常(oops)时,应该打印出内核栈中多少个字(word)到异常转储中。仅供调试使用。
[KNL] kmemleak={on|off}
是否开启检测内核内存泄漏的功能(CONFIG_DEBUG_KMEMLEAK),默认为"on",仅供调试使用。 检测方法类似于跟踪内存收集器,一个内核线程每10分钟(默认值)扫描内存,并打印发现新的未引用的对象的数量。
[KNL] memtest=整数
设置内存测试(CONFIG_MEMTEST)的轮数。"0"表示禁止测试。仅在你确实知道这是什么东西并且确实需要的时候再开启。
norandmaps
默认情况下,内核会随机化程序的启动地址,也就是每一次分配给程序的虚拟地址空间都不一样,主要目的是为了防止缓冲区溢出攻击。但是这也给程序调试增加了麻烦,此选项(相当于"echo 0 > /proc/sys/kernel/randomize_va_space")的目的就是禁用该功能以方便调试。
[PNP] pnp.debug=1
开启PNP调试信息(需要内核已开启CONFIG_PNP_DEBUG_MESSAGES选项),仅用于调试目的。也可在运行时通过 /sys/module/pnp/parameters/debug 来控制。
show_msr=CPU数
显示启动时由BIOS初始化的MSR(Model-Specific Register)寄存器设置。CPU数设为"1"表示仅显示"boot CPU"的设置。
printk.time={0|1}
是否在每一行printk输出前都加上时间戳,仅供调试使用。默认值是"0"(不添加)
boot_delay=毫秒数
在启动过程中,为每一个printk动作延迟指定的毫秒数,取值范围是[0-10000](最大10秒),超出这个范围将等价于"0"(无延迟)。仅用于调试目的。
pause_on_oops=秒数
当内核发生异常时,挂起所有CPU的时间。当异常信息太多,屏幕持续滚动时,这个选项就很有用处了。主要用于调试目的。

异常检测与处理

[MCE] mce=off
彻底禁用MCE(CONFIG_X86_MCE)
[MCE] mce=dont_log_ce
不为已纠正错误(corrected error)记录日志。
[MCE] mce=容错级别[,超时]
容错级别(还可通过sysfs设置): 0 在出现未能纠正的错误时panic,记录所有已纠正的错误 1(默认值) 在出现未能纠正的错误时panic或SIGBUS,记录所有已纠正的错误 2 在出现未能纠正的错误时SIGBUS或记录日志,记录所有已纠正的错误 3 从不panic或SIGBUS,记录所有日志。仅用于调试目的。 超时(单位是微秒[百万分之一秒]):在machine check时等待其它CPU的时长,"0"表示不等待。
[ACPI] erst_disable
禁用 ERST(Error Record Serialization Table)支持。主要用于解决某些有缺陷的BIOS导致的ERST故障。
[ACPI] hest_disable
禁用 HEST(Hardware Error Source Table)支持。主要用于解决某些有缺陷的BIOS导致的HEST故障。
[KNL] nosoftlockup
禁止内核进行软 死检测
[KNL] softlockup_panic={0|1}
是否在检测到软死锁(soft-lockup)的时候让内核panic,其默认值由 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE 确定
[KNL] nowatchdog
禁止硬死锁检测( NMI watchdog)
[KNL,BUGS] nmi_watchdog={0|panic|nopanic}
配置 nmi_watchdog(不可屏蔽中断看门狗)。更多信息可查看"lockup-watchdogs.txt"文档。 0 表示关闭看门狗; panic 表示出现看门狗超时(长时间没喂狗)的时候触发 内核错误,通常和"panic="配合使用,以实现在系统出现锁死的时候自动重启。 nopanic 正好相反,表示即使出现看门狗超时(长时间没喂狗),也不触发内核错误。
unknown_nmi_panic
在收到未知的NMI(不可屏蔽中断)时直接panic
oops=panic
在内核oops时直接panic(而默认是仅仅杀死oops进程[这样做会有很小的概率导致死锁]),而且这同样也会导致在发生MCE(CONFIG_X86_MCE)时直接panic。主要目的是和"panic="选项连用以实现自动重启。
[KNL] panic=秒数
内核在遇到panic时等待重启的行为: 秒数>0 等待指定的秒数后重启 秒数=0(默认值) 只是简单的挂起,而永不重启 秒数<0 立即重启

时钟(Timer)

时钟(Timer)的功能有两个:(1)定时触发中断;(2)维护和读取当前时间。x86_64平台常见的时钟硬件有以下这些: RTC(Real Time Clock) 实时时钟的独特之处在于,RTC是主板上一块电池供电的CMOS芯片(精度一般只到秒级),RTC(Clock)吐出来的是"时刻"(例如"2014-2-22 23:38:44"),而其他硬件时钟(Timer)吐出来的是"时长"(我走过了XX个周期,按照我的频率,应该是10秒钟)。 PIT(Programmable Interval Timer) PIT是最古老的时钟源,产生周期性的时钟中断(IRQ0),精度在100-1000Hz,现在基本已经被HPET取代。 APIC Timer 这是PIT针对多CPU环境的升级,每个CPU上都有一个APIC Timer(而PIT则是所有CPU共享的),但是它经常有BUG且精度也不高(3MHz左右),所实际很少使用。 ACPI Timer(Power Management Timer) 它唯一的功能就是为每个时钟周期提供一个时间戳,用于提供与处理器速度无关的可靠时间戳。但其精度并不高(3.579545MHz)。 HPET(High Precision Event Timer) HPET提供了更高的精度(14.31818MHz)以及更宽的计数器(64位)。HPET可以替代前述除RTC之外的所有时钟硬件(Timer),因为它既能定时触发中断,又能维护和读取当前时间。一个HPET包含了一个固定频率的数值递增的计数器以及3-32个独立计数器,每个计数器又包含了一个比较器和一个寄存器,当两者数值相等时就会触发中断。HPET的出现将允许删除芯片组中的一些冗余的旧式硬件。2006年之后的主板基本都已支持HPET。 TSC(Time Stamp Counter) TSC是位于CPU里面的一个64位寄存器,与传统的周期性时钟不同,TSC并不触发中断,它是以计数器形式存在的单步递增性时钟。也就是说,周期性时钟是通过周期性触发中断达到计时目的,如心跳一般。而单步递增时钟则不发送中断,取而代之的是由软件自己在需要的时候去主动读取TSC寄存器的值来获得时间。TSC的精度(纳秒级)远超HPET并且速度更快,但仅能在较新的CPU(Sandy Bridge之后)上使用。

[HW,ACPI] acpi_skip_timer_override
用于解决某些有缺陷的Nvidia nForce2 BIOS中的计时器覆盖问题(例如开启ACPI后频繁死机或时钟故障)。
[HW,ACPI] acpi_use_timer_override
用于解决某些有缺陷的Nvidia nForce5 BIOS中的计时器覆盖问题(例如开启ACPI后频繁死机或时钟故障)。
[APIC] no_timer_check
禁止运行内核中时钟IRQ源缺陷检测代码。主要用于解决某些AMD平台的 CPU占用过高以及时钟过快的故障。
pmtmr=十六进制端口号
手动指定pmtimer(CONFIG_X86_PM_TIMER)的I/O端口(16进制值),例如:pmtmr=0x508
acpi_pm_good
跳过pmtimer(CONFIG_X86_PM_TIMER)的bug检测,强制内核认为这台机器的pmtimer没有毛病。用于解决某些有缺陷的BIOS导致的故障。
[APIC] apicpmtimer
使用pmtimer(CONFIG_X86_PM_TIMER)来校准APIC timer。此选项隐含了"apicmaintimer"。用于 PIT timer彻底坏掉的场合。
[APIC] apicmaintimer noapicmaintimer
apicmaintimer 将APIC timer用于计时(而不是PIT/HPET中断)。这主要用于PIT/HPET中断不可靠的场合。 noapicmaintimer 不将APIC timer用于计时(而是使用PIT/HPET中断)。这是默认值。但有时候依然需要明确指定。
[APIC] lapic_timer_c2_ok
按照ACPI规范的要求,local APIC Timer 不能在C2休眠状态下关闭,但可以在C3休眠状态下关闭。但某些BIOS(主要是AMD平台)会在向操作系统报告CPU进入C2休眠状态时,实际进入C3休眠状态。因此,内核默认采取了保守的假定:认为 local APIC Timer 在C2/C3状态时皆处于关闭状态。如果你确定你的BIOS没有这个问题,那么可以使用此选项明确告诉内核,即使CPU在C2休眠状态,local APIC Timer 也依然可用。
[APIC] noapictimer
禁用CPU Local APIC Timer
enable_timer_pin_1 disable_timer_pin_1
开启/关闭APIC定时器的PIN1,内核将尽可能自动探测正确的值。但有时需要手动指定以解决某些有缺陷的ATI芯片组故障。
clocksource={jiffies|acpi_pm|hpet|tsc}
强制使用指定的时钟源,以代替内核默认的时钟源。 jiffies 最差的时钟源,只能作为最后的选择。 acpi_pm [ACPI]符合ACPI规范的主板都提供的硬件时钟源(CONFIG_X86_PM_TIMER),提供3.579545MHz固定频率,这是传统的硬件时钟发生器。 hpet 一种取代传统"acpi_pm"的高精度硬件时钟源(CONFIG_HPET),提供14.31818MHz固定频率。2007年以后的芯片组一般都支持。 tsc TSC(Time Stamp Counter)的主体是位于CPU里面的一个64位TSC寄存器,与传统的以中断形式存在的周期性时钟不同,TSC是以计数器形式存在的单步递增性时钟,两者的区别在于,周期性时钟是通过周期性触发中断达到计时目的,如心跳一般。而单步递增时钟则不发送中断,取而代之的是由软件自己在需要的时候去主动读取TSC寄存器的值来获得时间。TSC的精度更高并且速度更快,但仅能在较新的CPU(Sandy Bridge之后)上使用。
[KNL] highres={"on"|"off"}
启用(默认值)还是禁用高精度定时器模式。主要用于关闭主板上有故障的高精度时钟源。
nohpet
禁用HPET timer(CONFIG_HPET)
[HPET_MMAP] hpet_mmap
v3.13新增,默认允许对HPET寄存器进行映射,相当于开启了内核CONFIG_HPET_MMAP_DEFAULT选项。需要注意的是,某些包含HPET硬件寄存器的页中同时还含有其他不该暴露给用户的信息。
notsc tsc=reliable tsc=noirqtime
设置TSC时钟源的属性。 notsc 表示不将TSC用作"wall time"时钟源,主要用于不能在多个CPU之间保持正确同步的SMP系统。 tsc=reliable 表示TSC时钟源是绝对稳定的,关闭启动时和运行时的稳定性检查。用于在某些老旧硬件/虚拟化环境使用TSC时钟源。 tsc=noirqtime 不将TSC用于统计进程IRQ时间。主要用于在RDTSC速度较慢的CPU上禁止内核的CONFIG_IRQ_TIME_ACCOUNTING功能。 关于"TSC时钟源",详见"clocksource="选项的说明。

中断

常见的中断控制器有两种:传统的8259A和新式的APIC,前者也被称为"PIC"。8259A只适合单CPU的场合,而APIC则能够把中断传递给系统中的每个CPU,从而充分挖掘SMP体系结构的并行性。所以8259A已经被淘汰了。APIC系统由3部分组成:APIC总线(前端总线)、IO-APIC(南桥)、本地APIC(CPU)。每个CPU中集成了一个本地APIC,负责传递中断信号到处理器。而IO-APIC是系统芯片组中一部分,负责收集来自I/O设备的中断信号并发送到本地APIC。APIC总线则是连接IO-APIC和各个本地APIC的桥梁。

[SMP,APIC] noapic
禁止使用IO-APIC(输入输出高级可编程输入控制器),主要用于解决某些有缺陷的BIOS导致的APIC故障。
[APIC] nolapic disableapic
禁止使用local APIC。主要用于解决某些有缺陷的BIOS导致的APIC故障。"nolapic"是为了保持传统习惯的兼容写法,与"disableapic"的含义相同。
[APIC] nox2apic
关闭x2APIC支持(CONFIG_X86_X2APIC)
[APIC] x2apic_phys
在支持x2apic的平台上使用physical模式代替默认的cluster模式。
[KNL] threadirqs
强制线程化所有的中断处理器(明确标记为IRQF_NO_THREAD的除外)
[SMP,APIC] pirq=
手动指定mp-table的设置。此选项仅对某些有缺陷的、具备多个IO-APIC的高端主板有意义。详见 Documentation/x86/i386/IO-APIC.txt文档
[HW] irqfixup
用于修复简单的中断问题:当一个中断没有被处理时搜索所有可用的中断处理器。用于解决某些简单的固件缺陷。
[HW] irqpoll
用于修复高级的中断问题:当一个中断没有被处理时搜索所有可用的中断处理器,并且对每个时钟中断都进行搜索。用于解决某些严重的固件缺陷。

ACPI

高级配置与电源管理接口(Advanced Configuration and Power Interface)是提供操作系统与应用程序管理所有电源管理接口,包括了各种软件和硬件方面的规范。2004年推出3.0规范;2009年推出4.0规范;2011年推出5.0规范。2013年之后新的ACPI规格将由UEFI论坛制定。ACPI可以实现的功能包括:电源管理;性能管理;配置与即插即用;系统事件;温度管理;电池管理;SMBus控制器;嵌入式控制器。

[HW,ACPI] acpi={force|off|noirq|strict|rsdt|nocmcff|copy_dsdt}
ACPI的总开关。 force 表示强制启用ACPI(即使BIOS中已关闭); off 表示强制禁用ACPI(即使BIOS中已开启); noirq 表示不要将ACPI用于IRQ路由; strict 表示严格要求系统遵循ACPI规格(降低兼容性); rsdt 表示使用老旧的RSDT(Root System Description Table)代替较新的XSDT(Extended System Description Table); copy_dsdt 表示将DSDT(Differentiated System Description Table)复制到内存中。 更多信息可参考 Documentation/power/runtime_pm.txt以及"pci=noacpi"。
[HW,ACPI] acpi_backlight={vendor|video}
选择 屏幕背光亮度调节驱动。 video(默认值)表示使用通用的ACPI video.ko驱动(CONFIG_ACPI_VIDEO),该驱动仅可用于集成显卡。 vendor表示使用厂商特定的ACPI驱动(thinkpad_acpi,sony_acpi等)。 详见 Documentation/acpi/video_extension.txt文档。
[HW,ACPI] acpi_os_name="字符串"
告诉ACPI BIOS操作系统的名称。 常用于哄骗有缺陷的BIOS,让其以为运行的是Windows系统而不是Linux系统。 "Linux" = Linux "Microsoft Windows" = Windows 98 "Windows 2000" = Windows 2000 "Windows 2001" = Windows XP "Windows 2001 SP2" = Windows XP SP2 "Windows 2001.1" = Windows Server 2003 "Windows 2001.1 SP1" = Windows Server 2003 SP1 "Windows 2006" = Windows Vista "Windows 2006 SP1" = Windows Vista SP1 "Windows 2006.1" = Windows Server 2008 "Windows 2009" = Windows 7 / Windows Server 2008 R2 "Windows 2012" = Windows 8 / Windows Server 2012 "Windows 2013" = Windows 8.1 / Windows Server 2012 R2
[HW,ACPI] acpi_osi="字符串"
对于较新的内核(Linux-2.6.23之后)而言,当BIOS询问内核:"你是Linux吗?",内核都会回答"No",但历史上(Linux-2.6.22及更早版本)内核会如实回答"Yes",结果造成很多BIOS兼容性问题(主要是电源管理方面)。具体故事的细节请到内核源码文件 drivers/acpi/osl.c中搜索"The story of _OSI(Linux)"注释。 此选项用于修改内核中的操作系统接口字符串( _OSI string)列表默认值,这样当BIOS向内核询问:"你是xxx吗?"的时候,内核就可以根据修改后的列表中是否存在"xxx"回答"Yes"或"No"了,主要用于解决BIOS兼容性问题导致的故障(例如 屏幕亮度调整)。 acpi_osi="Linux"表示添加"Linux"; acpi_osi="!Linux"表示删除"Linux"; acpi_osi=!* 表示删除所有字符串(v3.13新增),可以和多个acpi_osi="Linux"格式联合使用; acpi_osi=! 表示删除所有内置的字符串(v3.13新增),可以和多个acpi_osi="Linux"格式联合使用; acpi_osi= 表示禁用所有字符串,仅可单独使用(不能联合使用)。
[HW,ACPI] acpi_serialize
强制内核以串行方式执行AML(ACPI Machine Language)字节码。用于解决某些有缺陷的BIOS导致的故障。
[ACPI] acpi_enforce_resources={strict|lax|no}
检查驱动程序和ACPI操作区域(SystemIO,SystemMemory)之间资源冲突的方式。 strict(默认值)禁止任何驱动程序访问已被ACPI声明为"受保护"的操作区域,这是最安全的方式,可以从根本上避免冲突。 lax允许驱动程序访问已被ACPI声明的保护区域(但会显示一个警告)。这可能会造成冲突,但是可以兼容某些老旧且脑残的驱动程序(例如某些硬件监控驱动)。 no表示根本不声明任何ACPI保护区域,也就是完全允许任意驱动程序访问ACPI操作区域。
[ACPI] pnpacpi=off
禁用ACPI的即插即用功能,转而使用古董的PNPBIOS来代替。

休眠与唤醒

[HW,ACPI] acpi_sleep={s3_bios,s3_mode,s3_beep,s4_nohwsig,old_ordering,nonvs,sci_force_enable}
ACPI休眠选项。 (1)s3_bios和s3_mode与显卡有关。计算机从S3状态(挂起到内存)恢复时,硬件需要被正确的初始化。这对大多数硬件都不是问题,但因为显卡是由BIOS初始化的,内核无法获取必要的恢复信息(仅存在于BIOS中,内核无法读取),所以这里就提供了两个选项,以允许内核通过两种不同的方式来恢复显卡,更多细节请参考 Documentation/power/video.txt文档。 (2)s3_beep主要用于调试,它让PC喇叭在内核的实模式入口点被调用时发出响声。 (3)s4_nohwsig用于关闭ACPI硬件签名功能,某些有缺陷的BIOS会因为这个原因导致从S4状态(挂起到硬盘)唤醒时失败。 (4)old_ordering用于兼容古董级的ACPI 1.0 BIOS (5)nonvs表示阻止内核在挂起/唤醒过程中保存/恢复ACPI NVS内存信息,主要用于解决某些有缺陷的BIOS导致的挂起/唤醒故障。 (6)sci_force_enable表示由内核直接设置SCI_EN(ACPI模式开关)的状态,主要用于解决某些有缺陷的BIOS导致的从S1/S3状态唤醒时的故障。
[HIBERNATION] noresume
禁用内核的休眠到硬盘功能(CONFIG_HIBERNATION),也就是不从先前的休眠状态中恢复(即使该状态已经被保存在了硬盘的swap分区上),并且清楚先前已经保存的休眠状态(如果有的话)。
[HIBERNATION] hibernate={noresume|nocompress}
设置休眠/唤醒属性: noresume 表示禁用唤醒,也就是在启动过程中无视任何已经存在的休眠镜像,完全重新启动。 nocompress 表示禁止对休眠镜像进行压缩/解压。
[HIBERNATION] resume={ /dev/swap | PARTUUID=uuid | major:minor | hex }
告诉内核被挂起的内存镜像存放在那个磁盘分区(默认值是CONFIG_PM_STD_PARTITION)。 假定内存镜像存放在"/dev/sdc15"分区上,该分区的 UUID=0123456789ABCDEF ,其主设备号是"8",次设备号是"47",那么这4种表示法应该分别这样表示: resume=/dev/sdc15 (这是内核设备名称,有可能与用户空间的设备名称不同) resume=PARTUUID=0123456789ABCDEF resume=08:47 resume=082F
[HIBERNATION] resume_offset=整数
指定swap header所在位置的偏移量(单位是PAGE_SIZE),偏移量的计算基准点是"resume="分区的起点。 仅在使用swap文件(而不是分区)的时候才需要此选项。详见 Documentation/power/swsusp-and-swap-files.txt文档
[HIBERNATION] resumedelay=秒数
在读取resume文件(设备)之前延迟的秒数,主要用于等待那些反应速度较慢的异步检测的设备就绪(例如USB/MMC)。
[HIBERNATION] resumewait
在resume设备没有就绪之前无限等待,主要用于等待那些反应速度较慢的异步检测的设备就绪(例如USB/MMC)。

温度控制

[HW,ACPI] thermal.act=摄氏度
-1 禁用所有"主动散热"标志点(active trip point) 正整数 强制设置所有的最低"主动散热"标志点的温度值,单位是摄氏度。 详见 Documentation/thermal/sysfs-api.txt文档。
[HW,ACPI] thermal.psv=摄氏度
-1 禁用所有"被动散热"标志点(passive trip point) 正整数 强制设置所有的"被动散热"标志点的温度值,单位是摄氏度。 详见 Documentation/thermal/sysfs-api.txt文档。
[HW,ACPI] thermal.crt=摄氏度
-1 禁用所有"紧急"标志点(critical trip point) 正整数 强制设置所有的"紧急"标志点的温度值,单位是摄氏度。 详见 Documentation/thermal/sysfs-api.txt文档。
[HW,ACPI] thermal.nocrt=1
禁止在ACPI热区(thermal zone)温度达到"紧急"标志点时采取任何动作。
[HW,ACPI] thermal.off=1
彻底关闭ACPI热量控制(CONFIG_ACPI_THERMAL)
[HW,ACPI] thermal.tzp=整数
设置ACPI热区(thermal zone)的轮询速度: 0(默认值) 不轮询 正整数 轮询间隔,单位是十分之一秒。

CPU节能

[KNL] nohz={on|off}
启用/禁用内核的dynamic ticks特性。默认值是"on"。
[KNL,BOOT] nohz_full=CPU列表
在内核"CONFIG_NO_HZ_FULL=y"的前提下,指定哪些CPU核心可以进入完全无滴答状态。 "CPU列表"是一个逗号分隔的CPU编号(从0开始计数),也可以使用"-"界定一个范围。例如"0,2,4-7"等价于"0,2,4,5,6,7" [注意](1)"boot CPU"(通常都是"0"号CPU)会无条件的从列表中剔除。(2)这里列出的CPU编号必须也要同时列进"rcu_nocbs=..."选项中。
[HW,ACPI] processor.nocst
不使用_CST方法检测C-states,而是用老旧的FADT方法检测。
[HW,ACPI] processor.max_cstate={0|1|2|3|4|5|6|7|8|9}
无视ACPI表报告的值,强制指定CPU的最大 C-state值(必须是一个有效值):C0为正常状态,其他则为不同的省电模式(数字越大表示CPU休眠的程度越深/越省电)。"9"表示无视所有的DMI黑名单限制。
[KNL,HW,ACPI] intel_idle.max_cstate=[0|正整数]
设置intel_idle驱动(CONFIG_INTEL_IDLE)允许使用的最大 C-state深度。"0"表示禁用intel_idle驱动,转而使用通用的acpi_idle驱动(CONFIG_CPU_IDLE)
idle=poll idle=halt idle=nomwait
对CPU进入 休眠状态的额外设置。 poll 从根本上禁用休眠功能(也就是禁止进入C-states状态),可以略微提升一些CPU性能,但是却需要多消耗许多电力,得不偿失。不推荐使用。 halt 表示直接使用HALT指令让CPU进入C1/C1E休眠状态,但是不再继续进入C2/C3以及更深的休眠状态。此选项兼容性最好,唤醒速度也最快。但是电力消耗并不最低。 nomwait 表示进入休眠状态时禁止使用CPU的MWAIT指令。MWAIT是专用于Intel超线程技术的线程同步指令,有助于提升CPU的超线程效能,但对于不具备超线程技术的CPU没有意义。 [提示]可以同时使用halt和nomwait,也就是"idle=halt idle=nomwait"(但不是:idle=halt,nomwait)
intel_pstate=disable
禁用 Intel CPU 的 P-state 驱动(CONFIG_X86_INTEL_PSTATE),也就是Intel CPU专用的频率调节器驱动

PCI与PCIE

[PCI] pci=选项[,选项...]
指定各种PCI子系统选项: earlydump 在内核做出任何改变之前,首先转储出 PCI配置空间。主要用于调试目的。 off 不检测PCI总线,也就是关闭所有PCI设备。 conf1 强制使用"PCI配置机制1"(目前的事实标准) conf2 强制使用"PCI配置机制2"(已被抛弃的老古董) noaer [PCIE]禁止使用CONFIG_PCIEAER功能(PCI Express Root Port Advanced Error Reporting) nodomains 禁止支持多个PCI root domain(也就是 PCI总线域[PCI segment]) nommconf 禁止使用通过MMCONFIG(CONFIG_PCI_MMCONFIG)方式访问PCI配置空间,MMCONFIG是PCI Express引入的新总线枚举方式。 check_enable_amd_mmconf 在 AMD family 10h CPU 上检查并启用正确配置的MMIO以访问PCI配置空间 nomsi [MSI]在全系统范围内禁止MSI中断(CONFIG_PCI_MSI)的使用 noioapicquirk [APIC]禁止屏蔽任何boot中断(CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS),以确保boot IRQ永远可用。应该永远不需要使用此选项。 ioapicreroute [APIC]允许将boot IRQ重新路由到主IO-APIC(相当于开启CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS),用于修复某些芯片组bug(在某些情况下会发送多余的"boot IRQ")。 noioapicreroute [APIC]禁止将boot IRQ重新路由到主IO-APIC(相当于关闭CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS),不建议使用此项。 rom 为扩展ROM分配地址空间。使用此选项要小心,因为某些设备在ROM与其它资源之间共享地址译码器。 norom 即使BIOS没有为扩展ROM分配地址空间,也禁止内核为扩展ROM分配地址空间。 nobar 即使BIOS没有为BAR分配地址空间,也禁止内核为BAR分配地址空间。 irqmask=0xMMMM 指定允许自动分配到PCI设备的IRQ位掩码,目的是为了避免使用那些被ISA设备占用的IRQ。 pirqaddr=0xAAAAA 如果PIRQ表(通常情况下由BIOS生成)在F0000h-100000h范围之外,此选项可用于明确指定其物理地址。 lastbus=N 通过扫描N号总线来扫描全部总线。如果内核不能找到第二条总线,可以通过此方法明确告知其位置。 assign-busses 总是使用内核自己生成的PCI总线号码替代固件自己生成的值。 usepirqmask 优先使用可能存在于BIOS $PIR表中的IRQ掩码。某些有缺陷的BIOS需要这个选项(例如HP Pavilion N5400和Omnibook XE3笔记本)。此选项仅在noioapicreroute(相当于关闭CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS)的前提下有效。 noacpi 不为IRQ路由或PCI扫描使用ACPI use_crs 使用来自ACPI的PCI主桥的窗口信息。在2008年之后的BIOS上,这是默认值,如果需要明确使用此项,请当做bug上报开发者。 nocrs 忽略来自ACPI的PCI主桥的窗口信息,如果需要明确使用此项,请当做bug上报开发者。 routeirq 对所有PCI设备使用IRQ路由。这个通常是由内核的pci_enable_device()函数完成,所以此项仅为那些忘记调用此函数的驱动提供的临时解决方案。 skip_isa_align 不对齐ISA IO起始地址,这样就可以处理更多的PCI卡 noearly 不做任何"early type 1"扫描,这样许多针对主板缺陷的检测将被禁止,同时某些IOMMU驱动也会失效。仅用于解决某些有缺陷的主板故障。 bfsort 按照宽度优先(breadth-first)的顺序对PCI设备进行排序。目的是为了以与2.4内核兼容的方式获取设备序号。 nobfsort 不按宽度优先(breadth-first)的顺序对PCI设备进行排序。 pcie_bus_tune_off 不对PCIe MPS( Max Payload Size)进行调整,而是使用BIOS配置好的默认值。 pcie_bus_safe 将每个设备的MPS都设为root complex下所有设备支持的MPS中的最大值 pcie_bus_perf 将设备的MPS设为其上级总线允许的最大MPS,同时将MRRS( Max Read Request Size)设为能支持的最大值(但不能大于设备或总线所支持的MPS值) pcie_bus_peer2peer 将每个设备的MPS都设为最安全的"128B",以确保支持所有设备之间的点对点DMA,同时也能保证热插入(hot-added)设备能够正常工作,但代价是可能会造成性能损失。 cbiosize=nn[KMG] 从CardBus桥的IO窗口中保留的固定长度的总线空间(bus space),默认值是256B。 cbmemsize=nn[KMG] 从CardBus桥的内存窗口中保留的固定长度的总线空间(bus space),默认值是64MB。 resource_alignment=[对齐规则@][域:]总线:插槽.功能[; ...] 为重新分配已对齐的内存资源指定对齐方式与设备。如果未指定对齐规则,那么将使用PAGE_SIZE作为对齐规则。也可以通过指定PCI-PCI桥来扩展资源窗口(resource windows)。 ecrc={bios|on|off} 启用/禁用PCIe ECRC(事务层的端对端CRC校验)。默认值是"bios"(使用BIOS/固件的设定)。 hpiosize=nn[KMG] 为热插拔桥的IO窗口保留的固定总线空间的大小,默认值是256B。 hpmemsize=nn[KMG] 为热插拔桥的内存窗口保留的固定总线空间的大小,默认值是2MB。 realloc={on|off} 当BIOS分配的PCI桥资源太小而无法满足所有子设备的需求时,是否由内核重新分配PCI桥资源。没有默认值(内核的默认值为"undefined") realloc 等价于"realloc=on" noari 不使用PCIe ARI pcie_scan_all 扫描所有可能的PCIe设备。默认只在每个PCIe下游端口扫描一个设备。
[PCIE] pcie_hp=nomsi
禁止PCIe本地热插拔使用MSI(CONFIG_PCI_MSI),这将导致所有PCIe端口使用INTx中断提供热插拔服务。
[PCIE] pcie_ports={auto|native|compat}
PCIe端口处理方式: auto 由BIOS来决定是否使用关联在PCIe端口上的本地PCIe服务(PME, hot-plug, AER) native 无条件的使用关联在PCIe端口上的本地PCIe服务(PME, hot-plug, AER) compat 禁用PCIe端口驱动,同时将PCIe端口当做PCI-to-PCI桥处理。
[PCIE] pcie_aspm={off|force}
强制启用/禁用PCIe Active State Power Management(CONFIG_PCIEASPM)。内核的默认值取决于内核"Default ASPM policy"的配置。 off 强制禁用 force 即使设备声明不支持ASPM也强制启用(可能会导致系统锁死)。
[PCIE] pcie_pme=nomsi
禁止本地PCIe PME信号使用MSI(CONFIG_PCI_MSI),这将导致所有PCIe root端口使用INTx中断提供所有服务。

LIBATA

[LIBATA] libata.noacpi
在libata驱动休眠/唤醒过程中禁止使用ACPI。主要用于解决某些有缺陷的BIOS导致的 硬盘假死问题。
[LIBATA] libata.dma=整数
控制DMA特性的使用 libata.dma=0 表示完全禁止所有SATA/PATA端口使用DMA libata.dma=1 表示仅允许SATA/PATA硬盘使用DMA libata.dma=2 表示仅允许ATAPI(CDROM)使用DMA libata.dma=4 表示仅允许CF卡使用DMA 上述1,2,4实际上是位掩码,可以组合使用,例如 libata.dma=3 表示允许硬盘和CDROM使用DMA,但是禁止CF卡使用DMA
[LIBATA] libata.ignore_hpa={0|1}
是否忽略 HPA(Host Protected Area)的限制。"0"(默认值)表示不忽略;"1"表示忽略(也就是可以使用整个磁盘空间)
[LIBATA] libata.force=PORT[.DEVICE]:VAL,PORT[.DEVICE]:VAL,...
手动强制指定libata的配置。 其中的"PORT[.DEVICE]"是libata驱动在控制台上以相同格式显示出来的ATA ID字符串(PORT和DEVICE都是十进制数字),下面是两个实例("1.00","2.00"):
ata1.00: ATAPI: VBOX CD-ROM, 1.0, max UDMA/133
ata2.00: ATA-6: VBOX HARDDISK, 1.0, max UDMA/133
如果不指定DEVICE部分,那么就表示适用于该PORT端口上的所有设备。 VAL部分用来强制设定设备属性: 40c, 80c, short40c, unk, ign, sata 这些都用于指定线缆类型 1.5Gbps, 3.0Gbps 这些都用于指定SATA连接速度 noncq, ncq 关闭还是开启NCQ功能 dump_id 转储IDENTIFY数据 pio[0-7], mwdma[0-4], udma[0-7](或者这么写也一样:udma[16,25,33,44,66,100,133]) 数据传输模式 nohrst, nosrst, norst 只禁止硬重置,只禁止软重置,同时禁止硬重置和软重置 rstonce 在热拔连接恢复(hot-unplug link recovery)过程中仅尝试一次重置 atapi_dmadir 开启 ATAPI DMADIR bridge 支持 disable 禁用该设备

键盘/鼠标/触摸板

[HW] atkbd.set={2|3}
设置atkbd驱动(CONFIG_KEYBOARD_ATKBD)的键盘类型:2(默认值)表示AT键盘;3 表示PS/2键盘。
[HW] atkbd.reset
在初始化AT或PS/2键盘时重置键盘状态。常用于解决从休眠状态唤醒后键盘失效的故障。
[HW] atkbd.softraw={0|1}
当键盘按键被按下时,是返回原始的扫描码(Scancode)还是经过转换之后的键码(Keycode)。常用于解决某些 功能键(例如Fn键)故障。 0 表示返回原始的扫描码(Scancode) 1(默认值)表示返回转换之后的键码(Keycode)
[USBHID] usbhid.mousepoll=毫秒数
USB鼠标的轮询时间间隔,单位是毫秒。默认值是"10",也就是每秒轮询100次,相当于100Hz
[MOUSE] mousedev.tap_time=毫秒数
手指触碰和离开触摸板的最大时间间隔,只有小于此间隔的触碰才会被当成鼠标左键单击。此选项仅对工作在绝对模式的触摸板有意义。
[MOUSE] mousedev.xres=正整数 mousedev.yres=正整数
触摸板的水平(X)/垂直(Y)方向的分辨率。

USB

[USB] nousb
禁用USB子系统(CONFIG_USB_SUPPORT)
[USB] usbcore.authorized_default={-1|0|1}
USB设备的默认授权规则: -1(默认值) 对除无线USB之外的设备默认授权 0 对所有设备都默认不授权 1 对所有设备都默认授权
[USB] usbcore.autosuspend=秒数
让USB设备(新检测到的设备以及空闲设备)进入自动休眠前的延迟秒数。默认为2秒。 如果将秒数设为负数,则表示永不进入自动休眠状态。
[USB] usbcore.initial_descriptor_timeout=毫秒数
等待设备回应初始化64位USB_REQ_GET_DESCRIPTOR请求的超时时间。默认值是"5000",也就是5秒。
[USB] usbcore.blinkenlights={0|1}
是否让所有的USB集线器(HUB)上的LED指示灯闪烁。默认值"0"表示不闪烁,"1"表示闪烁。
[USB] usbcore.usbfs_snoop={0|1}
是否在在日志中记录所有的usbfs traffic信息。默认值"0"表示不记录,"1"表示记录。
[USB] usbcore.old_scheme_first={0|1}
是否优先使用老旧的USB设备初始化方法。默认值"0"表示不优先使用。
[USB] usbcore.use_both_schemes={0|1}
是否在第一种USB设备初始化方法失败之后,继续尝试第二种方法。默认值"1"表示继续尝试第二种方法。
[USB] usbcore.usbfs_memory_mb=[0-2047]
由usbfs分配的缓存上限。取值范围是[0-2047],默认值是"16",单位是"MB"。
[UMS] usb-storage.delay_use=秒数
在扫描新USB存储设备上的逻辑单元(Logical Unit)前暂停的秒数。默认值是"5"秒。
[UMS] usb-storage.quirks=VID:PID:Flags[,VID:PID:Flags]...
设置一系列的修正项(quirk),用于增补或者改写内核内置的unusual_devs列表内容。该列表用于修正各种有缺陷的USB存储设备的怪毛病。 多个修正项之间用逗号分隔,修正项的格式是"VID:PID:Flags",其中VID和PID的含义分别是4位16进制数表示的"Vendor ID"与"Product ID"。 而Flags则是一组字符的组合,其中的每个字符都对应一个具有特定含义的修正(quirk)标记: a = SANE_SENSE (收集超过18字节的传感器数据) b = BAD_SENSE (不收集超过18字节的传感器数据) c = FIX_CAPACITY (无条件的将设备报告的扇区数(容量)减少一个扇区) d = NO_READ_DISC_INFO (不使用 READ_DISC_INFO 命令) e = NO_READ_CAPACITY_16 (不使用 READ_CAPACITY_16 命令) h = CAPACITY_HEURISTICS (如果设备报告的扇区数(容量)是奇数,那么就减少一个扇区) i = IGNORE_DEVICE (不绑定此设备) l = NOT_LOCKABLE (不要尝试锁定/解锁可弹出媒体) m = MAX_SECTORS_64 (每次传输最大不超过64个扇区(32KB)的数据) n = INITIAL_READ10 (强制重试初始的 READ(10) 命令(如果最初一次读取失败的话)) o = CAPACITY_OK (完全信任设备报告的扇区数(容量)) p = WRITE_CACHE (默认开启设备写入缓存[不怕数据丢失的风险]) r = IGNORE_RESIDUE (不相信设备报告的[容量]剩余值) s = SINGLE_LUN (此设备只有一个逻辑单元(Logical Unit)) w = NO_WP_DETECT (不检测设备是否有写保护) 例如:usb-storage.quirks=0419:aaf5:rl,0421:0433:rc
[USB] uhci-hcd.ignore_oc={0|1}
是否忽略"电流超限"(overcurrent)事件。 0(默认值) 不忽略 1 忽略。某些有缺陷的主板会在USB端口未连接任何设备时,报告很多虚假的"电流超限"事件。设为"1"之后可以避免在内核日志中出现大量的"电流超限"警告,但同时,真实的"电流超限"事件也会被一并忽略。

IOMMU

IOMMU非常类似于MMU,主要有如下功能:(1)IO地址转换[在64位系统上支持32位设备];(2)分散-聚集(scatter-gather)支持[简化驱动程序的编写];(3)DMA重映射与IRQ重映射[简化了IO设备的虚拟化]。 Linux内核当前的DMA映射有如下4种具体实现: (1)在内存不足3G的机器上,根本不使用任何IOMMU功能,因为根本没必要。内核消息:"PCI-DMA: Disabling IOMMU" (2)基于GART(CONFIG_GART_IOMMU)的硬件IOMMU。内核消息:"PCI-DMA: using GART IOMMU" (3)如果内存大于3G同时机器上又没有IOMMU硬件(或者用了"iommu=soft"),那么就使用软件模拟的IOMMU(CONFIG_BOUNCE)。内核消息:"PCI-DMA: Using software bounce buffering for IO (SWIOTLB)" (4)基于IBM Calgary硬件的IOMMU,仅用于IBM pSeries/xSeries系列服务器。内核消息:"PCI-DMA: Using Calgary IOMMU"

[IOMMU] iommu={off,force,noforce,soft}
通用IOMMU设置: off 彻底关闭IOMMU功能 force 强制使用硬件IOMMU,即使硬件可能有缺陷(例如VIA芯片组)或者根本没有必要这样做(例如内存不足3G)。 noforce(默认) 在内存不足3G的机器上,不使用硬件IOMMU,因为根本没有必要。 soft(Intel平台的默认值) 使用通过软件模拟的IOMMU(SWIOTLB),同时禁止使用硬件IOMMU(即使存在)。
[IOMMU] iommu=[SIZE][,allowed][,fullflush|nofullflush][,leak[=NUM]][,memaper[=N]|noaperture][,noagp][,merge|nomerge][,forcesac][,panic][,allowdac|nodac][,calgary]
仅适用于硬件IOMMU(GART与Calgary)的设置: SIZE 重映射区域的大小,单位是字节。 allowed 含义与"force"相同,即使硬件可能有缺陷(例如VIA芯片组)也强制使用硬件IOMMU fullflush(默认) 每次分配时都刷新IOMMU nofullflush 不刷新IOMMU leak=NUM 开启IOMMU泄漏跟踪(CONFIG_IOMMU_LEAK),NUM是的泄漏页数(默认值是20)。 memaper=N 在RAM中分配的固有窗口(own aperture)的大小,算法是 2 N*32MB,N的默认值是"1",也就是64MB。 noaperture 禁止IOMMU使用AGP的"aperture"。 noagp 不初始化AGP驱动,使用完全的"aperture"。 merge 强制"scatter-gather"合并,隐含了"force",这是一个实验性选项。 nomerge 禁止"scatter-gather"合并 forcesac 对于少于40位的掩码强制使用单地址周期(single-address cycle),这是一个实验性选项。 panic 当IOMMU益处时,允许panic allowdac 将32位PCI地址用两个时钟周期推入64位地址,这就是DAC的作用。 nodac 禁用DAC,也就是所有4GB以上的DMA将强制通过IOMMU(硬件的或模拟的) calgary 使用IBM Calgary IOMMU
swiotlb=页数[,force]
仅适用于软件IOMMU(CONFIG_BOUNCE)的设置: 页数 为"IO bounce buffer"预先保留的页数,每个页的大小是128K force 强制所有IO都透过软件IOMMU
[AMD-IOMMU] amd_iommu={fullflush|off|force_isolation}
向AMD IOMMU驱动(CONFIG_AMD_IOMMU)传递选项 fullflush 表示当IO/TLB项被取消映射的时候立即刷新IO/TLB项(严格模式,速度较慢),否则将仅在IO/TLB项被重用之前进行刷新(宽松模式,速度更快) off 表示彻底禁用AMD IOMMU功能 force_isolation 表示为所有设备强制启用IOMMU隔离(映射),这样IOMMU驱动就不再需要自己去发起隔离请求。注意:此选项不会覆盖"iommu=pt"
[Intel-IOMMU] intel_iommu={on,off,igfx_off,forcedac,strict,sp_off}
Intel-IOMMU驱动(CONFIG_INTEL_IOMMU)的主要功能就是DMA重映射,该选项用于设置其特性。 on 开启Intel-IOMMU驱动 off 关闭Intel-IOMMU驱动 igfx_off 关闭Intel集成显卡的DMA重映射功能(默认值为开启) forcedac 强制PCI设备使用DAC,而禁止进行地址转换(默认值为允许) strict 禁止批量刷写IOTLB(默认值为允许) sp_off 关闭super page支持(默认值为开启)
[Intel-IOMMU] intremap={on,off,nosid,no_x2apic_optout}
设置中断重映射功能: on(默认值)开启中断重映射 off 关闭中断重映射 nosid 重映射时不对SID(Source ID)做检查 no_x2apic_optout 无视BIOS的设置,强制禁用x2APIC特性,主要用于解决某些对x2APIC支持有缺陷的BIOS导致的故障

虚拟化

[PV_OPS] noreplace-paravirt
禁止使用内核通用的半虚拟化接口 paravirt_ops,主要用于解决某些在Virtual PC上安装或运行Linux的故障。
[VMMIO] virtio_mmio.device=size@baseaddr:irq[:id]
实例化virtio-mmio设备(CONFIG_VIRTIO_MMIO)。可以多次使用以实例化多个设备。 size 大小(可以使用K,M,G后缀) baseaddr 物理基准地址(physical base address) irq 中断号(将会被传递给request_irq()) id(可选) platform设备号(device id) 例子:virtio_mmio.device=1K@0x100b0000:48:7
[KVM] kvm.ignore_msrs={0|1}
是否忽略客户机对未经处理的MSR(unhandled MSR)的访问。"0"(默认值)表示不忽略但是会注入#GP;"1"表示忽略。
[KVM] kvm.mmu_audit={0|1}
是否允许在运行时对KVM MMU进行审计。"0"(默认值)表示禁止审计;"1"表示允许审计。
[KVM,AMD] kvm-amd.nested={0|1}
是否允许嵌套虚拟化(在虚拟机内再创建虚拟机)。"0"表示禁止嵌套;"1"(默认值)表示允许嵌套。
[KVM,AMD] kvm-amd.npt={0|1}
是否允许客户机使用嵌套页表(Nested Page Table)。"0"表示禁止使用;"1"(默认值)表示允许使用。
[KVM,Intel] kvm-intel.ept={0|1}
是否允许客户机使用扩展页表(Extended Page Table)。"0"表示禁止使用;"1"(默认值)表示允许使用。
[KVM,Intel] kvm-intel.emulate_invalid_guest_state={0|1}
是否允许仿真无效的客户机状态。"0"(默认值)表示禁止仿真;"1"表示允许仿真。
[KVM,Intel] kvm-intel.flexpriority={0|1}
是否允许使用FlexPriority技术(TPR[Task Priority Register] shadow)。"0"表示禁止使用;"1"(默认值)表示允许使用。
[KVM,Intel] kvm-intel.nested={0|1}
是否允许VMX嵌套(nVMX)。"0"(默认值)表示禁止;"1"表示允许。
[KVM,Intel] kvm-intel.unrestricted_guest={0|1}
是否允许使用"unrestricted guest"技术。"0"表示禁止使用;"1"(默认值)表示允许使用。
[KVM,Intel] kvm-intel.vpid={0|1}
是否允许使用"Virtual Processor Identification"(tagged TLB)技术。"0"表示禁止使用;"1"(默认值)表示允许使用。

内存

[KNL,BOOT] mem=nn[KMG]
强制指定内核使用多少数量的内存。仅在你想限定内存使用量时,才需要指定这个选项。同时为了避免PCI设备使用指定范围之外的内存,你还应该配合"memmap="一起使用。
[KNL] memmap=exactmap
表示将要使用随后的"memmap=..."等选项进行精确的 E820内存映射(因为有时候E820报告的并不准确),同时禁止内核进行任何自动的探测。比如对于一个4G内存的机器可能是:"memmap=exactmap memmap=640K@0 memmap=4095M@1M"。
[KNL] memmap=nn[KMG]@ss[KMG]
强制只使用从ss开始的nn长度的特定内存区域。可以多次使用以指定多个区域。
[KNL,ACPI] memmap=nn[KMG]#ss[KMG]
强制将从ss开始的nn长度的特定内存区域标记为ACPI数据。
[KNL,ACPI] memmap=nn[KMG]$ss[KMG]
强制保留(不使用)从ss开始的nn长度的特定内存区域。
[KNL,BUGS] reserve=起点,长度[,起点,长度]...
禁止设备驱动程序自动探测某些iomem区域,因为某些设计不良的硬件会导致自动探测失败或出错。此外,还可以用于人为禁止内核初始化某些端口上的设备。 内核会将此处指定的iomem区域标记为"reserved"(意为"已经在此处找到设备"),从而将该区域保留。 因为设备驱动不应该去侦测标记为"reserved"的区域,除非另一个启动选项明确地指示它这样做,所以此选项经常和其它启动选项一起使用: 用"reserve="保留一段区域禁止所有其他驱动的探测,同时再明确指定一个驱动去检测被保留的区域。例如:
reserve=0x300,32  blah=0x300
的意思是:除了允许"blah"驱动探测 0x300 之外,禁止任何其他驱动探测 0x300-0x31f 区域。 绝大部份的机器都不需要此选项。只有真正有缺陷的硬件或特殊情况才会需要使用它。 [注意]每个"reserve="选项最多可以指定4个保留区域,如果你有异常复杂的需求,可以使用多重"reserve="来指定。
reservelow=nn[K]
设置为BIOS保留的底端地址空间数量。
memory_corruption_check={0|1}
是否开启低位内存脏数据检查(CONFIG_X86_CHECK_BIOS_CORRUPTION)。某些有bug的BIOS经常会在执行系统休眠/唤醒之类动作的时候,破坏内存中前64k的内容。如果始终检查到错误,那么就应该通过"memmap="选项来避免使用这段内存。
memory_corruption_check_size=字节数
低位内存脏数据检查(CONFIG_X86_CHECK_BIOS_CORRUPTION)的内存范围。默认值是"64K",表示"0-64K"这个内存范围。
memory_corruption_check_period=秒数
低位内存脏数据检查(CONFIG_X86_CHECK_BIOS_CORRUPTION)的周期。默认值是60秒。设为"0"则表示禁止这种周期性的检查。
[KNL,BOOT] vmalloc=nn[KMG]
强制指定vmalloc区域的大小。可用于增加vmalloc区域的最小尺寸(x86默认128MB),也可以用于减少vmalloc的大小,增加更多的空间用于直接映射内核RAM。
[SLUB] slub_min_order=整数 slub_max_order=整数
SLUB页块最小与最大order数(默认值分别是"0"与"3"),当然slub_min_order必须小于slub_max_order。每一个slab需要2 order个物理页框。过高的值可能会导致内存溢出错误。详见 Documentation/vm/slub.txt
[SLUB] slub_min_objects=整数
每个slab的最小object总数目(默认值是"4")。详见 Documentation/vm/slub.txt
[SLUB] slub_nomerge
禁止合并大小相近的多个slab,主要用于调试目的。
[KNL] dhash_entries=正整数
设置内核目录项缓存中哈希表默认项数。仅供内核专家使用。
[KNL] ihash_entries=正整数
内核会在内存中缓存一定数量的inode结构来加速文件访问,每个inode对应一个文件(不同于文件系统中的inode概念),包含文件访问权限/属主/组/大小/生成时间/访问时间/最后修改时间等信息。这些inode保存在一个哈希表中。 这个值用于指定这个哈希表的最大项数。你可以根据自己硬盘上可能被访问的文件数量对默认值进行调整(注意需要考虑哈希值的碰撞)。仅供内核专家使用。
[KNL] transparent_hugepage={always|madvise|never}
设置透明大内存页(CONFIG_TRANSPARENT_HUGEPAGE)的默认用法: always 表示总是对所有应用程序启用透明大内存页支持 madvise 表示仅对明确要求该特性的程序启用 never 表示彻底禁用。 其默认值由内核的编译时设置决定。详见" Documentation/vm/transhuge.txt"文档。
[HW] default_hugepagesz={2M|1G}
默认的HugeTLB页大小。若未指定,那么其默认值就是CPU自身的默认值。 大多数现代计算机体系结构提供对多页面大小的支持,比如X86_64支持4K和2M(要求CPU带有"pse"标记)以及1G(要求CPU带有"pdpe1gb"标记)。 因此Linux将物理内存划分成许多固定大小的页面(默认为4K),每个页对应一个page结构,这些结构组成一个mem_map[]数组。TLB(Translation Lookaside Buffer)是虚拟地址到物理地址的翻译缓冲区,这种缓冲区在处理器上是很宝贵的,操作系统总是尝试将有限的TLB资源发挥到极致。特别是能够轻松获得若干G内存的时候(大于4G),这种优化就显得尤为关键。而HugeTLB特性则允许将某些页的尺寸增大到2MB或1GB,从而大大减小TLB的尺寸,提高缓冲区的命中率,进而提升内存性能。
[HW] hugepagesz={2M|1G}
指定HugeTLB页的大小,通常与"hugepages="联合使用(可使用多次),为不同尺寸的大页分别预留不同的数量。 例如:hugepagesz=2M hugepages=128 hugepagesz=1G hugepages=8 注意:1GB的大页只能在命令行上使用"hugepages="预先分配,且分配之后不可在运行时释放。
[HW] hugepages=正整数
在启动时分配的HugeTLB页数量,仅在内核开启了CONFIG_HUGETLBFS之后有效。
gbpages nogbpages
是否允许内核页表对大小为1GB的Hugepages进行直接映射(CONFIG_DIRECT_GBPAGES)。当"CONFIG_DIRECT_GBPAGES=y"时,默认值是"gbpages"。
vdso={0|1|2}
vdso=0 禁用 VDSO(Virtual Dynamic Shared Object)映射 vdso=1 启用 VDSO(Virtual Dynamic Shared Object)映射,这是"CONFIG_COMPAT_VDSO=n"时的默认值。 vdso=2 将 VDSO(Virtual Dynamic Shared Object)映射到旧式的确定性地址,这是"CONFIG_COMPAT_VDSO=y"时的默认值。
vdso32={0|1|2}
vdso32=0 禁用32位 VDSO(Virtual Dynamic Shared Object)映射 vdso32=1 启用32位 VDSO(Virtual Dynamic Shared Object)映射,这是"CONFIG_COMPAT_VDSO=n"时的默认值。 vdso32=2 将32位 VDSO(Virtual Dynamic Shared Object)映射到旧式的确定性地址,这是"CONFIG_COMPAT_VDSO=y"时的默认值。

MTRR与PAT

enable_mtrr_cleanup disable_mtrr_cleanu

标签: 传感器rl70ce

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台