1 製做最簡單的initramfslinux
1.1 建立initshell
#include <stdio.h>ui
int main()orm
{ip
printf ("\n");內存
printf ("hello world from %s!\n", __FILE__);源碼
while (1) {}it
return 0;io
}form
gcc -static myinit.c -l myinit
1.2 建立initramfs.cpio
mkdir initramfs
mv myinit initramfs/init
find . -print0 | cpio --null -ov --format=newc | gzip -9 > initramfs.cpio
2 建立shell腳本的init
2.1 使用busybox搭建shell運行的環境
第一步,下載busybox源碼
第二步,進入目錄make menuconfig,選擇Build Busybox as a static library
第三步,make
第四步,make install,將會在該目錄下生成_install目錄。
第五步,將_install目錄下的文件都拷貝到1中的initramfs目錄下,而且刪除linuxrc
第六步,shell init的編寫
#! /bin/sh
echo "hello world\n"
exec /bin/sh
3 initramfs加載進內存的兩種方式
第一種,將initramfs直接嵌入到linux kernel中,在kernel中用__initramfs_start和__initramfs_size來獲取它,而後直接unpack;
第二種,將initramfs生成一個單獨的文件,在boot loader的配置文件中告訴boot loader,讓它加載進內存,而後boot loader經過initrd_start和initrd_end參數來告訴內核initramfs在內存中的位置,而後unpack。