initrd和initramfs的区别

Linux启动流程 initrd与initramfs的区别 Linux启动流程 initrd与initramfs的区别,以前做的一个组内交流活动ppt 立即下载

initrd和initramfs的区别


Linux内核在初始化之后会执行init进程,而init进程会挂载我们的根文件系统,但由于init程序也是在根文件系统上的,所以这就有了悖论。Linux采用两步走的方法来解决这个问题。Linux2.6版以前的方法是:除了内核vmlinuz之外还有一个独立的initrd.img映像文件,其实它就是一个文件系统映像,linux内核在初始化后会mount initrd.img作为一个临时的根文件系统,而init进程就是在initrd.img里的,然后init进程会挂载真正的根文件系统,然后umount initrd.img。但Linux2.6内核的实现方式却不太一样,虽然完成的功能是一样的。Linux2.6采用initramfs。initramfs:init ram filesystem,它是一个cpio格式的内存文件系统,制作的方法有两个,一个是http://blog.youkuaiyun.com/htttw/article/details/7215858介绍的,但这样做出来的initramfs是和内核vmlinuz分开的,因此我们需要在grub里写上initramfs的路径。而另一种方法是把内核和initramfs制作在一起成为一个文件,方法是在linux源码make menuconfig,然后General setup-->选择Initial RAM filesystem and RAM disk (initramfs/initrd) support,然后在Initramfs source file(s)里输入我们的initramfs目录,然后make bzImage。这种方法做出来的内核就只有一个文件,不需要指定initramfs了。


下面我们依次介绍:

实验一:制作传统的initrd

1.

静态编译Busybox,生成_install目录,具体编译方法参考:http://blog.youkuaiyun.com/htttw/article/details/7215858的前半部分


2.

mkdir ~/ramdisk

cd ramdisk

首先创建一个映像,他就是最终的initrd:

dd if=/dev/zero of=ramdisk bs=1k count=8000

以上命令创建一个8M的ramdisk映像


3.

然后格式化成ext3格式:

mkfs.ext2 -j ramdisk

然后按“y”


4.

然后挂载:

sudo mount ramdisk /mnt -o loop


5.

然后复制busybox下的_install目录到/mnt下

sudo cp -R busybox/_install /mnt


6.

然后创建必要的目录,后面就和http://blog.youkuaiyun.com/htttw/article/details/7215858的“上面只是准备工作,下面才开始好玩了”后面是一样的,一直到创建init链接:ln -sv bin/busybox init之后

注意:现在我们所有的操作都是在/mnt里进行的,即在第二步生成的ramdisk里


6.

卸载ramdisk:

sudo umount /mnt


7.

copy到/boot下,准备测试

sudo cp ramdisk /boot/ramdisk


8.

重启,进入grub命令模式,指定linux和initrd进行测试,具体参考:http://blog.youkuaiyun.com/htttw/article/details/7215858的最。如果一切顺利,最后我们会进入Busybox。




实验二:制作现代的initramfs:

上面说过了,制作现代的initramfs有两种方法,第一种就是http://blog.youkuaiyun.com/htttw/article/details/7215858介绍的,下面介绍第二种,即在make menuconfig里指定:

1.

准备好_install目录,然后创建必要的文件,假设是ramfs目录


2.

在make menuconfig里指定Initramfs source file(s)的路径是第一步的ramfs,然后重新编译内核:make bzImage


3.

测试,和上面方法是一样的,不过不用指定initrd了,因为内核和initramfs是编译在一起的,最后我们会进入Busybox。


这里插一句,我们完全可以自己写init进程,只要替换_install目录里的init就可以了~~

另外,这里多加一个小实验,模拟ramfs的挂载与卸载过程:

首先准备好一个busybox的ramdisk,我们把它作为真正的根文件系统

然后把它copy到我们自己做的ramfs的/root/下,并修改ramfs的etc/init.d/rcS如下:

#!/bin/sh
mount -a
mount /root/ramdisk /mnt
exec switch_root /mnt /sbin/init

这样最终就mount进我们的根文件系统里了。


完成!


通义千问AI模型对接飞书机器人-集成飞书机器人(2-2) http请求地址上一篇百炼平台配置的应用地址。 阅读详情

相关推荐

vtk相机_分别用 VTK 体绘制和面绘制来实现医学图像三维重建;

序言,VTK介绍:VTK 全称为 The Visualization Toolkit (可视化工具),是一个开源、跨平台、自由获取、支持并行计算的图形应用函数;拥有3D 渲染的最新工具、提供3D交互模式以及2D绘图等。VTK 包含一个C++类库,目前提供了众多语言接口,例如 Java、Python、TCL;在三维函数库OpenGL 的基础上采用面向对象设计方法发展起来图形学基本概念和数据...

weixin_39665302的博客 689

关于initrd和initramfs

一、概念 什么是initrd? initrd的解释是initialized RAM disk,就是启动的时候由uboot来初始化内存,当做disk来使用。在uboot启动的时候, uboot会将存储介质中(如Flash)的initrd文件加载到内存,内核启动时会在访问挂载的根文件系统前先访问该内存中的 initrd文件系统。在uboot配置了initrd的情况下,文件系统启动被分成两个阶段,第一阶段先执行initrd文件系统中 的"某个可执行文件"(linuxrc或init,下面会讲到具体会执行哪一个),完

u012787604的博客 6416

台达PLC DIAdesigner-AX 编程实战:从安装到通信配置

本文详细介绍了台达PLC DIAdesigner-AX编程的实战操作,从软件安装、项目创建到通信配置的全流程。重点讲解了TCP/IP通信设置、库文件管理及常见错误处理,帮助工程师快速掌握台达PLC编程技巧,提升工业自动化项目的开发效率。

weixin_29215391的博客 531

linux 内核启动Initramfs与initrd 及其挂载

linux 内核启动Initramfs与initrd 及其挂载

kwdecsdn的博客 5327

银河麒麟高级服务器操作系统V10SP2(X86)PXE无人值守批量部署实战指南

本文详细介绍了银河麒麟高级服务器操作系统V10SP2(X86)PXE无人值守批量部署的实战指南。通过PXE网络引导技术,实现全自动化、高效率的系统部署,特别适用于企业级数据中心和国产化替代项目。文章涵盖基础环境准备、关键服务配置、Kickstart高级定制及部署测试等核心内容,帮助用户快速掌握批量部署技巧。

weixin_42525637的博客 383

地图坐标系大全:常用地图坐标系详解与转换指南

地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点,使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式,因此会有不同的坐标系参数,不同的坐标系之间也需要进行坐标转换。在地图制图、导航、GIS等领域中,地图坐标系是一个非常重要的概念。

weixin_39888010的博客 1万+

Linux文件系统映像:Initranfs 和 Initrd

initramfs 和 initrd 介绍   在/boot目录下,一般都有一个/boot/initrd.img文件或一个/boot/initramfs.img文件。   现在有两个问题。第一个问题就是为什么要有 initrd 或者 initramfs?答案是,为了减小 Linux 内核(Kernel)的大小。Linux内核在初始化之后会执行init进程,而init进程会挂载根文件系统,但由于init程序也是在根文件系统上的,所以这就有了悖论。Linux采用两步走的方法来解决这个问题。Linux2.6版以前

最忆是江南的博客 2364

双内核架构 Xenomai 4 安装教程

双内核 Xenomai 4 安装指南

^_^ 4471

initrd与initramfs

最近在着手给Sparrow设计一个简单的ram文件系统,想借鉴一下Linux的思路。发现对initrd和initramfs两个概念搞不太清楚,恍惚觉得它们也都是内存文件系统,但又说不清楚其间的区别。今天特意查了一下,做个总结。 的确,它们的相同之处在于,都是用于内核启动阶段的临时内存文件系统。比较一下,主要有这样几点区别: 1. Initrd本身是一个ram disk,是一个虚拟盘的概念,被挂

-第二月-的专栏 1316

【Unity程序技巧】Unity中单例模式管理器

单例模式(Singleton Pattern)是 最简单的设计模式之一

秩沅 1659

17|CI/CD 集成与质量门禁:让精准测试进入发布流水线

本文讲解精准测试如何接入 CI/CD 流水线,并通过质量门禁辅助发布决策。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 68

Linux内核启动:深入理解Initramfs与Initrd机制

initramfs/├── bin/├── sbin/├── dev/│ └── null├── proc/├── sys/├── lib/├── etc/└── initInitramfs和initrd都是Linux内核启动过程中的重要组件,它们解决了现代计算机系统中根文件系统访问的复杂性问题。虽然initrd在历史上发挥了重要作用,但initramfs以其更简洁的设计和更好的性能逐渐成为主流选择。

weixin_49520696的博客 1724

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

initramfs与initrd的区别

链接入内核的initramfs文件在linux-2.6.24/usr/initramfs_data.cpio.gz。

IT张先生 664

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

initramfs 深入理解, 以及initramfs与initrd的区别

initramfs概述 initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩。但是目前initramfs只支持cpio包格式,它会被populate_rootfs->unpack_to_rootfs(&__initramfs_start, &__initramfs_end - &__initramfs_start, 0)函数(解压缩、)解析、安装。

石头的专栏 1301

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

initramfs与initrd区别

关于initramfs initramfs概述 initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩。但是目前initramfs只支持cpio包格式,它 会被populate_rootfs->unpack_to_rootfs(&__initramfs_start, &__initramfs_end - &__initramfs_start, 0)

kyliner1234的专栏 1360

initrd与initramfs的区别

boot loader装入kernel, 然后kernel需要执行/sbin/init, 读取 这个文件就必须先mount根文件系统, 早期是通过启动时的root= 参数告诉内核根文件系统在哪个设备上,  随着硬件和技术的发展, 现在根文件系统可能位于一个网络存储如NFS上, 可能由于RAID而 散布于多个设备上, 可能位于一个加密设备上需要提供用户名和密码, 这时root=参数就显得不

findstr的专栏 2197

initramfs下启动linux_《Linux启动过程分析》之区别Initramfs与initrd

https://blog.csdn.net/tankai19880619/article/details/16885615之前《Linux启动过程分析》内核挂载根文件系统一文,分析的rootfs、其实就是解决了Linux的VFS架构下初始挂载点的创建问题。下边说的Initramfs/initrd则是填充(仅仅是释放文件到rootfs根目录)/扩充(通过挂载其他文件系统类型到rootfs指定目录)r...

weixin_30724041的博客 299

ramdisk initrd ramfs initramfs区别与联系

问题: 当Linux内核启动时,必须找到并执行第一个用户程序,通常是init。用户程序存放在文件系统,故Linux必须找到并挂载第一个文件系统。 通常,可用的文件系统都列在/etc/fstab,所以mount可以找到它们。但是/etc/fstab本身存在与文件系统中。因此,这类似鸡生蛋蛋生鸡的问题。 为解决该问题,内核开发者建立了内核命令列表选项root=,用来制定root文件系统存在于哪个

瑜伽山神的博客 5888

《Linux启动过程分析》之区别Initramfs与initrd

一、简介 1.initrd   在早期的linux系统中,一般只有硬盘或者软盘被用来作为linux根文件系统的存储设备,因此也就很容易把这些设备的驱动程序集成到内核中。但是现在的嵌入式系统中可能将根文件系统保存到各种存储设备上,包括scsi、sata,u-disk等等。因此把这些设备的驱动代码全部编译到内核中显然就不是很方便。   在内核模块自动加载机制udev中,我们看到利用udevd可以

程序改变生活 2万+
上一篇: 配置Samba
下一篇: Ubuntu配置嵌入式交叉编译环境
htttw
博客等级 码龄18年 378粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值