引導新編譯的 Linux 內核

引導新編譯的 Linux 內核

我已經開始閱讀 Essential Linux Device Drivers 這本書。我正在遵循編譯和引導到新核心的過程。但是我無法啟動到新編譯的內核 - 我在 grub 中選擇新內核,然後......什麼都沒有......螢幕保持不變。

以下是我正在採取的步驟,如書中所述(我使用內核 2.6.24,因為這就是本書所基於的):

cd /usr/src/linux-2.6.24 # the base dir of the kernel I downloaded
make clean
cp arch/x86/configs/i386_defconfig .config
make bzImage
cp arch/x86/boot/bzImage /boot/vmlinuz

書上說:

您可能需要提醒引導程式新引導映像的到來。如果您使用 GRUB 引導程序,它會自動計算出這一點。

嗯,在我的例子中它並沒有自動計算出來,因為 GRUB 中沒有選擇這個內核的選項。所以我透過在終端機中輸入 update-grub 手動完成此操作。這也不起作用。然而,一旦我將檔案名稱從 vmlinuz 更改為 vmlinuz-2.6.24 並輸入 update-grub ,它就會拾取它。所以書的第11頁似乎已經遺漏了很多東西。

書上說然後重新啟動機器。

不管怎樣,我現在可以在 GRUB 中選擇這個內核,但正如我上面所說,它無法正常啟動,螢幕只是變成空白並且永遠不會改變。那我錯過了什麼嗎?我完全按照書上的說明進行操作。我在這本書上花了 50 歐元,現在由於這個問題我無法翻過第 11 頁。

我認為我在 VirtualBox 上使用 Ubuntu 不是問題?我只是在虛擬機器 Ubuntu 啟動期間進入 grub,然後選擇新編譯的內核,我不明白這怎麼會成為問題。

答案1

Ubuntu 有一個從 Debian 匯入的腳本,可以為您完成安裝。編譯內核後運行即可sudo make modules_install install,您的核心將被正確安裝。

稍後編輯:這裡是 Ubuntu 和 Debian 使用的腳本。當您發出上述安裝命令並執行特定於發行版的安裝時,核心 Makefile 會自動呼叫它。

答案2

您的 grub.conf 檔案應該具有與此類似的條目

title My Linux Kernel
root (hd0,0)
kernel /boot/gentoo-kernel root=/dev/sda1

你的 Ubuntu 核心可能有類似的東西

initrd /boot/initrd.img

在硬體上編譯核心時不需要它。這可能會導致您的問題。

你應該評論我你的 grub.conf 文件,我會看一下它。否則你的配置可能是罪魁禍首。

較舊的核心也可能沒有新硬體所需的驅動程式。

較新的 ubuntu 系統將無法順利恢復到舊的核心版本。

您可以嘗試執行接近該核心版本的較舊版本的 ubuntu 或 kernel.org 上的最新核心版本。

答案3

每個 Linux 發行版都有自己的套件部署機制和策略。這與內核相同。大多數發行版都用他們的工具隱藏了編譯過程,這些工具主要提供二進位套件。

如果您想在特定的 Linux 發行版上編譯自訂內核,您必須遵循此發行版操作指南,以了解如何在不破壞系統的情況下按照自己的方式進行編譯。

Ubuntu有其特定的方式,Achlinux相同,Redhat相同,或Gentoo相同。

因此,對於 Ubuntu,請遵循此處的文檔https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

相關內容