什么是 initrd.img

2024-05-15 06:08
文章标签 img initrd

本文主要是介绍什么是 initrd.img,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对我个人而言,学习一个系统的最好的方法就是随着其启动运行的过程一点一点跟进(就好象看一个程序的源码要从main函数或者说从入口函数开始步步跟进)。当然具体的学习过程重点不是找到入口点就OK的。中间还有很多技巧,比如什么时候这个应该跳过一个实现什么时候应该跟进等。这个具体方法就一言难尽了,我也不再多少说了。不多说的两个简单原因:1、正如我开始说的,这个方法也许只适合我。 2、并不是本篇文章的重点。

我前面那么多废话只是想带出我聊聊的的 initrd.img文件,因为它就是系统启动会加载的文件。说 initrd.img文件还会提到另外一个名角---vmlinuz 。vmlinuz 正式 linux的内核,当然这里不是要讨论它。

 

一般来讲大家很容易理解的是这样的:系统内核 vmlinuz被加载到内存后开始提供底层支持,在内核的支持下各种模块,服务等被加载运行。这样当然是大家最容易接受的方式,曾经的linux就是这样的运行的。假设你的硬盘是scsi 接口而你的内核又不支持这种接口时,你的内核就没有办法访问硬盘,当然也没法加载硬盘上的文件系统,怎么办?好办!把内核加入scsi驱动源码然后重新编译出一个新的内核文件替换原来vmlinuz。

需要改变标准内核默认提供支持的例子还有很多,如果每次都需要编译内核就太麻烦了。所以后来的linux就提供了一个灵活的方法来解决这些问题---initrd.img

ininrd.img是什么呢?initrd 的含义是initialized ram disk. ramdisk是用一部分内存模拟成磁盘,让操作系统访问。举个例子,不知道你用过没用过win pe他的衍生版比较有名的就是“深山红叶系统修复光盘”。当使用win pe 启动后会发现你的计算机就算没有硬盘也能在正常运行,其中有个文件系统B:/ 分区,这个分区就是内存模拟的磁盘。

initrd.img文件就是个ramdisk的映像文件(其实是压缩过的,后面会解释)。ram disk是标准内核文件认识的设备(/dev/ram0)文件系统也是标准内核认识的文件系统。内核加载这个ram disk作为根文件系统并开始执行其中的"某个文件"(2.6内核是 init文件)来加载各种模块(支持scsi的驱动就可以放在这里),服务等(这时然后系统就更强大了)。经过一些配置和运行后,就可以去物理磁盘加载真正的root分区了,然后又是一些配置等,最后启动成功。

也就是你只需要定制适合自己的 initrd.img 文件就可以了。这要比重编内核简单多了,省时省事低风险。内核启动过程中具体执行了initrd.img 内的哪些文件和顺序不在本文讨论,下面只讲讲你怎样才能看到 initrd.img的内容。

这个方法是对kernel-2.5之后的版本适用的。因为这之前的initrd.img和之后的格式是不同的。这之后的版本一般被称为cpio-initrd。 initrd.img 是个gz压缩文件,initrd.img改名为initrd.gz能用windows下的winrar或linux下的gunzip解压,解压后会得到一个initrd文件。这个文件就是cpio格式的文件,只能在linux下用cpio命令解压(我没找到在windows下能解药cpio格式的工具,如果你找到了告诉我一下,谢谢) ,执行cpio -i < initrd

这篇只是简单的说了说 initrd.img 的作用,也许有表述的不严谨的地方,还请大家多多指教。

//-------------------------------

引用于:http://blog.csdn.net/chrisniu1984/article/details/3907874

这篇关于什么是 initrd.img的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991014

相关文章

android打包解包boot.img,system.img

原帖地址:http://www.52pojie.cn/thread-488025-1-1.html 转载Mark一下,日后研究 最近工作需要对boot.img,system.img进行破解。顺便将心得分享一下。 我的工作环境是在linux下的。所以工具都是针对linux的。 boot.img破解相关工具: 1、split_boot    perl脚本 2、boot_i

MTK平台AndroidP/Q快速生成dtb.img和dtbo.img(2秒生成)

背景: MTK升级新的Android版本后,无法快速编译dtbo image,当我们修改DWS和PROJECT DTS后验证问题非常麻烦,必须删除out下KERNEL_OBJ才能生成新的dtbo.img,而且必须整编。 所以跟据编译流程,写了下面这个脚本,可以快速生成dtbo和dtb image,可以几秒钟完成 使用方法: (1)将脚本放在工程跟目录 (2)修改脚本开头的几个变量,改为你

Android P/Q MTK平台无依赖打包boot.img

背景:        有时排查版本问题,需要用到替换img的方式来查找问题出现在哪个img,若出现在bootimg,那到底是kernel、DTB 还是ramdisk。此时就需要单独替换其中一个的方式来打包,之前直接make bootimage-nodeps就可以了,但现在发现执行这个命令无效了。下面就分析下新版本如何找到正确的打包命令。 一、找到编译boot的命令 之前Android编译lo

HTML-认识img标签

认识<img>元素 1.   2. src属性既可以是相对路径也可以是绝对路径。记住,如果链接和图形都在相同的网站,用相对路径比较好。 3. alt属性用来告诉用户图片的信息,当图片无法加载时,这些信息会被显示。 4. width和height这对属性用来决定图片的大小。 5. <img>是内联标签,不会换行。 6. <a href=”.....

单独刷system.img踩坑记录

单独刷system.img踩坑记录 集成管理出的daily版本使用的签名和本地编译的签名不一致。 基于daily fastboot单刷system.img, 发现报如下权限问题。 01-01 01:31:16.993 3444 3444 D AndroidRuntime: Shutting down VM01-01 01:31:16.994 3444 3444 E AndroidR

如何缩放C#中的img

在C#中,你可以使用 System.Drawing 命名空间中的 Graphics 类来缩放图像。以下是缩放图像的一般步骤: 加载原始图像:使用 Image.FromFile 或 Bitmap.FromFile 方法加载原始图像。 创建缩放后的图像:创建一个新的 Bitmap 对象,其大小为缩放后的大小。 绘制缩放后的图像:使用 Graphics 对象的 DrawImage 方法将原始

JS-内部爬虫-获取网页内全部`img`标签

获取网页内全部img标签 目录 文章目录 前言推荐阅读代码实现结果展示 前言 通过DOM获取文件内的所有标签 推荐阅读 《JS权威指南》 代码实现 for(let key in document.images){console.log(key);}let context = Array.prototype.map.call(document.images, (eve

Linux kernel中的dts dtsi dtb dtc dtb.img dtbo.img

1、问题 kernel与hsm会设置一些gpio,但是某些gpio会在kernel与hsm侧共同设置,导致最终的设置结果失败,将kernel侧在dts文件中设置的gpio注释掉之后,发现hsm设置gpio时还是失败 2、问题原因 因为dts文件不仅仅会影响kernel镜像,还会影响dtb.img与dtbo.image,因为只烧写了hsm与kernel的镜像,没有重新烧写dtb.img与dtb

img标签的src地址带有中文导致图片解析失败,图片展示不出来

使用srcset属性 在这个例子中,我们包含了一个 srcset 属性,它引用了 MDN 标志高清版本;在高分辨率设备上,它将被优先加载,取代 src 属性中的图像。在支持 srcset 的用户代理中中,src 属性中的图片被作为 1x 候选项。 <img src="xxxx/Picture/1605236485077微信图片_20201113104456.jpg" alt="MDN log

img_Mask

<!DOCTYPE HTML><html lang="en-US"><head><meta charset="gb2312"><title>jQuery鼠标悬浮遮罩显示分享按钮</title><style>.pinit {position:relative;display:inline-block;}.pinit .pinit-overlay {position:absolute;t