initramfs 的解壓和打包

2021-08-30 04:40:42 字數 2633 閱讀 4833

initrd 的英文含義是 boot loader initialized ram disk,就是由 boot loader 初始化的記憶體盤。在 linux核心啟動前,boot loader 會將儲存介質中的 initrd 檔案載入到記憶體,核心啟動時會在訪問真正的根檔案系統前先訪問該記憶體中的 initrd 檔案系統。在 boot loader 配置了 initrd 的情況下,核心啟動被分成了兩個階段,第一階段先執行 initrd 檔案系統中的"init or linuxrc",完成載入驅動模組等任務,第二階段才會執行真正的根檔案系統中的 /sbin/init, linux2.6既支援cpio-initrd,也支援image-initrd,但是cpio-initrd有著更大的優勢,在使用中我們應該優先 考慮使用cpio格式的initrd.

initrd 的主要用途

linux 發行版必須適應各種不同的硬體架構,將所有的驅動編譯進核心是不現實的,initrd 技術是解決該問題的關鍵技術。linux 發行版在核心中只編譯了基本的硬體驅動,在安裝過程中通過檢測系統硬體,生成包含安裝系統硬體驅動的 initrd,是一種即可行又靈活的解決方案。

1.解壓 initrd

# file initrd.`uname –r`.img (察看格式,不同的linux作業系統,這個檔案格式也有不同,這個檔案格式可能是cpio 也可能是ext2)

如果是cpio格式 :

# mkdir /mnt/tmp

# cd /mnt/tmp

# cpio -idmv 2 壓縮initrd

2.1 mkinitrd

#cd /lib/modules/`uname -r`

#mkinitrd /tmp/initrd.`uname -r`.img   `uname -r`

#cd /tmp

#mv initrd.`uname –r`.img initrd.`uname –r`.img.gz(initrd使用gzip壓縮,如果不改名字的話,後面無法解壓縮)

#gunzip initrd.`uname -r`.img.gz

2.2 cpio

#假設當前目錄位於準備好的initrd檔案系統的根目錄下

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

bash# gzip ../initrd.img

2.3  gen_init_cpio

獲取 gen_init_cpio,工具 ,gen_init_cpio是編譯核心時得到的,

在核心源**的 usr 目錄下,我們可以通過 以下步驟獲取它,進入核心源** 執行 :

# make menuconfig

# make usr/

這樣即編譯好gen_init_cpio,

gen_initramfs_list.sh 在核心源**的 script 目錄下,

將這兩個 檔案 copy 到 /tmp 目錄下,/tmp/initrd 為 解壓好的 initrd 目錄,執行以下命令 製作initrd :

# gen_initramfs_list.sh initrd/ > filelist

# gen_init_cpio filelist >initrd.img

# gzip initrd.img

# mv initrd.img initrd-'uname –r』.img

只有用這個方式壓縮的initrd ,在linux系統重啟的時候才能 一正確的檔案格式 boot 起來,也可以用

這種方式修改安裝光碟的initrd檔案 然後 進行系統安裝。

3. 如何在 initrd 中新增新的驅動,以 ahci.ko 為例

3.1 gen_init_cpio

# cp initrd-『uname –r『.img /tmp/initrd;cd /tmp/initrd

#cpio –ivdum < initrd-『uname –r』.img;

# mv initrd-『uname –r』.img ../

#cd /tmp/initrd

#vim init加上一行 insmod /lib/ahci.ko

#cp ahci.ko lib/

#cd  /tmp

# gen_initramfs_list.sh initrd/ > filelist

# gen_init_cpio filelist >initrd.img

# gzip initrd.img

# mv initrd.img initrd-『uname –r』.img

至此,新的initrd檔案initrd-『uname –r』.img中就包含了ahci的驅動程式了 ,這種方式是最簡單有效的。

3.2 mkinitrd

(1) add 「alias scsi_hostadapter ahci」 at /etc/modprobe.conf

(2) copy ahci.ko to 「/lib/module/$(kernel-version)」/kernel/drivers/scsi」

(3) mkinitrd initrd.img 『uname -r』

至此,新的initrd檔案initrd-『uname –r』.img中就包含了ahci的驅動程式了 .

ubuntu 解壓和打包

tar 解包 tar xvf filename.tar 打包 tar cvf filename.tar dirname 注 tar是打包,不是壓縮!gz解壓1 gunzip filename.gz 解壓2 gzip d filename.gz 壓縮 gzip filename tar.gz 和 tg...

initramfs 檔案系統打包進核心

把initramfs編譯到核心裡面去 使用initramfs最簡單的方式,莫過於用已經做好的cpio.gz把kernel裡面那個空的給換掉。這是2.6 kernel天生支援的,所以,你不用做什麼特殊的設定。kernel的config option裡面有一項config initramfs sourc...

linux 命令 解壓和打包

1.gzip壓縮 gzip a.txt 2.解壓 gunzip a.txt.gz gzip d a.txt.gz 3.bzip2壓縮 bzip2 a 4.解壓 bunzip2 a.bz2 bzip2 d a.bz2 5.將當前目錄的檔案打包 tar cvf bak.tar 將 etc passwor...