簡體   English   中英

如何獲得由grub2以與發行商無關的方式加載為根設備的cpio歸檔文件制成的initrd?

[英]How do I get an initrd made out of a cpio archive loaded as the root device by grub2 in a distro-agnostic way?

我正在虛擬機中構建LFS(Linux從頭開始)系統,到目前為止,我已經設法獲得了一個可行的桌面系統,從已知的設備/ dev / sda1啟動。 我現在正在嘗試制作一個從ISO映像啟動的實時系統。 我已經設定了主意,而不是使用/ dev / sr0作為我已經建立的根(並且,由於它比實際的CD-ROM更可能通過USB記憶棒使用,因此太不靈活了),我已經下定決心在啟動它到一個initrd根目錄。 想法是將其用作系統的根目錄,而不是將其用作臨時根目錄來加載“實際”根目錄,並且由於它已經在內存中,因此省去了設置tmpfs根目錄,復制所有文件,並切換到它。

我以前一直在嘗試squashfs映像,因為我發現Ubuntu似乎使用了該映像並且具有我所需要的:較小的root,加載速度更快,使用的內存更少,而且速度很快(xz是SSLLOOWW,用於提取和gzip加載緩慢)。 起初,我在引導它時遇到了麻煩,因此我切換到了基於cpio的initrd。 由於檔案文件丟失導致一些最初的麻煩之后,我設法啟動了它。

我暫時(大約一個月前)將其留在系統上執行其他任務。 我丟失了原始的GRUB2設置和內核配置,因此再次進行了操作,但是我一直遇到磚牆。 我希望這里的人可能知道我所缺少的。

當我啟動時,我從沒看到有關加載initrd文件的任何消息,它直接進入了加載,解壓縮和啟動內核的過程。 這最終導致消息出現內核恐慌

VFS: cannot open root device "(null)" or unknown-block (1,0): error -6
Please append the correct "root=" boot option; here are the available partitions:

沒有顯示分區,下面是“內核崩潰”消息,僅重復第一行。 如果我使用“ rootfstype = ramfs”,則會得到:

VFS: mounted root (ramfs filesystem) readonly on device 0:15.
devtmpfs: error mounting -2

本質上,它以root用戶身份掛載EMPTY ramfs文件系統,因此由於/ dev條目不存在,因此掛載devtmpfs失敗。 但是可以肯定的是,我之前使用過該啟動選項。

這是我的GRUB 2配置:

menuentry = "LFS (inird test)" {
        linux   /boot/kernel/initrd/linux ro rdinit=/etc/init
        initrd  /boot/kernel/initrd/root.cpio.gz
}

是的,存在/ boot / kernel / initrd /目錄條目,linux是內核(編譯內核產生的bzimage文件),root.cpio.gz是我的壓縮的initrd根cpio歸檔文件。

這是我內核的.config文件(抱歉,無法在此處粘貼它)。

如果需要更多信息,請隨時詢問。 那你

好的,我設法解決了這個問題! 顯然,它不是內核的配置,GRUB2,甚至不是啟動順序。 它是initrd存檔本身。 深入了解Linux內核配置的謊言:歸檔文件必須使用cpio的--newc選項構建。 我手動構建的程序缺少此選項,因此內核會忽略存檔,而只是繼續執行正常的引導過程。

之所以出現這種情況,是因為我偶然發現了用來構建它們的舊腳本,並看到了cpio中的所有選項。 我檢查了我匆忙整理的最新腳本,並仔細檢查了內核文檔(以及init / do_mounts.c和init / initramfs.c文件),並意識到發生了什么。 我通過更正進行了嘗試,現在系統可以毫無問題地愉快地啟動到initrd中了! :d

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM