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。

相關文章
相關標籤/搜索