linux打开ini文件(linux initrd启动)

作者:电脑培训网 2024-04-29 23:56:48 356

本文主要介绍Linux系统上打开Initrd文件系统的方法。initrd是在RAM中创建的临时文件系统,用于激活系统并加载系统。有需要的朋友可以参考一下.16-02-26初始RAM盘

Linux初始RAM盘是系统启动过程中挂载的临时根文件系统,用于支持两阶段启动过程。initrd文件包含各种可执行程序和驱动程序,可用于挂载实际的根文件系统,然后卸载initrdRAM磁盘并释放内存。在许多嵌入式Linux系统中,initrd是最终的根文件系统。本文将探讨Linux2.6的初始RAM磁盘,包括如何创建它以及如何在Linux内核中使用它。

linux打开ini文件(linux initrd启动)

什么是初始RAM盘

初始RAM磁盘是在实际根文件系统可用之前安装在系统上的初始根文件系统。initrd与内核捆绑在一起,并作为内核引导过程的一部分进行加载。然后,内核将使用此initrd文件作为其两阶段引导过程的一部分来加载模块,以便稍后可以使用真实的文件系统并挂载实际的根文件系统。

initrd包含实现此目标所需的最小目录和可执行程序集,例如用于将内核模块加载到内核中的insmod工具。

在桌面或服务器Linux系统中,initrd是一个临时文件系统。它的生命周期很短,只会作为通往真正文件系统的桥梁。在没有存储设备的嵌入式系统中,initrd是永久根文件系统。本文探讨了这两种情况。

initrd开启步骤

我们来看看如何打开initrd。这里我使用的是debian5操作系统。

1.创建目录,将/boot/initrd.img-2.6.18-6-amd64复制到该目录中。

代码如下:

root@192.168.30.68:tmp#mkdirinitrd

root@192.168.30.68:tmp#cdinitrd/

root@192.168.30.68:initrd#ls

root@192.168.30.68:initrd#cp/boot/initrd.img-2.6.18-6-amd64。

root@192.168.30.68:initrd#ls

initrd.img-2.6.18-6-amd642。将initrd文件名更改为.gz文件并解压。

代码如下:

root@192.168.30.68:initrd#fileinitrd.img-2.6.18-6-amd64#发现该文件是gzip压缩文件

initrd.img-2.6.18-6-amd64:gzip压缩数据,来自Unix,最后修改:ThuSep2418:21:402009

root@192.168.30.68:initrd#mvinitrd.img-2.6.18-6-amd64initrd.img-2.6.18-6-amd64.gz

root@192.168.30.68:initrd#文件initrd.img-2.6.18-6-amd64.gz

initrd.img-2.6.18-6-amd64.gz:gzip压缩数据,来自Unix,最后修改:ThuSep2418:21:402009

root@192.168.30.68:initrd#gunzipinitrd.img-2.6.18-6-amd64.gz3。使用file发现解压后的文件是cpid格式,这是一种备份格式。使用cpio,参数'i'代表解压。package和'd'表示需要时自动创建一级目录。

代码如下:

root@192.168.30.68:initrd#文件initrd.img-2.6.18-6-amd64

initrd.img-2.6.18-6-amd64:ASCIIcpio存档

root@192.168.30.68:initrd#cpio-idinitrd.img-2.6.18-6-amd64

32912块

root@192.168.30.68:initrd#ls

binconf等initinitrd.img-2.6.18-6-amd64liblib64sbin脚本

root@192.168.30.68:initrd#rminitrd.img-2.6.18-6-amd64

rm:删除常规文件`initrd.img-2.6.18-6-amd64'?y

root@192.168.30.68:initrd#ls

binconf等initliblib64sbin脚本也可以通过zcat直接读取gzip格式的文件,然后将读取结果通过pipeline传递给cpio进行解码

代码如下:

root@192.168.30.68:initrd#zcatinitrd.img-2.6.18-6-amd64|cpio-id

32912块

root@192.168.30.68:initrd#ls

binconfetcinitinitrd.img-2.6.18-6-amd64liblib64sbinscripts以上是initrd文件打开后的目录结构。当内核开始加载initrd时,还没有系统目录结构。这时候就会首先使用initrd。提供的目录被视为系统的临时目录。

有一个lib目录:存放了很多模块,即当前系统中的所有模块。这意味着该目录中存储的模块都是启动时必须加载的模块。例如,当内核加载Initrd时,initrd会添加相应的网络模块驱动程序,使我们在进入操作系统时能够识别网卡。

代码如下:

root@192.168.30.68:initrd#lsmod|grepbnx2#本地网络驱动

bnx21830480

root@192.168.30.68:initrd#找到.-name'bnx2*'#initrd中bnx2对应的模块

./lib/modules/2.6.18-6-amd64/kernel/drivers/net/bnx2.ko

./lib/固件/bnx2-09-4.0.5.fw

./lib/firmware/bnx2-06-4.0.5.fw如果临时添加最新的网卡,想开机时加载,只需要修改initrd文件内容并打包即可。这比重新安装要好。编译内核或者安装操作系统就方便多了。

下面介绍如何将修改后的initrd文件重新打包。

1、在修改后的文件目录中,使用find列出所有文件,然后将所有列表通过管道传递给cpio命令。cpio使用的参数“c”表示使用新的SVR4可移植格式。“o”表示创建文件。最后使用gzip进行压缩,压缩效率最好为'-9',并使用''导出。

代码如下:

root@192.168.30.68:initrd#ls

binconf等initliblib64sbin脚本

root@192.168.30.68:initrd#查找|cpio-co|gzip-9initrd.img-2.6.18-6-amd64

32884块

root@192.168.30.68:initrd#ls

binconf等initinitrd.img-2.6.18-6-amd64liblib64sbin脚本

root@192.168.30.68:initrd#文件initrd.img-2.6.18-6-amd64

initrd.img-2.6.18-6-amd64:gzip压缩数据,来自Unix,最后修改:2013年5月14日星期二13:50:26,最大压缩2。将文件复制到/boot/。重启机器即可生效。

另外,initrd被内核加载后的引导过程是根据initrd文件中的一个init文件,由其提供的脚本一步步执行的,包括加载物理硬盘上的实际操作系统,其中也由该文件提供。

代码如下:

root@192.168.30.68:initrd#ls

binconf等initliblib64sbin脚本

root@192.168.30.68:initrd#cat初始化

#!/bin/sh代码如下:echo'正在加载,请稍候.'代码如下:

[-d/dev]||mkdir-m0755/dev

[-d/root]||mkdir-m0700/根

[-d/sys]||mkdir/系统

[-d/proc]||mkdir/进程

[-d/tmp]||mkdir/tmp

mkdir-p/var/锁

挂载-tsysfs-onodev,noexec,nosuid无/sys

mount-tproc-onodev,noexec,nosuidnone/proc代码如下:

#请注意,如果udev的脚本,这只会在真实文件系统上变成/dev

#被使用;它们将会是这样,但值得指出

tmpfs_size='10M'

如果[-e/etc/udev/udev.conf];然后

./etc/udev/udev.conf

挂载-ttmpfs-o大小=$tmpfs_size,模式=0755udev/dev

[-e/dev/console]||mknod-m0600/dev/consolec51

[-e/dev/null]||mknod/dev/nullc13

/dev/.initramfs-工具

mkdir/dev/.initramfs代码如下:

#导出dpkg架构

导出DPKG_ARCH=

./conf/arch.conf代码如下:

#设置modprobe环境

exportMODPROBE_OPTIONS='-qb'代码如下:

#导出相关变量

导出根=

导出根延迟=

导出根标志=

导出ROOTFSTYPE=

导出中断=

导出init=/sbin/init

导出安静=n

只读导出=y

……

相关推荐