rootfs打包方式

lethe1203發表於2024-03-20
參考資料:
https://blog.csdn.net/weixin_43269452/article/details/131169725
https://blog.csdn.net/u012787604/article/details/121685547
https://zhuanlan.zhihu.com/p/637951209?utm_id=0
https://blog.csdn.net/m0_71272694/article/details/127028867
https://blog.csdn.net/u012247418/article/details/107727631

initrd和initramfs的基本概念:

initrd(Initial RAM Disk)和initramfs(Initial RAM File System)都是用於在 Linux 系統引導過程中載入臨時檔案系統的方法,它們的區別如下:
  1. initrd
  • initrd 是最早期使用的一種方式,它是一個固定大小的記憶體磁碟,其中包含用於啟動系統所需的程式和驅動程式。在引導過程中,核心會先載入 initrd 到記憶體中,然後將其掛載為根檔案系統。一旦 initrd 載入完成,它的使命就完成了,此後真正的根檔案系統會被掛載到系統中。
  • initrd 的缺點是固定大小和浪費空間,因為它需要預先分配一個固定大小的記憶體塊。
  1. initramfs
  • initramfs 是 initrd 的進化版本,它是由核心動態生成的臨時檔案系統,可以根據系統需要載入所需的模組和檔案。相比於 initrd,initramfs 更加靈活和高效,因為它只包含引導所需的檔案和程式,不會浪費空間。
  • 核心會在引導過程中載入 initramfs 到記憶體中,並將其作為初始根檔案系統。之後,initramfs 負責載入必要的驅動程式和檔案,最終將真正的根檔案系統掛載到系統中
在瞭解initramfs之後,說明下兩種rootfs打包方式:

1、rootfs與zImage分開映象

也就是常用的配置方法,rootfs一個映象,zImage + dtb為一個映象,uboot一個映象
核心配置去掉CONFIG_INITRAMFS_SOURCE宏定義

2、rootfs打包進zImage

將 rootfs 編譯進核心意味著在編譯核心時將檔案系統直接嵌入到核心映象中,而不是作為一個獨立的檔案系統映像。這種做法通常被稱為"initramfs"或"initrd",它允許將根檔案系統的內容打包進核心,以便在引導時直接使用。
要實現這一點,你需要在核心配置中啟用相關的選項,一般來說,需要設定 CONFIG_INITRAMFS_SOURCE 選項來指定 initramfs 的原始檔或目錄路徑,並啟用 CONFIG_RD_GZIP 或其他相關選項來啟用 initramfs 支援。

相關文章