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。