initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前,boot loader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。在 boot loader 配置了 initrd 的情况下,内核启动被分成了两个阶段,第一阶段先执行 initrd 文件系统中的"init or linuxrc",完成加载驱动模块等任务,第二阶段才会执行真正的根文件系统中的 /sbin/init, Linux2.6既支持cpio-initrd,也支持image-initrd,但是cpio-initrd有着更大的优势,在使用中我们应该优先 考虑使用cpio格式的initrd.

Initrd 的主要用途
linux 发行版必须适应各种不同的硬件架构,将所有的驱动编译进内核是不现实的,initrd 技术是解决该问题的关键技术。Linux 发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的 initrd,是一种即可行又灵活的解决方案。

1.解压 initrd

# file initrd.`uname –r`.img (察看格式,不同的linux操作系统,这个文件格式也有不同,这个文件格式可能是cpio 也可能是ext2)

如果是cpio格式 :

# mkdir /mnt/tmp
# cd /mnt/tmp
# cpio -idmv </tmp/initrd.`uname -r`.img

2 压缩initrd
2.1 mkinitrd

#cd /lib/modules/`uname -r`
#mkinitrd /tmp/initrd.`uname -r`.img   `uname -r`
#cd /tmp
#mv initrd.`uname –r`.img initrd.`uname –r`.img.gz(initrd使用gzip压缩,如果不改名字的话,后面无法解压缩)
#gunzip initrd.`uname -r`.img.gz

2.2 cpio
#假设当前目录位于准备好的initrd文件系统的根目录下
bash# find . | cpio -c -o > ../initrd.img
bash# gzip ../initrd.img

2.3  gen_init_cpio
获取 gen_init_cpio,工具 ,gen_init_cpio是编译内核时得到的,
在内核源代码的 usr 目录下,我们可以通过 以下步骤获取它,进入内核源代码 执行 :
# make menuconfig
# make usr/
这样即编译好gen_init_cpio,
gen_initramfs_list.sh 在内核源代码的 script 目录下,
将这两个 文件 copy 到 /tmp 目录下,/tmp/initrd 为 解压好的 initrd 目录,执行以下命令 制作initrd :

# gen_initramfs_list.sh initrd/ > filelist
# gen_init_cpio filelist >initrd.img
# gzip initrd.img
# mv initrd.img initrd-'uname –r’.img

只有用这个方式压缩的initrd ,在Linux系统重启的时候才能 一正确的文件格式 boot 起来,也可以用
这种方式修改安装光盘的initrd文件 然后 进行系统安装。

3. 如何在 initrd 中添加新的驱动,以 ahci.ko 为例
3.1 gen_init_cpio

# cp initrd-‘uname –r‘.img /tmp/initrd;cd /tmp/initrd
#cpio –ivdum < initrd-‘uname –r’.img;
# mv initrd-‘uname –r’.img ../
#cd /tmp/initrd
#vim init加上一行 insmod /lib/ahci.ko
#cp ahci.ko lib/
#cd  /tmp
# gen_initramfs_list.sh initrd/ > filelist
# gen_init_cpio filelist >initrd.img
# gzip initrd.img
# mv initrd.img initrd-‘uname –r’.img

至此,新的initrd文件initrd-‘uname –r’.img中就包含了ahci的驱动程序了 ,这种方式是最简单有效的。

3.2 mkinitrd

(1) Add “alias scsi_hostadapter ahci” at /etc/modprobe.conf
(2) copy ahci.ko to “/lib/module/$(kernel-version)”/kernel/drivers/scsi”
(3) mkinitrd initrd.img ‘uname -r’

至此,新的initrd文件initrd-‘uname –r’.img中就包含了ahci的驱动程序了 .

initramfs 的解压和打包相关推荐

  1. dpkg命令用法、Ubuntu下deb包的解压、打包、安装、卸载及常用命令参数

    dpkg命令的用法 不带图简装:https://blog.csdn.net/wanghuohuo13/article/details/78916821?ops_request_misc=&re ...

  2. linux 如何对文件解压或打包压缩

    tar命令用与对文件打包压缩或解压,格式: tar [选项] [文件] 打包并压缩文件: tar -czvf  压缩包名 .tar.gz 解压并展开压缩包: tar -xzvf  压缩包名 .tar. ...

  3. 常用压缩,解压与打包

    常用压缩格式: .zip .zg .bz2 .tar.gz .tar.bz2 .zip格式压缩 zip 压缩文件名 源文件 #压缩文件 注:压缩文件名写.zip后缀是为了标记该文件的压缩类型,方便管理 ...

  4. linux的initrd.img的解压和打包

    initrd.img解压: [root@CentOS5 ~]# mkdir /usr/src/initrd [root@CentOS5 ~]# cp /boot/initrd-2.6.18-308.e ...

  5. Android解压/重新打包system.img

    原址 android4.0之后,system.img文件格式为ext4,如果需要修改system.img文件,该如何做:  1.ubuntu系统,准备工具make_ext4fs.simg2img.mk ...

  6. Linux 压缩、解压、打包操作

    文章目录 tar 打包/压缩 解压 gzip 压缩 解压 zip 压缩 解压 总结 在Linux 中,解压.压缩.打包是日常会很频繁用到的几个操作,但是因为参数很多,没有记忆点,加上压缩文件的类型很多 ...

  7. linux打包解压工具,打包压缩、解压缩工具详解

    本文旨在学习打包,压缩,解压缩.学习使用tar.gzip/gunzip/zcat.bzip2/bunzip2/bzcat.xz/unxz/xzcat.zip/unzip.cpio等命令的使用. 前言: ...

  8. tar包解压和打包方法

    1.打包tar tar cvf haha.tar /root/panfeilong.txt /root/long/ 2.打包 tar.gz tar zcvf hahah.tar.gz /root/pa ...

  9. Linux 压缩、解压、打包详解

    在Linux 中,解压.压缩.打包是日常会很频繁用到的几个操作,但是因为参数很多,没有记忆点,加上压缩文件的类型很多,如果不经常使用,是真的容易忘记. <!-- more --> 所以这篇 ...

最新文章

  1. biztalk 2010 映射
  2. ubuntu下创建图标
  3. bzoj 4552: [Tjoi2016Heoi2016]排序
  4. java中的Servlet
  5. 客户端分析php代码,分享:一个简单的全网解析客户端代码。
  6. lamp 测试mysql_搭建LAMP测试环境
  7. Jsoup爬虫并解析网页
  8. python自动答题助手_GitHub - SmileSmith/autoAnswer: 客户端答题工具,集成3个答题助手,包含AI自动答题,手动答题,adb控制多台手机等...
  9. 保存为UTF-8格式的Txt文件
  10. IQtree:使用 SNP 数据(vcf file)构建玉米群体的 无根 系统发育树
  11. 重改破解易支付码支付V5.0源码
  12. 在Word中如何设置分级标题?
  13. 拳王虚拟项目公社:2020已过半,请不要再混日子了!
  14. 国家取消职称英语与计算机,全国职称英语考试取消
  15. 【过关斩将】如何在工作中提高沟通能力?
  16. [WinError 10054] 远程主机强迫关闭了一个现有的连接
  17. 守望先锋打开黑屏闪退,已经重装过好几次都没用? 真正原因在这里
  18. PSPACE完全性学习笔记
  19. 系统学习----Linux网络管理
  20. Kubernetes学习(1)-----搭建kubernetes环境

热门文章

  1. c语言蜂鸣器放音乐程序,单片机按键蜂鸣器演奏歌曲功能C程序
  2. 平面向量内积坐标公式推导_平面向量内积的坐标表示.ppt
  3. 如何搭建一个本地网站
  4. 基于STM32的老人出行小助手设计与实现(OneNet)
  5. C# 关于播放音频文件和自动输入时间截取的方法
  6. 《基于交替最小二乘法的Spark个性化影片推荐系统》CSCD
  7. 浅析高层办公楼宇消防安全管理机制
  8. 过滤器(Filter)和拦截器(Interceptor)的区别
  9. 抗衰老的12把金钥匙
  10. artDialog使用