製作CPIO格式的INITRD

2021-09-30 05:46:47 字數 1897 閱讀 9194

linux核心自從2.6版以後,就大力推薦cpio-initrd.

現在各大linux發行版的initrd都是cpio格式的.

這次主要說下如何製作cpio-initrd.

首先假設咱們已經用busybox或klibc或別的什麼做好了根檔案系統,位於~/rootfs下.

按照ibm developerworks裡的文章說,可以用以下命令製作cpio-initrd:

cd ~/rootfs

find . | cpio -c -o > ../initrd.img

gzip ../initrd.img

其實這是不對的.

我用這幾條命令製作cpio-initrd,結果都是kernel panic.

參照我用的archlinux發行版的mkinitcpio命令的指令碼**,應該是用gen_init_cpio命令來製作cpio-initrd.

gen_init_cpio命令原始碼通常與linux核心原始碼一塊兒打包,位於核心原始碼目錄的usr/下面.

編譯其原始碼得到gen_init_cpio可執行檔案,這還不夠.

gen_init_cpio的引數是乙個文字檔案,這個檔案的內容類似於這種格式:

dir /sbin 755 0 0

slink /sbin/makedevs ../bin/busybox 777 0 0

slink /sbin/modprobe ../bin/busybox 777 0 0

slink /sbin/switch_root ../bin/busybox 777 0 0

slink /sbin/sysctl ../bin/busybox 777 0 0

slink /sbin/lsmod ../bin/busybox 777 0 0

slink /sbin/getty ../bin/busybox 777 0 0

slink /sbin/ifconfig ../bin/busybox 777 0 0

......

很明顯,這是個檔案列表.

手工製作這個檔案列表是不現實的,usr/目錄下還有個gen_initramfs_list.sh,這個指令碼就是用來自動生成檔案列表的.

好了,下面咱們就可以得出生成cpio-initrd的完整步驟了:

cd ~

gen_initramfs_list.sh rootfs/ > filelist

gen_init_cpio filelist > rootfs.cpio

gzip rootfs.cpio

最後得到的這個rootfs.cpio.gz,就是咱們要的cpio-initrd了.

在bootloader裡修改一下引數:

結果怎麼樣?

(全文完)

linux2.6 核心的 initrd 機制解析

文章出處:飛諾網(www.firnow.com):

在已經做好的 rootfs 下

**:find . | cpio  -h newc -o > /tmp/rootfs.cpio

cd /tmp

gzip -9  rootfs.cpio

-l 解除符號連線的關聯

-h newc 是採用新型 (svr4) 跨平台格式, 支援大於 65536 i 節點 的 文件系統,不能啟動主要是這

個,因為預設格式是老式的"bin"

經試,能成功啟動,這樣修改 initrd.gz 文件,比 mkinitramfs 形象、方便的多

cpio 解壓

首先,該檔案是乙個經過壓縮的檔案,當然要先解壓了,這些大家都非常清楚的,就是用

#gunzip 檔名.cpio.gz

這樣檔案就解壓成為 "檔名.cpio" 了,然後再對它進行 cpio 操作

#cpio -idmv < 檔名.cpio

這樣就將 cpio 檔案徹底暴露在我們面前了。

linux下如何製作initrd映象

1.準備rootfs.ext4檔案 請參考此處 加入已經準備好了所有檔案在 home initrd base目錄下 2.製作initrd映象 gzip rootfs.ext4 cd home initrd base find cpio quiet h newc o gzip 9 n initrd.g...

cpio 檔案系統的製作 和 解壓

在已經做好的 rootfs 下 find cpio h newc o tmp rootfs.cpio cd tmp gzip 9 rootfs.cpio l 解除符號連線的關聯 h newc 是採用新型 svr4 跨平台格式,支援大於 65536 i 節點 的 文件系統,不能啟動主要是這 個,因為預...

cpio 命令的用法

一 cpio 1.檔案或目錄打包。打包有如下多種情況 a 含子目錄打包 find usr lib print cpio o u0 temp1.cpio 本人在unix系統業務使用 特別 是資料管理與備份 中,經過一番研究 整理後,充分利用unix系統本身的命令tar cpio和compress等來做...