將initramfs打包進內核
如果我們有一個已經做好的cpio格式的initramfs,可以在內核編譯時直接編譯進內核。
在將init程序打包進內核中,我們在內核配置參數中的initramfs sources配置項下輸入構建initramfs的目錄路徑。
其實我們也可以直接輸出現成的initramfs的文件名,這樣在內核編譯時,就可以把它編譯進內核了。
使用這種方法,有兩點需要注意:
(1)cpio文件不能壓縮。一般作為initrd的cpio文件都經過了壓縮,所以編譯前需要先把壓縮過的文件解壓。
(2)cpio文件的後綴名必須是 .cpio。內核編譯通過 .cpio的後綴名來識別此文件是cpio打包文件,而其他文件後綴名則會被認為是initramfs構建的描述文件(關於描述文件,下面後詳細說明)。
用描述文件構建initramfs
用內核編譯工具構建initramfs的第三種方法是使用描述文件。
在內核配置參數中的initramfs sources配置項下可以輸入initramfs構建描述文件的文件名,內核編譯工具根據描述文件完成initramfs的構建。
描述文件的語法格式的說明如下:
# a comment
file
dir
nod
slink
pipe
sock
name of the file/dir/nod/etc in the archive
location of the file in the current filesystem
link target
mode/permissions of the file
user id (0=root)
group id (0=root)
device type (b=block, c=character)
major number of nod
minor number of nod
例子: 我們用描述文件的方式,構建將init程序打包進內核中的hello world的initramfs。
hello-init.desp:
dir /dev 0755 0 0
nod /dev/console 0600 0 0 c 5 1
file /init /home/wyk/initramfs-test/hello_static 0755 0 0
在內核配置項initramfs sources中指定描述文件hello-init.desp,編譯內核時就會生成hello world的initramfs,運行效果與第一節用指定構建目錄的方法構建的initramfs的完全相同。