天天看點

《Linux From Scratch》第三部分:建構LFS系統 第八章:讓LFS系統可引導 - 8.3. Linux-3.19

 Linux 軟體包包含 Linux 核心。

大概編譯時間:3.0 - 49.0 SBU (一般 6 SBU)

所需磁盤空間:700 - 6800 MB (一般 800-900

MB)

編譯核心包括以下步驟—配置、編譯和安裝。閱讀核心源碼樹中的 <code>README</code>

可以獲得替代本手冊配置的方法。

《Linux From Scratch》第三部分:建構LFS系統 第八章:讓LFS系統可引導 - 8.3. Linux-3.19

本章節裡的指令都要在 chroot 環境下運作。如果因為某種原因(比如說重新開機)離開了這個環境,請保證要按照

<a href="https://linux.cn/lfs/LFS-BOOK-7.7-systemd/chapter06/kernfs.html#ch-system-bindmount">6.2.2,“挂載和激活/dev”</a>

chroot 環境。否則運作下面的 make 指令會提示段錯誤。并進入源碼目錄(sources),解壓 Linux-3.19.tar.gz 檔案并進入解壓後的目錄。

運作以下指令準備編譯:

這将保證核心樹的絕對幹淨。核心小組建議在每次編譯之前都執行此指令,無用的代碼将會在解壓後删除。

《Linux From Scratch》第三部分:建構LFS系統 第八章:讓LFS系統可引導 - 8.3. Linux-3.19

配置核心的一個好的起點是運作 make defconfig。這樣會參考你的機器架構生成一份基本能用的基礎配置。

注意要確定打開或關閉下面這些特性,否則系統也許不能正常工作甚至根本無法啟動:

《Linux From Scratch》第三部分:建構LFS系統 第八章:讓LFS系統可引導 - 8.3. Linux-3.19

盡管 "The IPv6 Protocol" 不是必須打開,但它是 systemd 開發人員強烈推薦的。

上述配置項的一些原理說明:

<dl></dl>

<dt> <code>Support for uevent helper</code> </dt>

<dd></dd>

打開這個選項會影響 Udev/Eudev 裝置管理。

<dt> <code>Maintain a devtmpfs</code> </dt>

這個選項允許核心在 Udev 運作之前就建立自動裝置節點。之後 Udev 在這個基礎上運作,管理權限以及增加軟連結。對于所有 Udev/Eudev 使用者,這個配置項是必須的。

make 參數的含義:

<dt> <code>LANG=&lt;host_LANG_value&gt; LC_ALL=</code> </dt>

使用主機的語言環境。這樣就友善在使用 menuconfig 時顯示合适的 ncurse 界面,它在 linux 字元終端裡顯示 UTF-8 字元。

注意把 <code>&lt;host_LANG_value&gt;</code> 替換為自己主機上環境變量 <code>$LANG</code> 的值。如果這個變量沒有設定,你可以使用變量 <code>$LC_ALL</code> 或 <code>$LC_CTYPE</code> 的值代替。

另外,make oldconfig 在某些情況下可能更合适。檢視 <code>README</code> 檔案了解更多資訊。

想偷懶的話,可以拷貝主機系統的核心配置檔案 <code>.config</code>(如果有的話)到解壓後的 <code>linux-3.19</code> 目錄下來跳過核心配置。不過,我們不建議這樣做。最好是探索一下整個核心配置菜單,從最開始配置核心。

編譯核心映像和子產品:

還有,<code>modprobe.d(5)</code> 也可以看一下。

如果核心配置裡用到,需要安裝子產品:

在核心編譯完成後,還需要一個額外步驟來完成安裝。有些檔案需要拷貝到 <code>/boot</code> 目錄下。

核心映像檔案所在的實際目錄根據主機系統架構可能會不一樣。下面的檔案名你也可以改成你喜歡的,不過開頭最好是 vmlinuz 才可以相容下一節要講的配置引導過程的自動設定。下面的指令假設主機是 x86 架構:

<code>System.map</code> 是核心的符号檔案。它映射了每一個核心 API 函數的入口,以及核心運作時的資料結構位址。是調試核心問題時的資源。運作下面的指令安裝映射檔案:

在之前指令 make menuconfig 裡生成的核心配置檔案 <code>.config</code> 包含了目前編譯的核心的所有配置。最好能儲存下來留作參考:

安裝 Linux 核心文檔:

需要注意一下核心源代碼目錄下的檔案屬主并不是 root。在以 root

使用者解壓包的時候(我們在 chroot

環境裡做的),解壓出來的檔案會擁有生成這個包的電腦裡使用者群組。在安裝其他包的時候這并不是問題,因為它們的源代碼在安裝完後就删除了。不過,Linux

核心的源代碼經常會保留比較長時間。這樣的話,就有可能會把軟體包作者的使用者 ID

對應到本機的某個使用者上。進而這個使用者就會擁有核心源代碼的寫權限。

如果要保留核心源代碼的虎啊,對目錄 <code>linux-3.19</code> 運作 chown -R 0:0 指令來保證所有檔案屬主更改為 root。

《Linux From Scratch》第三部分:建構LFS系統 第八章:讓LFS系統可引導 - 8.3. Linux-3.19

一些核心文檔裡建議建立軟連結 <code>/usr/src/linux</code> 指向核心源代碼目錄。這是 2.6 及以前版本核心的特定要求,而在 LFS 系統裡 一定不要 建立這個連結,因為這樣的話,在你的基礎 LFS 系統完成後安裝某些軟體包時可能引起問題。

《Linux From Scratch》第三部分:建構LFS系統 第八章:讓LFS系統可引導 - 8.3. Linux-3.19

雖然大多數情況下,Linux 子產品自動加載就好,但是有時候需要特别指定加載順序。modprobe 或 insmod 在加載子產品時會讀取 <code>/etc/modprobe.d/usb.conf</code> 。如果将 USB

裝置(ehci_hcd、ohci_hcd 和 uhci_hcd)

編譯為子產品,則需要此檔案,這樣它們就會以正确的順序加載。ehci_hcd  需要在 ohci_hcd 和

uhci_hcd 之前加載,否則在系統啟動過程中将會輸出警告。

運作以下指令建立<code></code><code>/etc/modprobe.d/usb.conf</code>

檔案:

安裝的檔案:config-3.19,

vmlinuz-3.19-lfs-7.7-systemd, and System.map-3.19

安裝的目錄:/lib/modules, /usr/share/doc/linux-3.19

包含核心的所有配置選項

Linux

系統的引擎。當電腦啟動時,核心作為整個系統的第一部分載入。它首先檢測和初始化所有的電腦硬體,然後将這些硬體子產品抽象成檔案樹讓軟體通路,并把單個 CPU 轉換成多任務系統,可以看上去同時地運作多個程式。

位址和符号清單;包含有入口點的映射以及所有函數和核心資料結構的位址

建立者:Gerard Beekmans

編輯者:Matthew Burgess 和 Armin K.

翻譯團隊:LCTT

譯者/校對:zpl1025,dongfengweixiao,wxy,ictlyh

<a href="https://linux.cn/lfs/LFS-BOOK-7.7-systemd/chapter08/kernel.html" target="_blank">原文連結</a>

繼續閱讀