談笑有鴻儒,往來無白丁

          在恰當?shù)臅r間、地點以恰當?shù)姆绞奖磉_給恰當?shù)娜?..  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強!向dudu站長致敬>> > 我的微博敬請收聽

          redhat9
          2.6.9內(nèi)核

          1、越來越多的Linuxer開始對尚處在測試中的2.6內(nèi)核產(chǎn)生了興趣,確實它非常具有吸引力,眾多的特性讓人眼花潦亂。我也從2.4全面轉(zhuǎn)到了2.6內(nèi)核之下,享受著新特性帶來的新鮮體驗。不過不少兄弟在編譯新內(nèi)核時或多或少的遇到了一些問題,看來新娘的蓋 頭也不是那么容易揭開的:)
          因此我打算寫一些文章來介紹編譯新內(nèi)核時的一些應(yīng)該注意的地方,以減少兄弟們在編譯新內(nèi)核時的麻煩。
          由于我的水平十分有限,寫這樣的文章實在是勉為其難。文中肯定有錯誤疏失之處,還請兄弟們多多包涵:)
          第一部分,準備: 要 使用新的內(nèi)核首先當然要取得新內(nèi)核的源碼,內(nèi)核的官方網(wǎng)站是http://www.kernel.org 在上面可以得到最新的內(nèi)核。2.6的更新是相當快的,你可以在命令行下使用finger @kernel.org命令來快速得到當前最新的內(nèi)核列表。在這篇文章中我將以2.6.0-test6為 準。 下載了內(nèi)核源碼之后,我 們要使用
          tar jxvf linux-2.6.0-test6.tar.bz2來提取源碼,如果你下載的是以tgz結(jié)尾的壓縮包就使用zxvf參數(shù)來 解壓。我強烈建議你不要使用 /usr/src/linux這個目錄來存放源碼,因為使用這個目錄你需要手工在/usr/include目錄下作一些符號鏈接,這 實在不是一個好主意。 所以我建議你為源碼單獨建一個目錄,這里我們的目錄是/src/linux-2.6.0-test6。
          ?要編譯與正常運行新的內(nèi)核你需 要升級一些軟件包,這些信息在源碼目錄下的Documentation/Changes文件中,
          請根據(jù)你的實際情況選擇升級。這其中我強調(diào)一下你應(yīng)該升級 Module-Init-Tools,不要被你當前系統(tǒng)中depmod -V輸出的版本號迷惑(在RH9中 它的輸出是2.4.22,感覺好象要比Changes中所要求的要高,實際上它們使用不同的版本規(guī)則)。新的 Module-Init-Tools在下面的網(wǎng)址中取得:
          http: //www.kernel.org/pub/linux/kernel/people/rusty/modules/ 我使用的是0.9.14。
          如果你下載的是源碼
          使用如下步驟進行編譯 ./configure --prefix=/ make moveold
          這一步會將你以前的insmod, modprobe, rmmod和 lsmod
          重命名為insmod.old,modprobe.old, rmmod.old lsmod.old。???? make make install
          ?然后使用 ./generate-modprobe.conf /etc/modprobe.conf
          將原來的/etc/modules.conf轉(zhuǎn)換到/etc/modprobe.conf
          如果你使用devfs系統(tǒng)你還需要復(fù)制modprobe.devfs 到/etc目錄下。

          當你升級完相關(guān)軟件包之后,準備工作就算完成了,下面我們將進入到編譯階段。
          第二部分
          編譯:
          ?2.6的build系統(tǒng)與2.4有很大的不同,實際上是更加簡單與方便了。

          第一步我們要進入源碼目錄 cd /src/linux-2.6.0-test6
          make mrproper

          這 時我們就已經(jīng)在源碼目錄下了,make mrproper是用來清除一些老的配置文件、過時的已編譯文件,打補丁遺留的備份文件等工作的。

          如果你是從官方網(wǎng)站下載并且是第一次編譯這一步可以不 作。事實上就算你以前編譯過,在打了一些補丁或者重新更改設(shè)置后再次編譯也可不 作這一步,這方面的內(nèi)容我將在以后的補遺中作解釋。
          現(xiàn)在你只管按步就般的作 不用考慮它。 下面我們就可以進行內(nèi)核的配置了。

          先介紹一下新內(nèi)核中的圖形界面配置工具:
          新內(nèi)核中有兩個GUI配置工具,過去的make xconfig
          現(xiàn)在是一個使用QT庫作為界面方案的配置工具了 ,所以你要使用它必需先安裝QT庫。一般的發(fā)行版光盤中都包含了這個軟件包。
          另一個是make gconfig這是一個使用GTK庫作為界面方案的工具 ,同樣你要使用它就要先安裝GTK庫。
          這兩個工具與原來的GUI工具在界面上有很大的變化,更加符合一般圖形界面程序的使用習慣。 而傳統(tǒng)的
          ?控制臺配置工具menuconfig則沒什么太大的變化基本上保持了原來的樣子,不喜歡花里糊哨的GUI工具的兄弟還是用這個吧:)
          ?下 面我們就要 開始配置內(nèi)核了,新內(nèi)核的build系統(tǒng)有一個新的特性,它會在啟動配置工具時讀取你當前的系統(tǒng)配置,從而保持與你當前配置相同的選項。而 在 2.4中它則是配置為默認選項的。這個特性其實是為了方便你以后的升級工作,在內(nèi)核特性變化不大的情況下可以直接以當前的選項為基礎(chǔ) 從而省去逐項配置的麻 煩。但由于我們現(xiàn)在是從2.4來升級的,它們之間的差別太大了,所以這反而會給我們造成麻煩。
          有兩種方法可以讓2.6以默認選項來啟動配置工具,
          第一種就 是將你當前的配置文件也就是/boot/config-XXX移除,另一種是在執(zhí)行配置工具前先執(zhí)行make? defconfig.我推薦這種方法。

          在2.6中還添加了幾個以調(diào)試為目的的make選項,它們是allyesconfig、allnoconfig、allmodconfig分別表示將 所有選項加載為y、將所有選項加載為n、將所有選項加載為m。它們是為內(nèi)核開發(fā)人員與測試人員準備的,與我們的關(guān)系不大。 下面我們開始 配置內(nèi)核,這里使用的工具為menuconfig。
          首先在命令行模式下執(zhí)行: make menuconfig 在閃過幾行字之后就出現(xiàn)了如圖1 的界面

          內(nèi)核選項


          在 界面的上部是配置工作的使用說明,
          使用箭頭鍵在 各選項間移動,使用enter進入下一層菜單,每個選項上的高亮字母是鍵盤快捷方式,
          使用它可以快速的到達 你想設(shè)置的菜單項上。
          在括號中
          按y將這個項目編譯進內(nèi)核中,
          按M編譯為模塊,
          按N為不選擇。
          按?將打印這個選項的幫助信息,
          按esc將返回到上層菜單。

          ?GUI工具的基本概 念也與之類似我們就不詳細討論了。
          在后面我將主要使用menuconfig來設(shè)置各個選項,選項的次序以它為準,其它工具中各選項也基 本與之對 應(yīng)。

          第一項 Code maturity level options (代碼成熟度選項) 按enter進入后選項如下

          [*] Prompt for development and/or incomplete? code/drivers 默認情況下是選擇的,這將會在設(shè)置界面中顯示還在開發(fā)或者還沒有完成的代碼與驅(qū)動.你應(yīng)該選擇它,因為有許多設(shè)備可能必 需選擇這個選項才能進行配置,實際上它是安全的。
          [*] Select only drivers expected to compile cleanly 選擇這個選項你將不會看到一 些已知的存在問題的驅(qū)動程序選項,默認的情況下也是選擇的。如果你有設(shè)備沒有找到驅(qū)動選項,你可以將這一項去掉,或許就可以找到相關(guān) 驅(qū)動了,不過它可能是有BUG的。
          [*] Select only drivers that don't need compile-time external firmware 如果你不需要在內(nèi)核對一些 外部設(shè)備的固件作map支持就選擇它,這也是默認選項。

          ?第二項 General setup 其中的選項如下

          [*] Support for paging of anonymous? memory 這個選項將使你的內(nèi)核支持虛擬內(nèi)存,也就是讓你的計算機好象擁有比實際內(nèi)存更多 多的內(nèi)存空間用來執(zhí)行很大的程序。默認是選擇 的。
          [*] System V IPC 為進程提供通信機制,這將使系統(tǒng)中各進程間有交換信息與保持同步的能力。有些程序只有在選Y的情況下才能運行, 所以不用考慮,這里一定要選。
          ?[ ] BSD Process Accounting 這里選擇Y將會讓內(nèi)核為用戶層的進程建立一個帳目(進程通過一個特殊的系統(tǒng) 調(diào)用來通知內(nèi)核),當程序退出時內(nèi)核會將進程的相關(guān)信息記錄到帳目文件中,主要包括進程的創(chuàng)建時間、 創(chuàng)建者,內(nèi)存占用等信息。如果你 需要就Y吧:)
          [*] Sysctl support 這將提供一個接口讓你可以動態(tài)的更改一些核心參數(shù)與變量,而不需要重新啟動系統(tǒng)。打開這個選項將會 增加內(nèi)核的體積至少8KB。如果你的內(nèi)核僅用制作安裝與恢復(fù)系統(tǒng)系統(tǒng)盤那么可以不選,以減少對內(nèi)存的占用。
          [ ] Kernel .config support? 這將會把內(nèi)核的配置信息與相關(guān)的文檔說明編譯進內(nèi)核中,以后可以使用一些工具來提取它用來重新構(gòu)建內(nèi)核,一般不用選它。
          [ ] Remove? kernel features (for embedded systems) ---> 這個選項將會把一些特性從內(nèi)核中移除,以減少內(nèi)核體積。對于桌面用戶來講,這可不是一 個好主意,所以不要選它。至于其中的內(nèi)容我會在以后的補遺中介紹。

          ?第三項 Loadable module support (可加載模塊選項) 其選項如下:
          ?[*] Enable loadable module support 這 個選項可以讓你的內(nèi)核支持模塊,模塊是什么呢?模塊是一小段代碼,編譯后可在系統(tǒng)內(nèi)核運行時 動態(tài)的加入內(nèi)核,從而為內(nèi)核增加一些特性或是對某種硬件進行支 持。一般一些不常用到的驅(qū)動或特性可以編譯為模塊以減少內(nèi)核的體積。在 運行時可以使用modprobe命令來加載它到內(nèi)核中去(在不需要時還可以移除 它)。 一些特性是否編譯為模塊的原則是,不常使用的,特別是在 系統(tǒng)啟動時不需要的驅(qū)動可以將其編譯為模塊,如果是一些在系統(tǒng)啟動時就要用到的驅(qū)動比如說文件系統(tǒng),系統(tǒng)總線的支持就不要編為模塊了 ,否在無法啟動系統(tǒng)。(當然還有一些變通的方法,我以后會提到)
          [ ] Module unloading 這個選項可以讓你卸載不再使用的模塊,如果不選 的話你將不能卸載任何模塊(有些模塊一旦加載就不能卸載,不管是否選擇了這個選項)。不選擇這個選項會讓你的內(nèi)核體積減小一點
          [ ]? Module versioning support (EXPERIMENTAL) 這個選項將讓你可以使用其它版本內(nèi)核中編譯的模塊,不過并不可靠,所以一般我們不選擇它
          ?[*] Automatic kernel module loading 一 般情況下,如果我們的內(nèi)核在某些任務(wù)中要使用一些被編譯為模塊的驅(qū)動或特性時,我們要先使用 modprobe命令來加載它,內(nèi)核才能使用。不過,如果你選 擇了這個選項,在內(nèi)核需要一些模塊時它可以自動調(diào)用modprobe命令來加載需要的模 塊,這是個很棒的特性,當然要選Y嘍:)

          第四項 Processor type and features Subarchitecture Type (PC-compatible) 這是一個比較新的 特性,主要的目的是使Linux可以支持多種PC標準,一般我們使用的PC機是遵循所謂IBM兼容結(jié)構(gòu)(pc/at)。這個選項可以讓你選擇一些其它架構(gòu) 。我們一般選擇PC-compatible就可以了。 Processor family (Pentium-4/Celeron(P4-based)/Xeon) 這個不用我講了吧,你是什么CPU就選什 么吧:)

          [ ] Generic x86 support 這個選項提供了對X86系列CPU最大的兼容性,用來支持一些很少見的x86體系的CPU,它可能會降低一些系 統(tǒng)性能。所以如果你的CPU能夠在上面的列表中找到就不要選這個吧。
          [ ] HPET Timer Support 這 也是一個新的特性,HPET是intel制定的新 的用以代替?zhèn)鹘y(tǒng)的8254(PIT)中斷定時器與RTC的定時器,全稱叫作高精度事件定時器。如果你有一臺較新的機器就選它吧,一般它是一個安全 的選項,即使你的硬件不支持HPET也不會造成問題,因為它會自動用8254替換。
          [*] Symmetric multi-processing support 這個也不用多講了吧,如果你使用多處理器系統(tǒng)就選吧,如果你和我一樣使用一個單CPU系統(tǒng)還是把它請出去吧。 ( Maximum number of CPUs (2-255) 這里用 來配置讓Linux最多支持幾路CPU,根據(jù)你的需要選擇。
          [*] Preemptible Kernel 這 可是個新特性,幾乎所有介紹2.6的文章都會提到,這就 是可搶先式內(nèi)核。也就是說被一些優(yōu)先級很高的程序可以先與一些低優(yōu)先級的程序執(zhí)行,即使這些程序是 在核心態(tài)下執(zhí)行(這實際上仍然不是 真正的搶先式內(nèi)核)。從而減少內(nèi)核潛伏期,提高系統(tǒng)的響應(yīng)。當然在一些特殊的點的內(nèi)核是不可搶先的,比如內(nèi)核中的調(diào)度程 序自身在執(zhí)行 時就是不可被搶先的。這個特性可以提高桌面系統(tǒng)、實時系統(tǒng)的性能,所以還是選上吧。
          [*] Machine Check Exception 如 果你的系統(tǒng)出現(xiàn) 一些問題比如CPU過熱,內(nèi)核將會在屏幕上打印相關(guān)信息來提醒你。這個功能是需要硬件支持的。你可以查看/proc/cpuinfo看看是 否有mce標 志,有的話就選吧。如果你十分十分的不幸,選了它之后出現(xiàn)問題,可以在啟動時加nomce參數(shù)來關(guān)閉它。
          [*] Check for non-fatal errors? on AMD Athlon/Duron / Intel Pentium 4 打 開這個選項將會檢查你機器上可能存在的問題,如果有一個非致命錯誤出現(xiàn)將會自動的修復(fù)并且 記錄,這可以幫助你查出程序出現(xiàn)問題的原因,是一個不錯的選項, 當然它只能用在AMD Athlon/Duron / Intel Pentium 4這類CPU上。如果 你正好在用它們中的一個你就選吧。
          [*] check for P4 thermal throttling interrupt. 如果打開這個選項,在P4的CPU溫度過高(也就是P4 的溫控裝置起作用)時會在屏幕上顯示出相關(guān)的信息,根據(jù)你的情況選擇吧。
          < > Toshiba Laptop support 這 個選項是針對Toshiba筆記本的 ,可以用來訪問Toshiba的系統(tǒng)管理模式,也就是可以直接設(shè)置BIOS。不過要注意它只在Toshiba自己的 BIOS中起作用。假如你有一臺Toshiba 筆記本,可惜它的BIOS是Phoenix的,那這個選項仍然是梁山軍師----無用:)
          < > Dell laptop support 這個同上面的選項基本相同,自己看 著辦吧:)
          < > /dev/cpu/microcode - Intel IA32 CPU microcode support 這個選項將讓你可以更新Intel IA32系列處理器的微代碼,當然 你還必須在文件系統(tǒng)選項中選擇devfs才能正常的使用它。如果你把它譯為模塊你還需要在modprobe.conf中加上這一行alias char-major-10- 184 microcode 內(nèi)核本身并不帶有微代碼的二進制文件,你可以到這個網(wǎng)址去得到新的信息
          < > /dev/cpu/*/msr - Model-specific register? support 這個選項桌面用戶一般用不到,它主要用在Intel的嵌入式CPU中的,這個寄存器的作用也依賴與不同的CPU類型而有所不同,一般可以 用來改變一些CPU原有物理結(jié)構(gòu)的用途,但不同的CPU用途差別也很大。
          < > /dev/cpu/*/cpuid - CPU information support 這會在/dev/cpu 中建立一系列的設(shè)備文件,用以讓過程去訪問指定的CPU。一般不用選。
          < > BIOS Enhanced Disk Drive calls determine boot disk? (EXPERIMENTAL) 這將可以打開實模式下BIOS中的增強磁盤設(shè)備服務(wù),以決定從哪個磁盤上啟動。這一般是安全的,不過大多數(shù)BIOS提供商都沒 有實現(xiàn)這個特性。 High Memory Support (off) 如果你有大容量的內(nèi)存(超過4G)你要選它,以使內(nèi)核可以使用這部分內(nèi)存。偶是沒這命啦這部 分永遠為OFF,如果你有你就ON吧。
          [ ] Math emulation 在你的CPU上如果沒有數(shù)學協(xié)處理器的話,打開這個選項可以讓內(nèi)核模擬一個,以提 升浮點計算能力,不過慢的可以。如果你使用的不是古董CPU的話(486SX以前的)這一項你永遠都不需要。
          [*] MTRR (Memory Type Range? Register)support 在Intel p6家族的處理器中(Ppro、 PII和更新的)有一個內(nèi)存類型范圍寄存器,可用來控制處理器訪問的內(nèi)存范圍。打開它 一般可以提升顯卡的顯示性能,所以我們當然要在這說Y嘍:)

          第五項 Power management options (ACPI, APM)(高級電源管理)

          [*] Power? Management support 如果你想讓你的Linux支持高級電源管理(也就是平常我們說的軟關(guān)機、系統(tǒng)休眠等)需要選擇它。
          [ ] Software Suspend? (EXPERIMENTAL) 選 擇這個選項你可以掛起你的計算機(有點象XP中的休眠),打開這項功能后,你可以使用swsusp或者shutdown -z 來掛起你 的計算機。這樣系統(tǒng)會將你當前正在進行的工作(也就是當前內(nèi)存中的內(nèi)容)作成一個鏡象保存到你的交換分區(qū)中,在你下一次啟動時使用啟動 參數(shù) “resume=/dev/你的交換分區(qū)”,內(nèi)核就會將上一次的工作內(nèi)核從鏡象文件中恢復(fù)到內(nèi)存,這可以大大提高系統(tǒng)的啟動速度。當你不想恢 復(fù)上次的工作 時向內(nèi)核傳遞參數(shù)“noresume"。不過系統(tǒng)啟動后你的交換分區(qū)將不可以使用,你可以使用mkswap命令來重新格式化你的交換分 區(qū)。這個功能不需要 高級電源管理的支持。很不錯的功能,我一直有用,大家也來試試吧:)
          [ ] Suspend-to-Disk Support 這個選項與上面 的功能基本相同,不過更靈活一些,可以通過下面的子選項來指定一個專用的交換分區(qū)來保存內(nèi)存鏡象。
          () Default resume partition 與上 面的選項配合,來指定保存鏡象的分區(qū)。
          ACPI (Advanced Configuration and Power Interface) Support ---> 從這里進入ACPI電源管理的 配置界面,要注意ACPI與APM不能同時使用,如果你同時配置了這兩者,那么在系統(tǒng)啟動時如果發(fā)現(xiàn)一個可工作的ACPI設(shè)備那么APM將被關(guān)閉, ACPI會被加載:
          [*] ACPI Support 這個選項應(yīng)該不用我多說了,要想讓你的系統(tǒng)使用ACPI來管理你的電源就要選上它,另外要想讓它起作用 ,你還要在系統(tǒng)中安裝acpid守護程序。
          [*] Sleep States (EXPERIMENTAL) 選 擇這個選項可以使你的系統(tǒng)具有掛起的功能,也就是說你可以 暫時中斷你的工作,讓你的系統(tǒng)處與一種低電能消耗的狀態(tài)(sleep state),你此時的系統(tǒng)狀態(tài)會保存在內(nèi)存或者磁盤上(取決于掛起的深度), 當你需要時再恢復(fù)到正常的工作狀態(tài)。但由于各種系統(tǒng)之間的差別,目前這項功 能并不完善。只有很少的設(shè)備可以完美的支持這個特性,所以 不建議一般用戶使用它。
          < > AC Adapter 這是用來支持移動系統(tǒng)中的交流適配器的,以指示當前系統(tǒng)是不是在使用交流電,對于臺式機不需 要這個選項。
          < > Battery 這個選項用于通過/proc/acpi/battery來向用戶提供移動系統(tǒng)中的電池狀態(tài)信息。同上面那個選項一樣對臺式機沒 有作用。
          ?<*> Button 這個選項用于注冊基于電源按鈕的事件,比如power, sleep等,當你按下按鈕時事件將發(fā)生,一個守護程序?qū)⒆x 取/proc/acpi/event,并執(zhí)行用戶在這些事件上定義的動作比如讓系統(tǒng)關(guān)機。
          <*> Fan 這個選項提供對系統(tǒng)風扇的控制支持,可以通過用戶層 的程序來對系統(tǒng)風扇進行控制(比如打開,關(guān)閉,讀取當前風扇的運行狀態(tài)等,不過只有極少數(shù)的硬件支持它)。
          <*> Processor 打開這個選項 將讓你的系統(tǒng)具有處理IDIE狀態(tài)的能力,也就是說可以讓你的處理器在空閑時節(jié)省電能。個人認為這個選項是一定要選的。
          <*> Thermal Zone? 當你的系統(tǒng)溫度過高時,ACPI可以利用這個選項來控制你的系統(tǒng),及時調(diào)整系統(tǒng)的工作狀態(tài)以保護你的CPU,非常棒的一個特性一定要選呀,要 不然也就不用使用ACPI了。(當然這需要硬件的支持)
          < > ASUS/Medion Laptop Extras 這主要是為ASUS生產(chǎn)的筆記本電腦準備的,以提供對這 些系統(tǒng)上那些額外的按鈕們的支持,用戶可以通過它們來打開或者關(guān)閉LCD的背光,調(diào)整亮度、定制LED的閃爍指示等功能。用戶可以通 過/proc/acpi/asus來改變這些設(shè)置。
          < > Toshiba Laptop Extras 這個選項是對Toshiba筆記本提供特別支持的,它的作用同上面的選項基本 相同,如果你有一臺這樣的本本的話就選它吧。
          ?[ ] Debug Statements 如果選擇它當ACPI出現(xiàn)錯誤時會打印出詳細的信息,這將會增加內(nèi)核 的體積大約50k,如果沒有必要還是不要選它吧。
          ?[ ] Relaxed AML 選擇它的話ACPI翻譯器將會放松對AML的錯誤檢查,一些筆記本電腦可能需 要它才能正常的使用ACPI(一些糟糕的桌面機可能也需要它,如果你的系統(tǒng)使用ACPI時出現(xiàn)問題不妨選上它試試)

          ?

          posted on 2007-04-26 12:50 壞男孩 閱讀(2267) 評論(2)  編輯  收藏 所屬分類: Linux

          FeedBack:
          # re: linux2.6.9內(nèi)核如何編譯
          2007-07-04 09:27 | 小濟
          您好,我是新手,linux2.6.9內(nèi)核如何編譯可以給我發(fā)一份完整版嗎,我的郵箱是yuxue_2005521@163.com ,謝謝.  回復(fù)  更多評論
            
          # re: linux2.6.9內(nèi)核如何編譯
          2008-01-17 17:09 | jpuff
          你好,我最近需要編譯內(nèi)核到一臺裸機上,可以把你的完整的編譯過程發(fā)一份給我看看哈 我的郵箱是jpuff@163.com 非常感謝!  回復(fù)  更多評論
            
          主站蜘蛛池模板: 加查县| 永昌县| 绍兴县| 鲁山县| 海南省| 泗阳县| 阳江市| 延津县| 托里县| 乳山市| 神木县| 赤峰市| 中江县| 登封市| 衢州市| 云龙县| 萝北县| 白银市| 伽师县| 鸡西市| 冷水江市| 西乌珠穆沁旗| 格尔木市| 霍邱县| 井研县| 门源| 台北市| 兴安县| 客服| 常州市| 界首市| 凤台县| 安阳市| 慈溪市| 板桥市| 察隅县| 长沙市| 南靖县| 墨江| 鹤山市| 景东|