1 制作最简单的initramfs
1.1 创建init
#include <stdio.h>
int main()
{
printf (" ");
printf ("hello world from %s! ", __FILE__);
while (1) {}
return 0;
}
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 "
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。