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 ("\n");

printf ("hello world from %s!\n", __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文件系统的支持,否则识别不了。

initial ram disk的更多相关文章

  1. 借助 RAM disk 技术,加快前端工程打包速度

    背景以 Jenkins 服务器为例,在构建内部的这个项目时,CE 每部署一次服务,最快 6 分钟,最慢将近 13 分钟左右.遇到多个项目并发打包会因为资源占用等问题时间会延长,甚至出现过几次 20 分 ...

  2. RAM disk

    Linux 系统创建RAM disk 参考: https://blog.csdn.net/linuxdashencom/article/details/52319671 https://www.lin ...

  3. initial ram filesystem

    1 制作最简单的initramfs 1.1 创建init #include <stdio.h> int main() { printf ("\n"); printf ( ...

  4. uboot环境配置

    uboot环境配置 通过配置uboot让它在启动过程中从tftp获取内核和设备树,并从在加载内核之后把通过启动参数将"从nfs挂载根文件系统"传入内核.这个配置主要是通过uboot ...

  5. Fedora 24中的日志管理

    Introduction Log files are files that contain messages about the system, including the kernel, servi ...

  6. Linux之RHEL6的开机流程分析

    开机——很多人觉得很简单的事情,只要按下电源开关,然后系统就会自然启动,没有什么需要学习的.其实不然,如果系统没有什么问题,可以正常登陆的时候,当然开机很简单.但更多的时候,我们需要知道当机子不能正常 ...

  7. kvm

    硬件,os,内核模块,用户空间工具,命令行具体参数,日志 [root@localhost ~]# yum install pciutils [root@localhost ~]# lscpu;lspc ...

  8. Linux Default Bootup、Startup、Autoload Configuration file(自启动服务脚本)

    目录 . Linux初始化init系统 . Linux配置文件自动加载过程 1. Linux初始化init系统 Linux初始化init系统在不同操作系统系列下的区别 . RHEL : SysVini ...

  9. devices-list

    转自:https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt LINUX ALLOCATED DEVICES ...

随机推荐

  1. JVM优化(下)

    14.Tomcat8优化之G1牢记收集器的测试结果以及小结: jmeter测试:(1)tomcat未做任何优化:(2)禁用AJP:(3)启用连接池:(4)设置最大线程数1000,初始线程数200:(5 ...

  2. UIScrollView的contentSize、contentOffset和contentInset属性

    IOS中,UIScrollView是可以滚动的视图,其中最常用的UITableView就是继承了UIScrollView. 跟所有的view一样,UIScrollView有一个frame属性,同时,U ...

  3. 笔试算法题(47):简介 - B树 & B+树 & B*树

    B树(B-Tree) 1970年由R. Bayer和E. Mccreight提出的一种适用于外查找的树,一种由BST推广到多叉查找的平衡查找树,由于磁盘的操作速度远小于存储器的读写速度,所以要求在尽量 ...

  4. django+uwsgi+nginx部署(非常详细)

    django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: Ubuntu 16.04.1 LTS (GNU/Linu ...

  5. odoo 权限配置讲解

    今天来讲解一下odoo权限配置的简单讲解,配合公司开发的权限模块的使用,进行odoo权限配置的说明 BaseSecurityExtend 2.0模块 这是公司自主开发的一款针对odoo菜单级别进行可视 ...

  6. java 反射---学习笔记

    一.java的动态性 反射机制 动态编译 动态执行JavaScript代码 动态字节码操作 二.动态语言 动态语言 程序运行时,可以改变程序结构或变量类型,典型的语言:python.ruby.java ...

  7. Jupyter notebook使用笔记

    常用快捷键 For a Cell,   Blue -> selecting. Green -> editing. Esc -> exist edit When the cell is ...

  8. [luoguP1082] 同余方程(扩展欧几里得)

    传送门 ax≡1(mod b) 这个式子就是 a * x % b == 1 % b 相当于 a * x - b * y == 1 只有当 gcd(a,b) == 1 时才有解,也就是说 ax + by ...

  9. 2018/3/14 Hadoop学习笔记(一)

    首先,什么是Hadoop?为什么它是现在大数据处理最热门的框架呢?(正确来说,现在Hadoop是一个生态圈) Hadoop是apache下一套开源的服务框架,它主要的作用就是利用服务器集群,来对海量数 ...

  10. hdu - 1104 Remainder (bfs + 数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=1104 注意这里定义的取模运算和计算机的%是不一样的,这里的取模只会得到非负数. 而%可以得到正数和负数. 所以需 ...