initial ram filesystem

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。

相关文章
相关标签/搜索