天天看點

Linux 核心引導選項簡介

作者:金步國

版權聲明

本文作者是一位開源理念的堅定支援者,是以本文雖然不是軟體,但是遵照開源的精神釋出。

  • 無擔保:本文作者不保證作品内容準确無誤,亦不承擔任何由于使用此文檔所導緻的損失。
  • 自由使用:任何人都可以自由的閱讀/連結/列印此文檔,無需任何附加條件。
  • 名譽權:任何人都可以自由的轉載/引用/再創作此文檔,但必須保留作者署名并注明出處。

其他作品

本文作者十分願意與他人分享勞動成果,如果你對我的其他翻譯作品或者技術文章有興趣,可以在如下位置檢視現有的作品集:

  • 金步國作品集 [ http://www.jinbuguo.com/ ]

聯系方式

由于作者水準有限,是以不能保證作品内容準确無誤。如果你發現了作品中的錯誤(哪怕是錯别字也好),請來信指出,任何提高作品品質的建議我都将虛心接納。

  • Email(QQ):70171448在QQ郵箱

概述

核心引導選項大體上可以分為兩類:一類與裝置無關、另一類與裝置有關。與裝置有關的引導選項多如牛毛,需要你自己閱讀核心中的相應驅動程式源碼以擷取其能夠接受的引導選項。比如,如果你想知道可以向 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)的大小,算法是 2N*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]

[email protected]:irq[:id]

執行個體化virtio-mmio裝置(CONFIG_VIRTIO_MMIO)。可以多次使用以執行個體化多個裝置。

size 大小(可以使用K,M,G字尾)

baseaddr 實體基準位址(physical base address)

irq 中斷号(将會被傳遞給request_irq())

id(可選) platform裝置号(device id)

例子:[email protected]: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 [email protected] [email protected]"。

[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需要2order個實體頁框。過高的值可能會導緻記憶體溢出錯誤。詳見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_cleanup

開啟/關閉MTRR cleanup(CONFIG_MTRR_SANITIZER)特性。

mtrr_chunk_size=nn[KMG]

用于"MTRR cleanup"(CONFIG_MTRR_SANITIZER)功能,設定允許的最大連續塊尺寸(也就是uncacheable項)。

mtrr_gran_size=nn[KMG]

用于"MTRR cleanup"(CONFIG_MTRR_SANITIZER)功能,設定MTRR塊的粒度(每塊的大小)。預設值是"1"。較大的值可以防止小的對齊耗盡MTRR。

mtrr_spare_reg_nr=N

用于"MTRR cleanup"(CONFIG_MTRR_SANITIZER)功能,設定備用MTRR項的編号。也就是告訴核心reg0N可以被清理或改寫(參見"/proc/mtrr"檔案),預設值是"1"。

nopat

禁用PAT支援(CONFIG_X86_PAT)。主要用于解決某PAT故障導緻的無法正常啟動或者顯示卡驅動不能正常工作的問題。

圖形與顯示

[AGP]

agp={off|try_unsupported}

off 表示關閉核心的AGP(CONFIG_AGP)支援;

try_unsupported 表示嘗試驅動那些不受支援的晶片(可能會導緻系統崩潰或資料錯誤)

[HW,DRM]

gamma=浮點數

設定顯示器的Gamma值。

video.brightness_switch_enabled={0|1}

[背景知識]如果ACPI video.ko驅動(CONFIG_ACPI_VIDEO)能夠收到使用者通過鍵盤熱鍵觸發的ACPI事件(這需要固件的幫助),video.ko将會把收到的ACPI事件轉化為一個"key"類型輸入事件,并通過其建立的輸入裝置發送到使用者空間,這樣使用者空間的工具就可以通過sysfs接口去修改顯示器的亮度。這是傳統的做法。

但是從v3.13核心開始,新增了此選項,并且其預設值為"1",表示video.ko驅動除了向使用者空間傳遞事件之外,還要自己在核心層去改變顯示器的亮度。

如果設為"0"則表示不在核心層改變顯示器的亮度,依然留給使用者層的工具去通過sysfs接口修改。

詳見Documentation/acpi/video_extension.txt文檔。

[DRM]

i915.invert_brightness={-1|0|1}

反轉顯示器背光亮度控制變量(brightness)的含義。

通常情況下,brightness的值為"0"表示關閉背光(全黑),随着brightness的值增大到最大值,表示最大亮度。

但是通過這個選項,可以反轉brightness的含義,讓"0"表示最亮,而随着brightness值的遞增亮度逐漸降低,直到最大值關閉背光(全黑)。

-1 表示絕不反轉其含義,也就是"0"始終表示關閉,最大值始終表示最亮。

0 表示核心不對此變量的含義加以幹預,使用機器自身的預設含義。

1 表示強制反轉其含義,也就是"0"始終表示最亮,最大值始終表示關閉。

此選項常用于解決某些使用Intel集顯/核顯(CONFIG_DRM_I915)的電腦在啟動時黑屏的問題。

[FB]

logo.nologo

在系統啟動時不顯示Linux的企鵝标志圖(企鵝數=CPU核心數)

網絡

[IPV6]

ipv6.disable={0|1}

ipv6.disable_ipv6={0|1}

是否在所有網絡接口上禁用IPv6支援:0(預設值)表示在所有網絡接口上開啟IPv6支援;1 表示在所有網絡接口上關閉IPv6支援。建議使用"ipv6.disable=1"(徹底禁用ipv6核心子產品)

[IPV6]

ipv6.autoconf={0|1}

是否在所有網絡接口上開啟IPv6位址自動配置。

0 表示禁止自動配置,這樣就隻有IPv6回環位址(::1)和"link-local"位址會被自動添加到網絡接口上。如果你不想從路由器公告(Router Advertisements)中的位址字首自動生成IPv6位址,可以使用此項。

1(預設值) 表示在所有網絡接口上開啟IPv6位址自動配置

[IP_PNP]

ip=[client-ip:server-ip:gateway-ip:netmask:hostname:device:]autoconf[:dns0-ip:dns1-ip]

此選項告訴核心如何在啟動過程中配置網卡的IP位址及路由表(而不是在啟動完成後依賴使用者空間的腳本去配置)。僅在核心已啟用了CONFIG_IP_PNP的前提下有效。通常用于需要将NFS挂載為根檔案系統(CONFIG_ROOT_NFS)的場合。

此選項有以下4種用法:

(1)ip={off|none}或者沒有使用"ip"選項。這是預設值,表示徹底關閉自動配置功能。

(2)ip={dhcp|bootp|rarp|any} 表示核心全自動完成所有配置工作(也就是将所有字段設為各自的預設值)。各選項的含義參見下面對autoconf字段的說明。

(3)将autoconf字段設為{off|none}之一,并明确指定所有其它字段。表示全靜态配置,也就是手動指定各字段的值(禁止自動檢測)。

(4)将autoconf字段設為{dhcp|bootp|rarp|any}之一,并明将部分字段留白(字段分割符":"不能省略)。表示半自動配置,也就是将留白的字段設為各自的預設值(自動檢測),而将手動指定的字段設為指定的值(禁止自動檢測)。

各字段的說明如下:

client-ip NFS用戶端IP位址。若留白,其預設值将通過自動檢測擷取。

server-ip NFS伺服器IP位址。該字段僅在需要将NFS挂載為根檔案系統(root=/dev/nfs)的時候才是必須的。如果使用RARP檢測client-ip并且此字段非空,那麼将僅接受指定伺服器的應答。若留白,其預設值将通過自動檢測擷取(也就是自動配置伺服器的位址)。

gateway-ip 網關的IP位址。僅在NFS伺服器位于不同子網的時候才是必須的。若留白,其預設值将通過自動檢測擷取。

netmask 子網路遮罩。若留白,其預設值将通過自動檢測擷取(根據client-ip所屬的位址類型[A/B/C之類])。

hostname NFS用戶端的主機名。若留白,其預設值将通過自動檢測擷取(client-ip的ASCII表示形式)。

device 使用的網卡。若留白,其預設值将通過自動檢測擷取:若有多個網卡,那麼将通過所有網卡同時發送自動配置請求包,并将最先接收到應答的網卡設為預設網卡。

autoconf 自動配置方式。{off|none}表示不使用自動配置(必須手動指定個字段的值);{dhcp|bootp|rarp}分别表示隻使用DHCP/BOOTP/RARP協定進行自動配置(當然核心必須支援指定的協定);"any"表示使用核心支援的所有自動配置協定(同時發送不同協定的自動配置請求包,以最先接收到的應答為準)。 dns0-ip 主DNS伺服器IP位址。若留白,其預設值将通過自動檢測擷取。其值将通過 /proc/net/pnp 導出到使用者空間。在嵌入式系統上,/etc/resolv.conf 常常是到 /proc/net/pnp 的軟連接配接。

dns1-ip 輔DNS伺服器IP位址。其它同上。

[KNL,NET]

rhash_entries=正整數

設定核心路由緩沖區哈希表的大小,僅供核心網絡專家使用。

[KNL,NET]

thash_entries=正整數

設定核心允許使用的TCP連結哈希表的大小。

[KNL,NET]

uhash_entries=正整數

設定核心允許使用的UDP/UDP-Lite連結哈希表的大小。

[NETFILTER]

nf_conntrack.acct={0|1}

是否允許對連接配接追蹤(CONFIG_NF_CONNTRACK)流進行記賬。"0"(預設值)表示禁止記賬,"1"表示允許記賬。

塊裝置與磁盤陣列

blkdevparts=

手動設定塊裝置分區表(而不是從塊裝置讀取),主要用于嵌入式環境或分區表損壞恢複的場合。詳情參見Documentation/block/cmdline-partition.txt文檔

[EFI]

gpt

強制将擁有有效GPT簽名但同時又包含無效"保護MBR"的磁盤當做GPT格式的磁盤。

[IOSCHED]

elevator={"bfq"|"cfq"|"deadline"|"noop"}

指定預設的IO排程器

[LOOP]

loop.max_loop=[0-256]

在系統啟動時無條件的預先建立的回環(loopback)裝置數,預設值由CONFIG_BLK_DEV_LOOP_MIN_COUNT決定。如果你使用util-linux-2.21以上版本,建議設為"0"(loop裝置将通過/dev/loop-control動态建立)。

[HW,RAID]

raid={autodetect|noautodetect,partitionable|part}

明确向核心的MD驅動(CONFIG_BLK_DEV_MD)傳遞RAID配置屬性

autodetect|noautodetect 表示核心是否應該自動檢測RAID模式(CONFIG_MD_AUTODETECT)。如果關閉了自動檢測,那麼必須使用"md="明确告訴核心RAID模式及配置。

partitionable|part 兩者含義相同,都表示核心應該将組裝之後得到的RAID裝置視為"可分區"裝置。

[HW,RAID]

md=N,dev0,dev1,...

明确向核心的MD驅動(CONFIG_BLK_DEV_MD)傳遞RAID配置資訊,并将列出的裝置(dev0,dev1,...)組裝為 /dev/mdN 陣列(表現為一個塊裝置檔案)。

建議僅在根檔案系統位于RAID上的情況下使用這個選項。其他非根檔案系統的RAID最好在系統啟動後(挂載完根之後)再組裝。

N 可以是 0,1,2,3,...,255 中的任意一個整數,表示被建立的md裝置的編号,例如:

md=2,/dev/sda,/dev/sdb,/dev/sdc,/dev/sdd      

表示将 /dev/sda,/dev/sdb,/dev/sdc,/dev/sdd 組裝成 /dev/md2 塊裝置(至于RAID級别之類的資訊則由存儲在超級塊中的中繼資料提供)。

[提示]2.6.28之前的老版本核心對建立的陣列還有所謂"可分區陣列"和"不可分區陣列"的差別,具體表現是:如果在N前加上字母"d",則表示所建立的陣列是一個可分區陣列,否則就是不可分區陣列。不過現在已經沒有這個差別了,所有建立的陣列都是可分區的,是以"d"也就沒有存在的必要了。

根檔案系統

[KNL]

root=字元串

指定根檔案系統的所在位置。通常這是一個必須明确設定的選項。

"字元串"可以使用如下幾種形式:

XXxx 一個16進制數,其中"XX"是主裝置号,"xx"是次裝置号。例如"/dev/sdc15"(主裝置号是"8",次裝置号是"47"),可以表示成"082F"。

/dev/nfs 表示使用由nfsroot選項指定的NFS磁盤,僅在根檔案系統位于NFS檔案系統上的時候才使用。

/dev/disk 表示一塊完整的無分區塊裝置。比如:/dev/md0 /dev/loop0 /dev/sdb /dev/mmcblk0

/dev/diskN 表示disk磁盤的第N(十進制)個分區。這是最常見的用法,比如:/dev/sda2 /dev/ubda1 /dev/xvda13

/dev/diskpN 含義與上面的一樣,也表示disk磁盤的第N(十進制)個分區,但是用于disk本身以數字結尾的情況(避免混淆)。比如:/dev/md0p3 /dev/emd/0p2 /dev/mmcblk0p1

PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF 僅用于EFI/GPT格式的磁盤,表示分區表中UUID值為"00112233-4455-6677-8899-AABBCCDDEEFF"的分區。[提示]可以使用blkid檢視"PARTUUID"。

PARTUUID=SSSSSSSS-PP 僅用于傳統的MSDOS分區表。"SSSSSSSS"是用16進制表示的32位"NT disk signature","PP"是用16進制表示的分區号。比如:PARTUUID=97531ACF-02 可能相當于 /dev/sda2

PARTUUID=XXXX/PARTNROFF=N 表示以UUID="XXXX"的分區為基準,偏移N個分區。假定 /dev/sdb5 的UUID=XXXX,那麼 PARTUUID=XXXX/PARTNROFF=3 就表示 /dev/sdb8 ,而 PARTUUID=XXXX/PARTNROFF=-3 則表示 /dev/sdb2

major:minor 由一對十進制數組成,其中major是主裝置号,minor是次裝置号。例如"/dev/sdc15"(主裝置号是"8",次裝置号是"47"),可以表示成"8:47"。

LABEL=??? 表示卷标為"???"的分區。比如:root=LABEL=/ 。不過這種格式并不被核心直接支援,僅是發行版通過initramfs中的腳本添加了這種格式的支援而已。是以并不通用。

[KNL]

rootfstype=檔案系統類型

指定根檔案系統的類型。例如:"xfs"或"ext4"之類

[KNL]

rootflags=挂載選項

設定根檔案系統的挂載選項,比如"noatime,ro"。各種不同的檔案系統所能使用的選項各不相同,可以參考 mount 程式的選項。

[KNL]

ro

rw

以隻讀(ro)/讀寫(rw)模式挂載根檔案系統

[KNL]

rootdelay=秒數

在挂載根檔案系統前延遲多少秒,主要用于等待那些反應速度較慢的異步檢測的裝置就緒(例如USB/MMC/FireWire)。

[KNL]

rootwait

在根檔案系統就緒之前無限等待。主要用于等待那些反應速度較慢的異步檢測的裝置就緒(例如USB/MMC/FireWire)。

系統初始化(init)

[KNL]

init=檔案全路徑

指定核心挂載根檔案系統後運作的第一個使用者空間程式的絕對路徑。預設為"/sbin/init"。

[KNL]

rdinit=全路徑

設定從initramfs中運作的第一個使用者空間程式的絕對路徑,預設為"/init"。

[注意]一旦使用了initramfs并且成功的運作了其中的"/init",所有"init"以及與根檔案系統相關的選項(包括"nfsroot")對核心而言都将失效。

initramfs中的腳本必須自己分析各個核心引導選項(/proc/cmdline)并完成根檔案系統的挂載與切換,當然也包括啟動真正的"init"程序。

[KNL]

S

以單使用者模式運作"init"。注意,這不是一個真正的核心選項,隻是給initramfs中的腳本用的。是以并不通用。

NFS(網絡檔案系統)

[NFS]

lockd.nlm_grace_period=秒數

為NFS鎖管理器指定寬限時間,機關是秒。取值範圍在[0-240]?

[NFS]

lockd.nlm_tcpport=端口号

為NFS鎖管理器指定TCP端口

[NFS]

lockd.nlm_timeout=秒數

為NFS鎖管理器指定預設逾時時間,機關是秒。預設值是10秒。取值範圍在[3-20]?

[NFS]

lockd.nlm_udpport=端口号

為NFS鎖管理器指定UDP端口

[NFS]

nfsroot=[server-ip:]root-dir[,nfs-options]

指定NFS根檔案系統的位置。如果沒有設定此選項,那麼将使用"/tftpboot/本機IP"(預設值)作為根檔案系統,并使用預設的NFS挂載選項。

server-ip NFS伺服器IP位址。其預設值是"ip"選項中的server-ip字段的值。

root-dir 作為根檔案系統挂載的NFS伺服器的目錄。如果其中包含"%s",那麼将會被替換為本機IP位址的ASCII表示形式。

nfs-options 标準的NFS檔案系統挂載選項(例如"ro"),多個選項之間使用逗号分隔。下面是預設使用的值:

port     = 由NFS伺服器的portmap守護程序給出
  rsize    = 4096
  wsize    = 4096
  timeo    = 7
  retrans  = 3
  acregmin = 3
  acregmax = 60
  acdirmin = 30
  acdirmax = 60
  flags    = hard,nointr,noposix,cto,ac
      

[NFS]

nfsrootdebug

在啟動過程中,在核心日志裡顯示詳細的NFS相關的調試資訊(挂載選項、伺服器IP位址、根檔案系統路徑等),以友善調試和故障診斷。

[NFS]

nfs.callback_tcpport=端口号

設定NFSv4回複通道(callback channel)監聽的TCP端口

[NFS]

nfs.cache_getent=路徑

設定用于更新NFS用戶端緩存項的程式的路徑。預設值是"/sbin/nfs_cache_getent"。

[NFS]

nfs.cache_getent_timeout=秒數

嘗試更新緩存項逾時秒數,超過指定時間仍未更新成功則視為更新失敗。預設值是15秒。

[NFS]

nfs.idmap_cache_timeout=秒數

設定idmapper緩存項的最大壽命,機關是秒。

[NFS]

nfs.enable_ino64={0|1}

是否開啟64位inode号。"0"表示NFS用戶端将會為readdir()與stat()系統調用模拟一個32位inode号(而不是傳回真實的64位inode号)。"1"(預設值)表示傳回真實的64位inode号。

[NFSv4.1]

nfs.max_session_slots=正整數

設定NFS用戶端嘗試和伺服器端協商的最大會話slot數。這也同時限定了用戶端能夠像伺服器端發送的最大并發RPC請求數。預設值是64。将此值設定為比max_tcp_slot_table_limit大是沒有價值的。

[NFSv4]

nfs.nfs4_unique_id=字元串

指定NFSv4用戶端插入到nfs_client_id4字元串中的額外的唯一辨別字元串。這通常是一個在系統安裝時自動生成的UUID。

[NFSv4.1]

nfs.send_implementation_id={0|1}

是否在exchange_id請求中包含用戶端實作識别資訊(implementation identification information)。"0"表示不發送,預設值"1"表示發送。

[NFSv4]

nfs.recover_lost_locks={0|1}

v3.12新增。是否嘗試恢複伺服器上由于租約逾時而丢失的鎖。需要注意的是,這樣做很有可能會導緻資料錯誤,因為無法保證逾時後的鎖檔案未被更改。預設值"0"表示不做這樣的嘗試,而"1"則表示嘗試恢複(這是v3.11及之前核心的預設行為)。

[NFSv4]

nfs.nfs4_disable_idmapping={0|1}

預設值"1"表示在使用了"sec=sys"挂載選項的情況下,RPC身份認證和NFS操作都使用數字化的uid/gid。這會導緻idmapping被禁用,進而讓NFSv2/v3向NFSv4的遷移變得更加容易。用戶端将會自動檢測不支援此種操作模式的伺服器,并回退到使用idmapper的模式。"0"表示禁止這種行為。

[NFSv4]

nfsd.nfs4_disable_idmapping={0|1}

預設值"1"表示NFSv4伺服器與那些使用auth_sys的用戶端之間隻使用數字化的uid/gid(包括發送與接收),進而讓NFSv2/v3向NFSv4的遷移變得更加容易。"0"表示禁止這種行為。

子產品功能

nomodule

禁用核心子產品加載功能(CONFIG_MODULES)。

[KNL]

module.sig_enforce

強制核心在加載子產品時檢查子產品簽名(CONFIG_MODULE_SIG),并且隻接受具有合法簽名的子產品。如果核心開啟了CONFIG_MODULE_SIG_FORCE,那麼無論是否使用此選項,都将強制檢查子產品的簽名。

安全

no_file_caps

要求核心無視檔案的權限。這樣,執行檔案的唯一途徑就隻有:由root去執行或者setuid root

noexec={on|off}

noexec32={on|off}

是否允許将某部分記憶體映射為"禁止執行",這是一種防止資料緩沖區溢出攻擊的保護措施(也就是WinXP SP2曾經大力宣傳的資料執行保護功能),建議保持預設值"on"。

[說明]noexec對32bit代碼以及64bit代碼都有限制力,而noexec32隻針對32bit代碼。

nosmap

禁用SMAP(CONFIG_X86_SMAP)支援。SMAP是Intel從Haswell微架構開始引入的一種新特征,用途是禁止核心因為自身錯誤意外通路使用者空間的資料,以避免一些核心漏洞所導緻的安全隐患。

nosmep

禁用SMEP(Supervisor Mode Execution Prevention)支援。SMEP與SMAP類似,也是Intel從Haswell微架構開始引入的一種新特征,用途是禁止核心因為自身錯誤意外執行使用者空間的代碼。以避免一些核心漏洞所導緻的安全隐患。

nordrand

即使CPU支援(CONFIG_ARCH_RANDOM),也禁止核心使用RDRAND指令(不過使用者空間依然可以使用此指令)。由于很多人懷疑RDRAND指令所依賴的硬體随機數生成器所使用的加密标準(NIST SP800-90)被NSA植入了後門,是以提供了該選項以禁用它,不過大神Torvalds不以為然。

vsyscall={emulate|native|none}

控制vsyscall系統調用(調用固定的位址0xffffffffff600x00)的行為。大多數靜态連結的可執行程式和老舊的Glibc會使用這個系統調用。因為vsyscall始終位于固定的位址,是以很容易被攻擊者利用。

emulate(預設值) 捕捉vsyscalls系統調用,并對其進行安全的模拟。這是比較安全的選項,但效率并不最高。

native 将vsyscall系統調用直接轉變成本地syscall指令,這比模拟方式效率稍微高一些。但是很容易被攻擊。

none 完全禁用vsyscall系統調用。這是最安全的選項,但是有可能會導緻系統工作異常。

[EVM]

evm="fix"

不管目前的完整性狀态如何,都允許更新"security.evm"。

[SECURITY]

security={selinux|smack|tomoyo|apparmor|yama}

選擇啟用的安全子產品。僅在核心同時開啟了多個安全子產品的情況下才有意義。

[SELINUX]

selinux={0|1}

是否在啟動時就開啟SELinux功能(CONFIG_SECURITY_SELINUX_BOOTPARAM):"0"表示關閉,"1"表示開啟。

預設值由核心在編譯時确定(CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE)。

即使設為"1",随後也可以通過 /selinux/disable 在加載安全政策前禁止SELinux功能。

[SELINUX]

enforcing={0|1}

是否在啟動時強制啟用SELinux規則。

"0"(預設值)表示僅僅做記錄違規記錄檔而不真正拒絕違規操作;

"1"表示真正拒絕違規操作并做記錄違規記錄檔。

該選項還可以在運作時通過 /selinux/enforce 進行修改

[SELINUX]

checkreqprot={0|1}

設定"checkreqprot"标記的初始值。

"0"表示由核心強制執行檢查保護(包括其中隐含的所有執行保護)

"1"表示由應用程式自己主動請求執行檢查保護

預設值由核心在編譯時确定,也可以在運作時通過 /selinux/checkreqprot 修改

[APPARMOR]

apparmor={0|1}

是否在啟動時就開啟AppArmor功能(CONFIG_SECURITY_APPARMOR):"0"表示關閉,"1"表示開啟。

預設值由核心在編譯時确定(CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE)。

多CPU與CPU間排程

SMP(對稱多處理器)系統中,所有的CPU共享全部資源(總線,記憶體,I/O等),最大的特點就是所有資源共享,多個CPU之間沒有差別。NUMA(非一緻記憶體通路)的基本特征是具有多個CPU節點,每個CPU節點由多個CPU組成,并且具有獨立的本地記憶體與I/O槽口等。是以,雖然每個CPU都可以通路整個系統的記憶體,但是通路本地節點記憶體的速度遠遠高于通路其它節點的記憶體。詳見《SMP/NUMA/MPP體系結構對比》

[SMP]

nosmp

強制禁用SMP,這是個已被反對使用的舊選項

[SMP]

maxcpus=整數

最大允許使用的CPU核心數。"0"表示禁用SMP特性(等價于已被反對使用的舊"nosmp"選項),同時也禁用IO APIC;正整數"n"表示最大允許使用n個CPU核心。

[SMP]

nr_cpus=正整數

允許SMP核心支援的最大CPU核心數(等價于CONFIG_NR_CPUS)。配合CPU熱插拔(CONFIG_HOTPLUG_CPU),可在運作時增加CPU數目。

cpu0_hotplug

強制允許CPU0(boot CPU)熱插拔(CONFIG_BOOTPARAM_HOTPLUG_CPU0)。下列特性必須依賴于cpu0,所此選項應謹慎使用:

(1)從休眠狀态(S3,S4)喚醒以及從運作狀态進入休眠狀态

(2)PIC中斷,也就是某些情況下,關機和重新開機也會依賴于cpu0

[SMP]

additional_cpus=整數

最大允許熱插拔的CPU數量。預設值由BIOS決定。相見Documentation/x86/x86_64/cpu-hotplug-spec

[NUMA]

numa={off|noacpi}

off 關閉NUMA支援,也就是讓所有記憶體都隻屬于同一個節點。

noacpi 不為NUMA解析ACPI SRAT表

[KNL]

numa_balancing={enable|disable}

啟用/禁用NUMA均衡(CONFIG_NUMA_BALANCING),其預設值由CONFIG_NUMA_BALANCING_DEFAULT_ENABLED決定

[KNL,BOOT]

numa_zonelist_order={zone|node|default}

設定NUMA的zonelist順序。這裡設定的值還可以在運作中通過sysctl來修改。詳見Documentation/sysctl/vm.txt

[KNL,SMP]

isolcpus=CPU編号清單

将清單中的CPU從核心SMP平衡和排程算法中剔除。

[注意]提出後并不是絕對不能再使用該CPU的,作業系統仍然可以強制指定特定的程序使用哪個CPU(可以通過taskset來做到)。

該選項的目的主要是用于實作特定cpu隻運作特定程序的目的。

CPU編号從"0"開始計數,清單的表示方法有三種:

numA,numB,...,numN

numA-numN

以及上述兩種表示方法的組合:

numA,...,numM-numN

例如:0,3,4-7,9

[KNL,SMP]

relax_domain_level={-1|0|1|2|3|4|5}

設定CPUSET排程域(sched domain)的預設級别。大于此級别的排程域層次将禁用閑時均衡和喚醒均衡,而其餘級别的排程域都開啟。

-1(預設值) 使用系統的預設值(取決于不同的硬體架構)或者由其他的請求确定,也就是不人為指定預設級别。

0 禁用所有排程域的閑時均衡和喚醒均衡

1 超線程域(siblings),也就是同一個實體核心内的不同超線程

2 核域(cores),也就是同一個實體CPU中不同的核心

3 節點域(node),對于NUMA系統來說就是同一個NUMA節點内,對于non-NUMA系統來說這是整個系統範圍

4 節點組域(chunk of node),僅适用于NUMA系統,表示在一組特定的NUMA節點範圍内

5 全系統(system wide),全部系統範圍内

詳見Documentation/cgroups/cpusets.txt文檔

控制組(Control Group)

Cgroup(CONFIG_CGROUPS)是一種程序管理機制,也是核心的資源配置設定架構。

[KNL]

cgroup_disable="控制器名稱"

禁用cgroup中特定的控制器名稱。目前隻支援一個"memory"控制器。

noautogroup

禁止自動建立程序組(CONFIG_SCHED_AUTOGROUP),伺服器環境可以考慮使用此選項。

[KNL]

swapaccount={0|1}

是否統計換入(swap in)記憶體的資源。"0"表示不統計,"1"表示統計。詳見Documentation/cgroups/memory.txt文檔。

EFI/UEFI

noefi

禁用EFI支援(CONFIG_EFI)。

[EFI]

add_efi_memmap

将EFI記憶體映像包括在核心的可用實體記憶體映像之中

pstore.backend=efivars

将"efivars"(CONFIG_EFI_VARS_PSTORE)用作pstore記憶體檔案系統的後端。

雜項

[IP_VS_FTP]

ports=portA,portB,...

IPVS(IP Virtual Server) FTP幫助子產品所使用的端口,最多允許指定8個。預設值是"21"。

io_delay={0x80|0xed|udelay|none}

設定IO延遲方式

0x80(CONFIG_IO_DELAY_0X80) 傳統的Linux IO延遲方式,久經考驗,也最安全

0xed(CONFIG_IO_DELAY_0XED) 基于0xed端口的IO延遲方式,主要是為了避免和基于0x80端口的主機闆診斷卡沖突

udelay(CONFIG_IO_DELAY_UDELAY) 使用核心端udelay()函數作為延遲方法(簡單的延遲2微秒).可以不占用任何IO端口空間.

none(CONFIG_IO_DELAY_NONE) 不使用任何port-IO延遲機制.隻要你的機器不是老古董,這個應該是首選.

[KNL]

reboot=[mode][,type][,force]

指定系統重新開機的方式:

mode 用于指定重新開機模式,可以使用如下2種模式之一:warm(熱重新開機[跳過記憶體檢測]), cold(冷重新開機[檢測并重新初始化所有硬體])

type 用于指定重新開機類型,可以使用如下4種類型之一:bios(為熱重新開機使用CPU reboot vector), acpi(優先使用FADT中的ACPI RESET_REG,若失敗再轉kbd), kbd(使用鍵盤控制器冷重新開機,這是預設值), triple, efi(優先使用EFI提供的reset_system運作時服務,若失敗再轉kbd)

結尾的"force"表示在重新開機時不停用其它的CPU,在某些情況下可以讓reboot更可靠。

[KNL]

reset_devices

強制驅動程式在初始化底層裝置的過程中重置裝置

[KNL]

rcu_nocbs=

在"CONFIG_RCU_NOCB_CPU=y"的情況下,指定哪些CPU是No-CB CPU

[KNL]

nodelayacct

禁止在針對每個程序的統計資訊中包含程序等候系統資源(cpu,IO同步,記憶體交換等)所花費的時間,相當于禁用CONFIG_TASK_DELAY_ACCT子產品。

[KNL]

sysfs.deprecated={0|1}

為了相容舊版本的應用程式而保留過時的sysfs特性(CONFIG_SYSFS_DEPRECATED),其預設值由CONFIG_SYSFS_DEPRECATED_V2确定。

繼續閱讀