Linux核心編譯:獨立作業系統

Linux核心編譯:獨立作業系統

大家好,我是 Linux 核心編譯的新手,所以我有一些問題:透過編譯 Linux 內核,我們是否建置了一個完全獨立的作業系統,不依賴任何 Linux 發行版?

如果是的話...那麼當我想使用 initramfs 命令建立 initrd 檔案時,為什麼它會添加一些有關我正在運行的 linux destrubution 的資訊(我正在運行 Ubuntu 10.4)?

我應該如何編譯並添加模組到我編譯的linux中以及我應該把它們放在哪裡?

這是我一直在做的事情的總結:

1.取得核心原始碼(3.4.1)並使用“make all”命令編譯它(我使用目前的linux .config)

  1. 在我的記憶棒上安裝 grub

  2. 將編譯好的bzImage放到我的記憶棒的/boot目錄下

  3. 使用“initramfs”命令建立initrd檔案並將其也放在/boot中。

  4. 使用記憶棒啟動我的電腦並進入 grub> 終端

  5. 使用“root(hd0,0)”; “內核/boot/bzImage”; “initrd /boot/initrd.img”,然後“boot”指令啟動。

  6. 在出現錯誤指出找不到「/lib/modules/3.4.1/modules.dep」檔案後進入 (initramfs) 終端機!

我究竟做錯了什麼 ?

答案1

透過編譯 Linux 內核,我們是否可以建立一個完全獨立的作業系統,不依賴任何 Linux 發行版?

不。它只是一個內核。 A使用者區,包括系統庫和基礎軟體的集合,是促進您與電腦互動所必需的。在我們通常所說的「Linux」中,它是由一個名為 GNU 專案的單獨專案提供的。從技術上講,我們應該(有些人確實)將其稱為“GNU/Linux”。

那麼,當我想使用 initramfs 命令建立 initrd 檔案時,為什麼它會添加一些有關我正在運行的 linux destrubution 的資訊(我正在運行 Ubuntu 10.4)?

因為您的 initrd 包含最初在啟動時設定係統、載入必要的驅動程式和守護程式、在硬碟上尋找並安裝必要的分割區等的程式集合。取決於您的特定安裝、設定和電腦。它通常不能與其他人的 initrd 互換。這就是為什麼它必須由您的系統產生。

我應該如何編譯並添加模組到我編譯的linux中以及我應該把它們放在哪裡?

如果您正在編譯自己的內核,那麼您可能make menuconfig在編譯之前在核心來源目錄中進行操作,這允許您選擇將編譯哪些功能,以及它們是否將整合到內核二進位檔案中或作為模組提供。

這是我一直在做的事情的總結:

有多種原因導致它無法按您希望的方式工作。

取得核心原始碼(3.4.1)並使用“make all”命令編譯它(我使用當前的 linux .config )

如果您運行的是 Ubuntu 10.04,它比 Linux 核心的 3.x 分支早得多,更不用說 3.4 了。它很可能無法正常工作,至少在沒有大量額外工作的情況下是如此。設定檔也發生了很大的變化,坦白說,我很驚訝它沒有拋出關於你的(大概是 Linux 2.6)設定檔中的內容與 3.4 中的操作方式不匹配的錯誤。另外,您可能想要下載Ubuntu 的核心原始碼包,而不是從kernel.org 下載普通的核心原始碼,因為Ubuntu 會修補核心以包含所需的功能,並使其與系統中的其他所有內容相容。最後,您遺漏了一些步驟,我將在稍後介紹。

將編譯好的bzImage放到我的記憶棒的/boot目錄下

我不確定你這樣做的目的是什麼,但如果是在你的記憶棒上安裝完整的可啟動 Linux,那麼還有更多的事情要做——你的內存上根本沒有任何用戶態的東西例如,堅持。如果設定正確的話,它實際上會做的是(嘗試)在你的硬碟上執行 Ubuntu 安裝,而核心在你的記憶棒上。我相信這應該可行,但為什麼要這樣做而不是只是將核心安裝在硬碟上?您可以將其與現有的並排安裝,以便可以在它們之間自由切換。

在出現錯誤指出找不到「/lib/modules/3.4.1/modules.dep」檔案後進入 (initramfs) 終端機!

這又回到了我之前提到的錯過的步驟。您需要make modules_install將新核心的模組放入/lib/modules.

然而...

這些都不重要,因為理想情況下,您根本不應該以「傳統」方式編譯內核,除非您有非常具體的需求。如今,如果您確實需要編譯自己的內核,大多數發行版都有一種方法可以使用其自定義內核版本(如果適用),自動化構建過程,將內核作為包安裝,以便您可以乾淨地安裝和刪除根據需要,並配置您的引導程序,讓您選擇新或舊核心。在 Ubuntu 中,您應該遵循以下說明:核心/編譯 - Ubuntu Wiki

這並不是說你不能僅僅為了好玩/為了教育目的而以“老式”方式編譯內核——我用這種方式編譯了我的第一個內核,但這是在有更好的方法之前。如果您的系統不被破壞對您來說很重要,請使用為您的發行版推薦的方法,使用它們的源代碼,並使用它們的套件管理。

答案2

當您重新編譯或編譯 Linux 核心時,您並不是在建立新的發行版。您只是製作更新或不同版本的核心。核心是一個載入的文件,然後在 PC 完成 POST 過程後由引導程式執行。

發行版由許多其他檔案組成,包括標準 UNIX 公用程式(通常是套件管理器)等。如果您(重新)編譯自己的內核,則這些都不會受到影響。

自從我編譯自己的核心以來已經有一段時間了,但我認為您需要在命令depmod -a之後運行make

相關內容