戴文的Linux內核專題:28 編譯與安裝
你好!在花費了大量的時間在配置你需要的內核後,你現在可以編譯它了。源代碼是純文本形式的C代碼。這對人來可讀但是對機器可不是這樣。編譯會將代碼轉換成計算機可理解的一種稱之為二進位碼的形式(1是 [開],0 是 [關])。編譯同樣會將所有內核代碼文件變成一個內核的文件。
為了編譯內核,在內核源代碼相同目錄下,在終端內輸入"make"。這會花費一些時間。完成之後,必須通過"make modules"來編譯模塊。為了從一開始就簡化編譯過程,輸入"make; make modules"。這會先編譯接著是模塊,而不用用戶再回來輸入"make modules"。
警告:在你安裝一個內核時,備份所有的重要數據,確保有一份/boot目錄備份在FAT32的存儲卡上。這可以在如果安裝失敗後幫助修復系統。FAT32不會存儲許可權,因此它更容易被用作live盤來還原數據。記住設置原始文件許可權和可執行位。
一旦編譯已經成功完成,我們可以安裝內核到本地系統中(我會馬上解釋如何在其他系統上安裝內核[交叉編譯])。在相同的終端下,在編譯完成後,輸入"make install"。這會在/boot目錄下存放一些文件。"vmlinuz"(或者其他相似的名字)是內核自身。"initrd"是基於內存的文件系統,它被置於內存中且在啟動中使用。"System-map"包含了一張內核符號列表。這些全局變數和函數用於內核代碼。"config" 是內核的配置文件。grub.cfg會自動更新。然而,有些bootloder需要手動配置。內核安裝器會自動配置Grub,LILO和SysLinux bootloder。像BURG這類bootloder需要手動配置。模塊的安裝同樣需要輸入"make modules install"。
註:內核和模塊的安裝可以寫在一行-「make install && make modules_install」。
一旦上面的過程完成了,用戶可以通過重啟系統並在開機後在終端內輸入"uname -r"來確保內核已經安裝。如果系統無法啟動或者uname報告你預期外的版本號,這個問題可能眾多問題之一引起。或者是bootloader沒有正確設置,特性/配置衝突,編譯失敗,不正確的安裝,或者其他原因。找出問題源頭最好的方法是查看系統日誌(如果系統已經啟動到足以產生日誌)。"dmsg"是一個在屏幕上列印內核日誌的命令。查看錯誤、警告或者未預料的結果。如果系統沒有啟動或者沒有足夠啟動完全來生成日誌,使用live linux盤來執行診斷和修復。如果所有的都失敗了,再次編譯內核並確保你已經用root或者"sudo"安裝了內核。
註:最好的修復系統的方式是使用live Linux發行版來移除新的/損壞的內核,接著手動修復Grub文件(或者複製一個備份)。
一些Linux用戶也喜歡安裝內核文檔,但這並不是必要。對於那些想要安裝文檔的用戶,輸入這行,這裡的version是你的內核版本號 "install -d /usr/share/doc/linux-VERSION && cp -r Documentation/* /usr/share/doc/linux-VERSION"(VERSION 是內核版本號)。很明顯,這需要root特權。
要是想編譯一個如你目前內核一樣特性的內核,輸入這條命令"zcat /proc/config.gz > .config"。這個文件可能不存在,如果是這樣,你可能需要詢問你發行版/內核的開發者這個文件。"zcat"命令解壓並寫入數據到一個".config"文件中。記住把".config"放到合適的位置。這個文件應該放置在Linux內核目錄下,並允許它替換當前的文件。接著,像往常一樣編譯安裝你的內核即可。
交叉編譯稍微有點不同。為目標系統配置內核。確保內核配置完後,它是以交叉編譯配置的。當交叉編譯時,需要熟悉兩條術語。"Host"是執行編譯的系統,"Target"是接收新內核的系統。確保Host主機系統有合適的編譯器。比如,對於ARM系統的交叉編譯,用戶需要在主機系統上有gcc-arm-linux-gnueabi。通常來說,開發者可以在他們的包管理器上搜尋或者Google到合適/最好的適合他們需要的交叉編譯器。比如用於ARM系統交叉編譯的命令是"make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-"。"ARCH=arm"指的是目標處理器的類型,"CROSS_COMPILE"指明了交叉編譯器。注意交叉編譯器前面缺少了"gcc-"並以連字元結束。這是用戶在使用交叉編譯器作為參數使用時必須使用的格式。模塊可以通過輸入"make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules"來交叉編譯。為了在目標系統上安裝內核,將內核文件夾複製到目標系統上。一旦文件已在目標系統上並在該目錄下打開了終端,輸入"make install && make modules_install"。當然你必須是root或者使用"sudo"。
信息:Kernel.org放了一個支持的交叉編譯器列表(https://www.kernel.org/pub/tools/crosstool/)。
安裝編譯總結:
標準:
make && make modules && make install && make modules_install
做一個更新的版本或者重整你的內核:
zcat /proc/config.gz > .config && make && make modules && make install && make modules_install
交叉編譯:
make ARCH={TARGET-ARCHITERCTURE} CROSS_COMPILE={COMPILER}; make ARCH={TARGET-ARCHITERCTURE} CROSS_COMPILE={COMPILER} modules && make install && make modules_install
下篇文章中,我們會討論加入和激活模塊。謝謝!
via: http://www.linux.org/threads/the-linux-kernel-compiling-and-installing.5208/
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive