從讀手冊開始讓zynq板卡跑起linux(二)----利用initrd和initramfs分別製作根檔案系統
阿新 • • 發佈:2019-01-09
1.initrd 與 initramfs的區別
Linux核心在初始化之後會執行init程序,而init程序會掛載我們的根檔案系統,但由於init程式也是在根檔案系統上的,所以這就有了悖論。Linux採用兩步走的方法來解決這個問題。Linux2.6版以前的方法是:除了核心vmlinuz之外還有一個獨立的initrd.img映像檔案,其實它就是一個檔案系統映像,linux核心在初始化後會mount initrd.img作為一個臨時的根檔案系統,而init程序就是在initrd.img裡的,然後init程序會掛載真正的根檔案系統,然後umount initrd.img。但Linux2.6核心的實現方式卻不太一樣,雖然完成的功能是一樣的。Linux2.6採用initramfs。initramfs:init ram filesystem,它是一個cpio格式的記憶體檔案系統。
2.initrd 根檔案系統的製作
主要步驟:
1). Extract the initrd image from the gzip archive.
gunzip ramdisk.image.gz2). Mount the initrd image.
chmod u+rwx ramdisk.image mkdir tmp_mnt/ sudo mount -o loop ramdisk.image tmp_mnt/ cd tmp_mnt/3). Make changes in the mounted filesystem.
4). Unmount the initrd image and compress the image.
sudo umount tmp_mnt/ gzip ramdisk.image實驗結果:
3.initramfs 根檔案系統的製作
主要步驟:
1). Extract the contents of the cpio.gz archive.
mkdir tmp_mnt/ gunzip -c initramfs.cpio.gz | sh -c 'cd tmp_mnt/ && cpio -i' cd tmp_mnt/2). Make changes to the filesystem.
3). Repack the filesystem into a cpio.gz archive.
sh -c 'cd tmp_mnt/ && find . | cpio -H newc -o' | gzip -9 > new_initramfs.cpio.gz實驗結果:
4.總結:
賽靈思的wiki已經有了linux正常啟動的最簡檔案系統,我們需要做的就是解壓,新增自己的庫檔案和驅動等,然後再重新生成.gz,省掉了用busybox逐步建立根檔案系統的過程。注意:最後別忘了
mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz
否則報“ramdisk 格式不對的錯誤”。