• initial ram disk


    1 什么是initial ram disk

    它就是一个做好了的文件系统,其存储空间是ram。在kernel启动的第一个阶段,会被mount成根文件系统。

    2 为什么需要initial ram disk

    第一,为了保证kernel image的大小,因此把modules放在initial ram disk中存放。在系统启动的时候再动态加载;

    第二,为了对真正装载了根文件系统的外部存储设备进行初始化,等其完全可用了,再把根文件系统切换过去。要让根文件系统能够正常工作起来,必须要准备好环境,然后mount它。

    3 linux启动时必须要initial ram disk吗?

    也可以用initramfs。

    4 debian启动时需要initial ram disk吗?

    需要。

    5 initrd.img里面的内容

    5.1 用户空间使用的一些工具f

    比如/bin、/sbin下面的命令等。

    5.2 initrd.img的解压

    这是一个gzip文件,所以用gzip命令解压,gzip -cd >initrd.ext2

    这里-c是把输出重定向到标准输出,d是decompress。

    然后生成的initrd.ext2是一个cpio文件,直接用cpio -i <initrd.ext2就可以了。

    解压的第二种方法:

    zcat initrd.img | cpio -id

    5.3 一些内核中的模块

    动态链接库,比如libm.so.6、librt.so.1等。

    6 为自己的内核制作initrd.image

    6.1 命令

    制作一个根文件系统的目录结构,里面放入各种需要的文件。然后执行下面的命令:

    find . |  cpio -H newc --create  | gzip -9 > ../initrd.img

    6.2 创建最简单的initrd.image

    这个initrd.image中只有两个文件:

    /dev/console和init文件。

    6.2.1 创建myinit

    创建文件myinit.c

    #include <stdio.h>

    int main()

    {

        printf (" ");

        printf ("hello world from %s! ", __FILE__);

        while (1) {}

        return 0;

    }

    gcc -static myinit.c -l myinit

    6.2.2 创建目录结构并且生成initrd.image.gz文件

    mkdir initrd

    mkdir initrd/sbin

    cp myinit initrd/sbin/init

    cd initrd

    fakeroot

    mkdir -p dev

    mknod dev/console c 5 1

    chown -R root sbin

    genext2fs -d . -b 1024 ../initrd.image

    exit

    cd ..

    cat initrd.image | gzip > initrd.image.gz

    mv initrd.image.gz initrd.image

    使用initial ram disk的时候,要显式的指定root device,即在kernel command line上显式的指定"root=/dev/ram0",否则启动的时候会出错。

    使用该ext2类型的image时,编译内核时要打开对ext2文件系统的支持,否则识别不了。

  • 相关阅读:
    百度brpc 压测工具rpc_press解析
    Reactor反应器模式 (epoll)
    hive和hbase的区别
    Hive和HBase
    入门HBase,看这一篇就够了
    Docker保存修改后的镜像
    怎样将本地文件上传到docker容器
    Docker 安装tomcat访问空白页问题解决办法
    Centos中查看系统信息的常用命令
    Docker 镜像加速
  • 原文地址:https://www.cnblogs.com/hustdc/p/8136088.html
Copyright © 2020-2023  润新知