1. 程式人生 > >Linux 核心編譯選項詳解

Linux 核心編譯選項詳解

linux核心編譯選項詳解(一):General setup

[*]Prompt for development and/or incomplete code/drivers
顯示尚在開發中或尚未完成的程式碼與驅動.你應該選擇它,因為有許多裝置可能必需選擇這個選項才能進行配置,實際上它是安全的。這個選項同樣會讓一些老的驅動的可用。如果你選了Y,你將會得到更多的阿爾法版本的驅動和程式碼的配置選單。

()Local version – append to kernel release
在核心版本後面加上自定義的版本字串(小於64字元),可以用”uname -a”命令看到

[ ]Automatically append version information to the version string
自動生成版本資訊。這個選項會自動探測你的核心並且生成相應的版本,使之不會和原先的重複。這需要Perl的支援。由於在編譯的命令make-kpkg 中我們會加入- – append-to-version 選項來生成自定義版本,所以這裡選N。

Kernel compression mode (Gzip)
核心壓縮模式選baip2

  • gzip用於UNIX系統的檔案壓縮。 字尾為.gz的檔案。現今已經成為Internet 上使用非常普遍的一種資料壓縮格式,或者說一種檔案格式。HTTP協議上的GZIP編碼是一種用來改進WEB應用程式效能的技術。大流量的WEB站點常常 使用GZIP壓縮技術來讓使用者感受更快的速度。
  • bzip2是一個基於Burrows- Wheeler 變換的無失真壓縮軟體,壓縮效果比傳統的LZ77/LZ78壓縮演算法來得好。它是一款免費軟體。bzip2能夠進行高質量的資料壓縮。它利用先進的壓縮技 術,能夠把普通的資料檔案壓縮10%至15%,壓縮的速度和解壓的效率都非常高!支援現在大多數壓縮格式,包括tar、gzip 等等。
  • lzma是一個Deflate和LZ77演算法改良和優化後的壓縮演算法,開發者是Igor Pavlov,2001年被首次應用於7-Zip壓縮工具中,是 2001年以來得到發展的一個數據壓縮演算法。它使用類似於 LZ77 的字典編碼機制,在一般的情況

[*] Support for paging of anonymous memory (swap)
將使你的核心支援虛擬記憶體。這個虛擬記憶體在LINUX中就是SWAP分割槽。除非你不想要SWAP分割槽,否則這裡必選Y。

[*] System V IPC
System V程序間通訊(IPC)支援,於處理器在程式之間同步和交換資訊,如果不選這項,很多程式執行不起來,特別地,你想在LINUX下執行 DOS模擬程式,你必須要選Y。

[*] POSIX Message Queues
POSIX訊息佇列,這是POSIX IPC中的一部分。建議你最好將它選上POSIX 表示可移植作業系統介面

[*] BSD Process Accounting
這是允許使用者程序訪問核心,將賬戶資訊寫入檔案中。這通常被認為是個好主意,建議你最好將它選上。將程序的統計資訊寫入檔案的使用者級系統呼叫,主要包括程序的建立時間/建立者/記憶體佔用等資訊。

  • [ ]BSD Process Accounting version 3 file format
    選Y,統計資訊將會以新的格式(V3)寫入,這格式包含程序ID和父程序。注意這個格式和以前的 v0/v1/v2 格式不相容,所以你需要 升級相關工具來使用它。

[*] Export task/process statistics through netlink (EXPERIMENTAL)
處於實驗階段的功能。通過通用的網路輸出工作/程序的相應資料,和BSD不同的是,這些資料在程序執行的時候就可以通過相關命令訪問。和BSD類似,資料將在程序結束時送入使用者空間。如果不清楚,選N。

  • [*]   Enable per-task delay accounting (EXPERIMENTAL)
    在統計資訊中包含程序等候系統資源(cpu,IO同步,記憶體交換等)所花費的時間
  • [*]   Enable extended accounting over taskstats (EXPERIMENTAL)
    在統計資訊中包含擴充套件程序所花費的時間
    • [*]    Enable per-task storage I/O accounting (EXPERIMENTAL)
      在統計資訊中包含I/O儲存程序所花費的時間

[*] Auditing support
審計支援,用於和核心的某些子模組同時工作,(例如SELinux)需要它,只有同時選擇其子項才能對系統呼叫進行審計。
允許審計的下層能夠被其他核心子系統使用,比如SE-Linux,它需要這個來進行登入時的聲音和視訊輸出。沒有CONFIG_AUDITSYSCALL 時(即下一個選項)無法進行系統呼叫。

  • [*]   Enable system-call auditing support
    支援對系統呼叫的審計。允許系統獨立地或者通過其他核心的子系統,呼叫審計支援,比如SE-Linux。要使用這種審計的檔案系統來檢視特性,請確保 INOTIFY 已經被設定。

RCU Subsystem —> 一個高效能的鎖機制RCU 子系統
RCU(Read-Copy Update),顧名思義為讀取-複製更新。對於被RCU保護的共享資料結構,讀者不需要獲得任何鎖就可以訪問它,但寫者在訪問它時首先拷貝一個副本,然 後對副本進行修改,最後使用一個回撥(callback)機制在適當的時機把指向原來資料的指標重新指向新的被修改的資料。這個時機就是所有引用該資料的 CPU都退出對共享資料的操作。

  • RCU Implementation (Tree-based hierarchical RCU) —>
    RCU 實現機制
    • (X) Tree-based hierarchical RCU
      基本數按等級劃分
  • [ ] Enable tracing for RCU
    啟用跟蹤
  • (32) Tree-based hierarchical RCU fanout value
    基本數按等級劃分分列值
  • [ ] Disable tree-based hierarchical RCU auto-balancing

< > Kernel .config support
這個選項允許.config檔案(即編譯LINUX時的配置檔案)儲存在核心當中。它提供正在執行中的或者還在硬碟中的核心的相關配置選項。可以通過核心 映象檔案 kernel image file 用命令 script scripts/extract-ikconfig 來提取出來,作為當前核心重編譯或者另一個核心編譯的參考。如果你的核心在執行中,可以通過/proc/config.gz檔案來讀取。下一個選項提供這 項支援。
看起來好像是一個不錯的功能,可以把編譯時的 .config檔案儲存在核心中,以供今後參考呼叫。用來重編譯和編譯其他的核心的時候可以用上。你是一個編譯核心的狂人的話,這項要選上

  • [ ]   Enable access to .config through /proc/config.gz (NEW)
    上一項的子項,可 以通過/proc/config.gz 訪問當前核心的.config 。新功能,上一項選的話這個就選上吧。

(18) Kernel log buffer size (16 => 64KB, 17 => 128KB)
核心日誌快取的大小,12 => 4 KB,13 => 8 KB,14 => 16 KB單處理器,15 => 32 KB多處理器,16 => 64 KB for x86 NUMAQ or IA-64,17 => 128 KB for S/390

[*] Control Group support —>
cgroup支援,如cpusets那樣來使用cgroup子 系統程序(不確定可以不選)

  • [ ]   Example debug cgroup subsystemcgroup
    子系統除錯例子
  • [*]   Namespace cgroup subsystem cgroup
    子系統名稱空間
  • [*]   Freezer cgroup subsystem
  • [*]   Cpuset support
    只有含有大量CPU(大於16個)的SMP系統或NUMA(非一致記憶體訪問)系統才需要它
    • [*]     Include legacy /proc//cpuset file
  • [*]   Simple CPU accounting cgroup subsystem
    簡單cgroup子系統cpu所花費的時間
    • [ ]     Memory Resource Controller for Control Groups
      cgroup記憶體資源控制器

[ ] enable deprecated sysfs features which may confuse old userspce tools
在某些檔案系統上(比如debugfs)提供從核心空間向用戶空間傳遞大量資料的介面

-*- Kernel->user space relay support (formerly relayfs)
核心系統區和使用者區進行傳遞通訊的支援。這個選項在特定的文 件系統中提供資料傳遞介面支援,它可以提供從核心空間到使用者空間的大批量的資料傳遞工具和設施。如果不清楚,選N。

-*- Namespaces support
名稱空間支援,允許伺服器為不同的使用者資訊提供不 同的使用者名稱空間服務

[*]   UTS namespace
通用終端系統的名稱空間。它允許容器,比如Vservers利用UTS名稱空間來為不同的伺服器提供不同 的UTS。如果不清楚,選N。

[*]   IPC namespace
IPC名稱空間,不確定可以不選

[*] Initial RAM filesystem and RAM disk (initramfs/initrd) suppor
初始RAM的檔案和RAM磁碟( initramfs /initrd)支援(如果要採用initrd啟動則要選擇,否則可以不選)

  • ()    Initramfs source file(s)
    initrd已經被initramfs取代,如果你不明白這是什麼 意思,請保持空白

[*] Optimize for size
這個選項將在GCC命令後用 “-Os” 代替 “-O2″引數,這樣可以得到更小的核心。沒必要選。一個編譯好的核心才7-10多M,大家不會少這麼點空間吧。選上了可能會出一些問題。最好不選。有時會產生錯誤的二進位制程式碼。

[ ] Configure standard kernel features (for small systems) —>
配置標準的核心特性(為小型系統)。這個選項可以讓核心的基本選項和設定無效或者扭曲。這是用於特定環境中的,它允許“非標準”核心。你要是選它,你一定要明白自己在幹什麼。這是為了編譯某些特殊用途的核心使用的,例如引導盤系統。

  • -*-   Load all symbols for debugging/ksymoops
    裝載所有的除錯符號表資訊,僅供除錯時選擇
    • [*]     Include all symbols in kallsyms
      在kallsyms中包含核心知道的所有符號,核心將會 增大300K
    • [*]     Do an extra kallsyms pass
      除非你在kallsyms中發現了bug並需要 報告這個bug才打開該選項

Kernel Performance Events And Counters —>

  • -*- Kernel performance events and counters
  • [*] Tracepoint profiling sources
  • [ ] Kernel performance counters (old config option)

[ ] Disable heap randomization
禁用隨機heap(heap堆是一個應用層的概念,即堆對CPU是不可見的,它的實現方式有多種,可以由OS 實現,也可以由執行庫實現,如果你願意,你也可以在一個棧中來實現一個堆)

Choose SLAB allocator (SLUB (Unqueued Allocator)) —>
選擇記憶體分配管 理器(強烈推薦使用SLUB)

  • ( ) SLAB
    各種環境通用的記憶體分配管理器
  • (X) SLUB (Unqueued Allocator)
    更加優秀的記憶體分配管理器

[*] Profiling support (EXPERIMENTAL)
剖面支援,用一個工具來掃描和提供計算機的剖面圖。支援系統評測(對於大多數使用者來說並不是必須的)

  • < > OProfile system profiling (EXPERIMENTAL)
    OProfile評測和效能監控工具

[*] Kprobes
除錯核心除非開發人員,否則不選

GCOV-based kernel profiling —>

  • [ ] Enable gcov-based kernel profiling

[ ] Slow work debugging through debugfs

linux核心編譯選項詳解(二):Loadable Module and Block Layer Support

[*] Enable loadable module support —>
開啟可載入模組支援,如果開啟它則必須通過”make modules_install”把核心模組安裝在/lib/modules/中這個選項可以讓你的核心支援模組,模組是什麼呢?模組是一小段程式碼,編譯 後可在系統核心執行時動態的加入核心,從而為核心增加一些特性或是對某種硬體進行支援。一般一些不常用到的驅動或特性可以編譯為模組以減少核心的體積。在 執行時可以使用modprobe命令來載入它到核心中去(在不需要時還可以移除它)。一些特性是否編譯為模組的原則是,不常使用的,特別是在系統啟動時不 需要的驅動可以將其編譯為模組,如果是一些在系統啟動時就要用到的驅動比如說檔案系統,系統匯流排的支援就不要編為模組,否則無法啟動系統。在啟動時不用到 的功能,編成模組是最有效的方式。你可以檢視MAN手冊來了解:modprobe, lsmod, modinfo, insmod 和 rmmod.
如果不清楚,選Y。

  • [ ]   Forced module loading
    允許強制載入模組
  • [*]   Module unloading
    允許解除安裝已經載入的模組
  • [*]   Forced module unloading
    允許強制解除安裝正在使用中的模組(比較危險)這個選項允許你強行卸除模組,即使核心認為這不安全。核心將會立即移除模組,而不管是否有人在使用它(用 rmmod -f 命令)。這主要是針對開發者和衝動的使用者提供的功能。如果不清楚,選N。
  • [ ]   Module versioning support
    有時候,你需要編譯模組。選這項會新增一些版本資訊,來給編譯的模組提供獨立的特性,以使不同的核心在使用同一模組時區別於它原有的模組。這有時可能會有點用。如果不清楚,選N。允許使用其他核心版本的模組(可能會出問題)
  • [ ]   Source checksum for all modules
    為所有的模組校驗原始碼,如果你不是自己編寫核心模組就不需要它這個功能是為了防止你在編譯模組時不小心更改了核心模組的原始碼但忘記更改版本號而造成版本衝突。如果不清楚,選N。

-*- Enable the block layer —>
塊裝置支援,使用硬碟/USB/SCSI裝置者必選這選項使得塊裝置可以從核心移除。如果不選,那麼 blockdev 檔案將不可用,一些檔案系統比如 ext3 將不可用。這個選項會禁止 SCSI 字元裝置和 USB 儲存裝置,如果它們使用不同的塊裝置。選Y,除非你知道你不需要掛載硬碟和其他類似的裝置。不過此項無可選項

  • [*]   Support for large (2TB+) block devices and files
    僅在使用大於2TB的塊裝置時需要
  • [*]   Block layer SG support v4
    通用scsi塊裝置第4版支援
  • [ ]   Block layer data integrity support
    塊裝置資料完整性支援
  • IO Schedulers —>
    IO排程器I/O是輸入輸出頻寬控制,主要針對硬碟,是核心的必須的東西。這裡提供了三個IO排程器。
    • <*> Anticipatory I/O scheduler
      使用於大多數環境假設一個塊裝置只有一個物理查詢磁頭(例如一個單獨的SATA硬碟),將多個隨機的小寫入流合併成一個大寫入流,用寫入延時換取最大的寫 入吞吐量.適用於大多數環境,特別是寫入較多的環境(比如檔案伺服器)搶先式 I/O 排程方式是預設的磁碟排程方式。它對於大多數環境通常是比較好的選擇。但是它和Deadline I/O 排程器相比有點大和複雜,它有時在資料調入時會比較慢。
    • <*> Deadline I/O scheduler
      使用輪詢的排程器,簡潔小巧,提供了最小的讀取延遲和尚佳的吞吐量,特別適合於讀取較多的環境(比如資料庫)Deadline I/O排程器簡單而又緊密,在效能上和搶先式排程器不相上下,在一些資料調入時工作得更好。至於在單程序I/O磁碟排程上,它的工作方式幾乎和搶先式排程 器相同,因此也是一個好的選擇。
    • <*> CFQ I/O scheduler
      使用QoS策略為所有任務分配等量的頻寬,避免程序被餓死並實現了較低的延遲,可以認為是上述兩種排程器的折中.適用於有大量程序的多使用者系統CFQ排程器嘗試為所有程序提供相同的頻寬。它將提供平等的工作環境,對於桌面系統很合適。
    • Default I/O scheduler (CFQ) —>
      預設IO排程器我這樣理解上面三個IO排程器:搶先式是傳統的,它的原理是一有響應,就優先考慮排程。如果你的硬碟此時在執行一項工作,它也會暫停下來先 響應使用者。期限式則是:所有的工作都有最終期限,在這之前必須完成。當用戶有響應時,它會根據自己的工作能否完成,來決定是否響應使用者。CFQ則是平均分 配資源,不管你的響應多急,也不管它的工作量是多少,它都是平均分配,一視同仁的。
      • ( ) Anticipatory
      • ( ) Deadline
      • (X) CFQ
      • ( ) No-op

linux核心編譯選項詳解(三):Processor type and features

[*] Tickless System (Dynamic Ticks) —>
非固定頻率系統,這項技術能讓新核心執行的更有效率,並且更省電。

[*] High Resolution Timer Support不選
支援高頻率時間發生器,如果硬體不相容,則這個選項只會增大核心(大多數個人PC並沒有這個)

[*] Symmetric multi-processing support不選
對稱多處理器支援,如果你有多個CPU或者使用的是多核CPU就選上,此時”Enhanced RealTime Clock Support”選項必須開啟,”Advanced Power Management”選項必須關閉。如果你選N,核心將會在單個或者多個CPU的機器上執行,但是隻會使用一個CPU。如果你選Y,核心可以在很多(但 不是所有)單CPU的機器上執行,在這樣的機器,你選N會使核心執行得更快。注意如果你選Y,然後在Processor family選項中選擇“586″ or “Pentium” ,核心將不能執行在486構架的機器上。同樣的,多CPU的運行於PPro構架上的核心也無法在 Pentium 系列的板上執行。

[*] Support sparse irq numbering不選
支援稀有的中斷編號

[*] Enable MPS table不選
mps多處理器規範

[ ] Support for big SMP systems with more than 8 CPUs

[*] Support for extended (non-PC) x86 platforms 不選
支援非pc

[*] Single-depth WCHAN output 編譯選項

[ ] Paravirtualized guest support —>
虛擬化客戶端支援

  • [ ]   VMI Guest support (DEPRECATED) (NEW)
    VMware ESX server客戶端
  • [ ]   KVM paravirtualized clock (NEW)
    KVM時允許虛擬一個時鐘
  • [ ]   KVM Guest support (NEW)
    KVM客戶端
  • [ ]   Lguest guest support (NEW)
    Lguest(linux核心虛擬化的x86程式)客戶端
  • [ ]   Enable paravirtualization code (NEW)
    增加虛擬機器的執行效率

[ ] Disable Bootmem code

[ ] Memtest
記憶體測試

Processor family (Pentium-Pro) —>
處理器系列,請按照你實際使用的CPU選擇這裡是處理器的型別。這裡的資訊主要目的是用來優化。為了讓核心能夠在所有X86構架的CPU上執行(雖然不是 最佳速度),在這你可以選386。核心不會執行在比你選的構架還要老的機器上。比如,你選了Pentium構架來優化核心,它將不能在486構架上執行。 如果你不清楚,選386。

  • ( ) 386
  • ( ) 486
  • ( ) 586/K5/5×86/6×86/6x86MX
  • ( ) Pentium-Classic
  • ( ) Pentium-MMX
  • (X) Pentium-Pro
  • ( ) Pentium-II/Celeron(pre-Coppermine)
  • ( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
  • ( ) Pentium M
  • ( ) Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon
  • ( ) K6/K6-II/K6-III
  • ( ) Athlon/Duron/K7
  • ( ) Opteron/Athlon64/Hammer/K8
  • ( ) Crusoe
  • ( ) Efficeon
  • ( ) Winchip-C6
  • ( ) Winchip-2/Winchip-2A/Winchip-3
  • ( ) GeodeGX1
  • ( ) Geode GX/LX
  • ( ) CyrixIII/VIA-C3
  • ( ) VIA C3-2 (Nehemiah)
  • ( ) VIA C7
  • ( ) Core 2/newer Xeon
  • ( ) Intel Atom

[*] Generic x86 support不選
這一選項針對x86系列的CPU使用更多的常規優化。如果你在上面一項選的是i386、i586之類的才選這個通用x86支援,如果你的CPU能夠在上 述”Processor family”中找到就別選。除了對上面你選擇的X86 CPU進行優化,它還對更多型別X86 CPU的進行優化。這將會使核心在其他的X86 CPU上執行得更好。這個選項提供了對X86系列CPU最大的相容性,用來支援一些少見的x86構架的CPU。如果你的CPU能夠在上面的列表中找到,就 裡就不用選了。

[ ] PentiumPro memory ordering errata workaround

[*] HPET Timer Support
HPET時鐘支援。允許核心使用 HPET 。HPET是替代8254晶片的新一代定時器,i686及以上級別的主機板都支援,可以安全的選上。但是,HEPT只會在支援它的平臺和BIOS上執行。如 果不支援,8254將會啟用。選N,將繼續使用8254時鐘。

(8) Maximum number of CPUs
支援的最大CPU數,每增加一個核心將增加8K體積

[*] SMT (Hyperthreading) scheduler support
支援Intel的超執行緒(HT)技術超執行緒排程器在某些情況下將會對 Intel Pentium 4 HT系列有較好的支援。如果你不清楚,選N

[*] Multi-core scheduler support
針對多核CPU進行排程策略優化多核排程機制支援,雙核的CPU要選。多核心排程在某些情況下將會對多核的CPU系列有較好的支援。如果你不清楚,選N

Preemption Model (Voluntary Kernel Preemption (Desktop)) —│>
核心搶佔模式一些優先順序很高的程式可以先讓一些低優先順序的程式執行,即使這些程式是在核心態下執行。從而減少核心潛伏期,提高系統的響應。當然在一些特殊 的點的核心是不可搶先的,比如核心中的排程程式自身在執行時就是不可被搶先的。這個特性可以提高桌面系統、實時系統的效能。

  • ( ) No Forced Preemption (Server)
    適合伺服器環境的禁止核心搶佔這是傳統的LINUX搶先式模型,針對於高吞吐量設計。它同樣在很多時候會提供很好的響應,但是也可能會有較長的延遲。如果你是建立伺服器或者用於科學運算,選這項,或者你想要最大化核心的原始運算能力,而不理會排程上的延遲。
  • (X) Voluntary Kernel Preemption (Desktop)
    適合普通桌面環境的自願核心搶佔這個選項通過向核心新增更多的“清晰搶先點”來減少核心延遲。這些新的搶先點以降低吞吐量的代價,來降低核心的最大延遲, 提供更快的應用程式響應。這通過允許低優先順序的程序自動搶先來響應事件,即使程序在核心中進行系統呼叫。這使得應用程式執行得更“流暢”,即使系統已經是 高負荷運轉。如果你是為桌面系統編譯核心,選這項。
  • ( ) Preemptible Kernel (Low-Latency Desktop)
    適合執行實時程式的主動核心搶佔這個選項通過使所有核心程式碼(非致命部分)編譯為“可搶先”來降低核心延遲。這通過允許低優先順序程序進行強制搶先來響應事 件,即使這些程序正在進行系統呼叫或者未達到正常的“搶先點”。這使得應用程式執行得更加“流暢”即使系統已 經是高負荷運轉。代價是吞吐量降低,核心執行開銷增大。選這項如果你是為桌面或者嵌入式系統編譯核心,需要非常低的延遲。如果你要最快的響應,選第三項。 我認為萬物是平衡的,低延遲意味著系統執行不穩定,因為過多來響應使用者的要求,所以我選第二個。

[*] Reroute for broken boot IRQs

[*] Machine Check / overheating reporting
讓CPU檢測到系統故障時通知核心,以便核心採取相應的措施(如過熱關機等)

  • [*]   Intel MCE features
  • [*]   AMD MCE features
  • [ ]   Support for old Pentium 5 / WinChip machine checks

< > Machine check injector support
讓CPU檢測到系統故障時通知核心,以便核心採取相應的措施(如過熱關機等)

< > Toshiba Laptop support
東芝筆記本模組支援

< > Dell laptop support
Dell筆記本模組支援

[*] Enable X86 board specific fixups for reboot不選
修正某些舊x86主機板的重起bug,這種主機板基本絕種了

<*> /dev/cpu/microcode – microcode support
是否支援Intel IA32架構的CPU。這個選項將讓你可以更新Intel IA32系列處理器的微程式碼,顯然你需要到網上去下載最新的程式碼,LINUX不提供這些程式碼。當然你還必須在檔案系統選項中選擇/dev file system support才能正常的使用它。如果你把它譯為模組 ,它將是 microcode。IA32主要用於高於4GB的記憶體。詳見下面的“高記憶體選項”。使用不隨Linux核心發行的IA32微程式碼,你必需有IA32微代 碼二進位制檔案,僅對Intel的CPU有效

  • [*]   Intel microcode patch loading support
  • [*]   AMD microcode patch loading support

<*> /dev/cpu/*/msr – Model-specific register support
是否開啟CPU特殊功能暫存器的功能。這個選項桌面使用者一般用不到,它主要用在Intel的嵌入式CPU中的,這個暫存器的作用也依賴與不同的CPU型別 而有所不同,一般可以用來改變一些CPU原有物理結構的用途,但不同的CPU用途差別也很大。在多cpu系統中讓特權CPU訪問x86的MSR暫存器

<*> /dev/cpu/*/cpuid – CPU information support
是否開啟記錄CPU相關資訊功能。這會在/dev/cpu中建立一系列的裝置檔案,用以讓過程去訪問指定的CPU。能從/dev/cpu/x/cpuid 獲得CPU的唯一識別符號(CPUID)< > /sys/kernel/debug/x86/cpu/* – CPU Debug support

High Memory Support (4GB) —>
LINUX能夠在X86系統中使用64GB的實體記憶體。但是,32位地址的X86處理器只能支援到4GB大小的記憶體。這意味著,如果你有大於4GB的物理 記憶體,並非都能被核心“永久對映”。這些非永久對映記憶體就稱為“高階記憶體”。如果你編譯的核心永遠都不會執行在高於1G記憶體的機器上,選OFF(預設選 項,適合大多數人)。這將會產生一個“3GB/1GB”的記憶體空間劃分,3GB 虛擬記憶體被核心對映以便每個處理器能夠“看到”3GB的虛擬記憶體空間,這樣仍然能夠保持4GB的虛擬記憶體空間被核心使用,更多的實體記憶體能夠被永久對映。
如果你有1GB-4GB之間的實體記憶體,選4GB選項。如果超過4GB,那麼選擇64GB。這將開啟 Intel 的實體地址延伸模式(PAE)。PAE將在IA32處理器上執行3個層次的記憶體頁面。PAE是被LINUX完全支援的,現在的Intel處理器 (Pentium Pro 和更高階的)都能執行PAE模式。注意:如果你選64GB,那麼在不支援PAE的CPU上核心將無法啟動。你機器上的記憶體能夠被自動探測到,或者你可以用 類似於“mem=256M”的引數強制給核心指定記憶體大小。4GB 選這項如果你用的是32位的處理器,記憶體在1-4GB之間。64GB 選這項如果你用的是32位的處理器,記憶體大於4GB。

  • ( ) off
  • (X) 4GB
  • ( ) 64GB

[ ] PAE (Physical Address Extension) Support (NEW)
實體地址擴充套件 (PAE) 允許將最多 64 GB 的實體記憶體用作常規的 4 KB 頁面,並擴充套件核心能使用的位數以將實體記憶體地址從 32 擴充套件到 36。

[ ] Enable KSM for page merging

(4096) Low address space to protect from user allocation

[ ] Enable recovery from hardware memory errors

[*] Check for low memory corruption

  • [*]   Set the default setting of memory_corruption_check

[*] Reserve low 64K of RAM on AMI/Phoenix BIOSen

[ ] Math emulation 不選
數學協處理器模擬,486DX以上的cpu就不要選它了

[*] MTRR (Memory Type Range Register) support
記憶體型別區域暫存器。在 Intel P6 系列處理器(Pentium Pro, Pentium II 和更新的)上,MTRR將會用來規定和控制處理器訪問某段記憶體區域的策略。如果你在PCI或者AGP總線上有VGA卡,這將非常有用。可以提升影象的傳送 速度2.5倍以上。選Y,會生成檔案/proc/mtrr,它可以用來操縱 你的處理器的MTRR。典型地,X server 會用到。這段程式碼有著通用的介面,其他CPU的暫存器同樣能夠使用該功能。Cyrix 6×86, 6×86MX和 M II處理器有ARR ,它和 MTRR有著類似的功能。AMD K6-2/ K6-3有兩個MTRR, Centaur C6有8個MCR允許複合寫入。所有這些處理器都支援這段程式碼,你可以選Y如果你有以上處理器。選Y同樣可以修正SMP BIOS的問題,它僅為第一個CPU提供MTRR,而不為其他的提供。這會導致各種各樣的問題,所以選Y是明智的。你可以安全地選Y,即使你的機器沒有 MTRR。這會給核心增加9KB。開啟它可以提升PCI/AGP總線上的顯示卡2倍以上的速度,並且可以修正某些BIOS錯誤

  • [ ]   MTRR cleanup support
    MTRR清理(2.6.27核心新增功能,不確定可以不選)

[*] EFI runtime service support不選
EFI啟動支援這裡允許核心在EFI平臺上使用儲存於EFI韌體中的系統設定啟動。這也允許核心在執行時使用EFI的相關服務。這個選項只在有EFI韌體 的系統上有用,它會使核心增加8KB。另外,你必須使用最新的ELILO 登入器才能使核心採用EFI的韌體設定來啟動(GRUB和LILO完全不知道EFI是什麼東西)。即使你沒有EFI,卻選了這個選項,核心同樣可以啟動。 大家應該用的是GRUB,所以選上這個也沒什麼用。除非你的系統支援EFI(一種可代替傳統BIOS的技術)否則不選

[*] Enable seccomp to safely compute untrusted bytecode 選
只有嵌入式系統可以不選

[ ] Enable -fstack-protector buffer overflow detection (EXPERIMEN│

Timer frequency (1000 HZ) —>核心時鐘頻率 桌面1000 伺服器100或250
允許設定時鐘頻率。這是使用者定義的時鐘中斷頻率 100HZ-1000 HZ ,不過 100 HZ 對伺服器和NUMA系統更合適,它們不需要很快速的響應使用者的要求,因為時鐘中斷會導致匯流排爭用和緩衝打回。注意在SMP環境中,時鐘中斷由變數 NR_CPUS * Hz定義在每個CPU產生。其實和前面的搶先式程序差不多,就是多少頻率來響應使用者要求。我選了250HZ的。要快點的可以選1000HZ的。但是還是那 句話,一切是平衡的。機器過 快響應你,它自己的活就不知道做得好不好了。

  • ( ) 100 HZ
    100 HZ是傳統的對伺服器、SMP 和 NUMA的系統選項。這些系統有比較多的處理器,可以在中斷較集中的時候分擔中斷
  • ( ) 250 HZ
    250 HZ對伺服器是一個好的折衷的選項,它同樣在SMP 和 NUMA 系統上體現出良好的反應速度。
  • ( ) 300 HZ
  • (X) 1000 HZ
    1000 HZ對於桌面和其他需要快速事件反應的系統是非常棒的。

[*] kexec system call不選
kexec 系統呼叫。kexec是一個用來關閉你當前核心,然後開啟另一個核心的系統呼叫。它和重啟很像,但是它不訪問系統韌體。由於和重啟很像,你可以啟動任何內 核,不僅僅 是LINUX。kexec這個名字是從 exec 系統呼叫來的。它只是一個程序,可以確定硬體是否正確關閉,Linus本人都沒話說,估計是受害不淺。我們當然不能上當,選N!提供kexec系統呼叫, 可以不必重啟而切換到另一個核心,如果需要就選擇,對大多數使用者來說並不需要

[ ] kexec jump (EXPERIMENTAL)不選
kexec跳轉,如果你需要用kexec來啟動核心就選擇吧

[*] Build a relocatable kernel不選
建立一個移動的核心,除非特殊要求否則只是增大核心大小而已

(0×1000000) Alignment value to which kernel should be aligned
核心編譯、執行時的實體地址匹配,不要更改該值除非你知道你在幹嘛

-*- Support for hot-pluggable CPUs
對SMP休眠和熱插拔CPU提供支援

[ ] Compat VDSO support不選
如果Glibc版本大於等於2.3.3就不選,否則就選上,目前的版本基本上都大於2.3.3
如果你執行的是最新的glibc(GNU C函式庫)版本( 2.3.3 或更新),選N,這樣可以移除高階的VDSO 對映,使用隨機的 VDSO。

[ ] Built-in kernel command line

相關推薦

Linux 核心編譯選項

linux核心編譯選項詳解(一):General setup [*]Prompt for development and/or incomplete code/drivers 顯示尚在開發中或尚未完成的程式碼與驅動.你應該選擇它,因為有許多裝置可能必需選擇這個選項才能進行配

作業系統之--linux核心編譯步驟

ORIGIN 作為自由軟體,linux 核心版本不斷更新,新核心會修訂舊核心的 bug,並增加若干新特性,如支援更多的硬體、具備更好的系統管理能力、執行速度更快、更穩定等。使用者若想要使用這些新特性,或希望根據自身系統需求定製一個更高效、更穩定的核心,就需要重

linux 核心 - ioctl 函式

1. 概念 ioctl 是裝置驅動程式中裝置控制介面函式,一個字元裝置驅動通常會實現裝置開啟、關閉、讀、寫等功能,在一些需要細分的情境下,如果需要擴充套件新的功能,通常以增設 ioctl() 命令的方式實現。 在檔案 I/O 中,ioctl 扮演著重要角色,本文將以驅動開發為側重

Linux原始碼編譯安裝

1. 編譯原始碼步驟 configure、Makefile.in一般是專案管理器自動生成的,這依賴於兩個開發工具: autoconf:生成configure指令碼檔案; autoconf需要結合一個配置檔案來和其它命令生成configure指令碼;這個配置檔案告訴autoco

linux gcc連結選項

-I(大寫i) -L(大寫L) -l(小寫l) (1)-l -I(大寫i) 顯示指定標頭檔案的搜尋路徑。

[轉載]linux 核心定時器

Linux核心2.4版中去掉了老版本核心中的靜態定時器機制,而只留下動態定時器。相應地在timer_bh()函式中也不再通過run_old_timers()函式來執行老式的靜態定時器。動態定時器與靜態定時器這二個概念是相對於Linux核心定時器機制的可擴充套件功能而言的,動態定時器是指核心的定時器佇列

嵌入式Linux核心I2C子系統

1.1 I2C匯流排知識 1.1.1  I2C匯流排物理拓撲結構      I2C匯流排在物理連線上非常簡單,分別由SDA(序列資料線)和SCL(序列時鐘線)及上拉電阻組成。 通訊原理是通過對SCL和SDA線高低電平時序的控制,來產生I2C匯流排協議所需

linux核心 RCU機制

 簡介         RCU(Read-Copy Update)是資料同步的一種方式,在當前的Linux核心中發揮著重要的作用。RCU主要針對的資料物件是連結串列,目的是提高遍歷讀取資料的效率,為了達到目的使用RCU機制讀取資料的時候不對連結串列進行耗時的加鎖操作。這樣在

arm linux核心啟動過程

         可以結合《hi3536uboot引導核心全過程》一文一起看 1、uImage生成過程 (1)vmlinux 根目錄下vmlinux為kernel未經過任何處理的原始可執行檔案。根據arch/arm/kernel/vmlinux.lds連線檔案生成:    

Linux核心等待佇列

等待佇列用於管理應等待某個條件成立或者事件發生而防人之心不可無的程序。程序發出的請求暫時無法滿足的時候,需要將程序阻塞直到條件成立。核心將因相同原因而阻塞的程序集中在一個佇列上,該佇列就是等待佇列,對於每個需要等待的事件都有一個相應的等待佇列。等待佇列採用連結串

gcc常用編譯選項

gcc常用編譯選項 -g : 加入除錯資訊 -m64 : 64位 -c : 只做預處理、編譯和彙編,不連結,產生的是目標檔案(.o檔案) -S :

gcc 和g++編譯選項

gcc 提供了大量的警告選項,對程式碼中可能存在的問題提出警 告,通常可以使用-Wall來開啟以下警告:            -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat            -Wchar-subscripts -Wi

Linux kernel核心編譯配置選項

Code maturity level options 程式碼成熟度選項 Prompt for development and/or incomplete code/drivers  顯示尚在開發中或尚未完成的程式碼與驅動.除非你是測試人員或者開發者,否則請勿選擇 G

Linux核心配置和編譯過程

一、引言:  本文件的內容大部份內容都是從網上收集而來,然後配合一些新的截 圖(核心版本:V2.4.19)。在每一配置項後會有一個選擇指南的部份,用來指導大家怎麼樣 根據自己的情況來做相應的選擇;還有在每一個大項和文件的最後會有一個經驗談,它是一些高手們在應對問題和處理特有

Linux核心編譯

學習了網上的一些資料,自己試著摸索了一下,整理出此文。 由於在下水平相當有限,不當之處,還望大家批評指正^_^ 重要的參考資料有: 好了,下面進入正題。 一、準備工作 準備工作如何做,這裡就不詳說了。 a) 首先,你要有一臺PC(這不廢話麼^_^),裝好了Lin

Linux 核心編譯步驟及配置

前言    Linux核心是作業系統的核心,也是作業系統最基本的部分。    Linux核心的體積結構是單核心的、但是他充分採用了微核心的設計思想、使得雖然是單核心、但工作在模組化的方式下、並且這個模組可以動態裝載或卸 載;Linux負責管理系統的程序、記憶體、裝置驅動程式、檔案和網路系統,決定著系統的效

VC編譯連接選項

處理器 指向 with 搜索 alignment macro 調用程序 types 同步 VC編譯連接選項詳解 大家可能一直在用VC開發軟件,但是對於這個編譯器卻未必很了解。原因是多方面的。大多數情況下,我們只停留在“使用”它,而不會想去“了解”它。因為它只是一個工具,

linux系統管理(1)之 核心編譯選項檢視

三個方法 proc檔案系統 ubunut debain 紅帽等 proc檔案系統 /proc/config.gz This file shows you the compile-time configuration settings for the kernel (gzip compr

Linux驅動靜態編譯和動態編譯方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux裝置驅動開發 第3版 (即 Linux裝置驅動開發 基於最新的Linux 4 0核心 )進展同步更

                本博實時更新《Linux裝置驅動開發詳解(第3版)》的最新進展。 目前已經完成稿件。 2015