U盘中打造属于自己的Linux (三) :内核编译(下)initrd简介与内核配置
作者: 西玛哒 分类: IT悟语, Linux, 老西常谈 标签: Linux 评论: 0
# 至此 我们已经搞定了内核部分,下面我们就要对文件系统开刀 先来看一下我们目前的进度:
/mnt/usb:
boot/ grub/ grub.conf ; menu.lst ; stage **
usblinux.kernel
可以看出 我们满足grub的启动需求就只剩下
initrd XXXXXXXX
这个参数了
那么 initrd是什么呢?
简单说,就是一个临时文件系统,它以一个压缩包 或叫镜像的形式存在
系统启动时 这个镜像将自己解压到内存中,并且提供一个init() 函数接口给内核
从而使内核调用这个文件系统中的文件 完成初始化工作 为用户提供shell环境。
我们不关心历史 Linux的技术革新换代 关于启动的方式也发生了很多变化,对于Linux 2.6的内核,initrd有很多新的特性,
详细可以点击:
Linux2.6 内核的 Initrd 机制解析
了解详情。
说了这么多 ,initrd就是一个压缩包 里面是一个包含了配置好了的 init 的小型文件系统,
我们的BootLoader执行了加载(其实也是解压)内核 ,识别硬件的后, 将把initrd 解压,
在start_kernle () 后 会寻找执行initrd中的 init()
因此 initrd是重要的一环,关系到系统内核能否启动。
(引用: 朱明 Linux教程 2009 06 启动与关闭 16)
了解了initrd的作用 再看看initrd的组成:
2.6内核的initrd一般都是 cpio 格式的 这种initrd的格式又被称为 iniramfs。
CPIO:Linux下的一种新的内核启动镜像所附带的虚拟磁盘格式。他与传统的Image格式比较而言有一些改进,主要体现在打包速度和启动引导方式上。
cpio 可以从 cpio 或 tar 格式的归档包中存入和读取文件, 归档包是一种包含其他文件和有关信息的文件。 有关信息包括:文件名, 属主, 时标(timestamp), 和访问权限。 归档包可以是磁盘上的 其他文件, 也可以是磁带或管道.
(以上内容来自wikipedia)
initramfs 是rootfs的一种,有一些新特性,这里不做详细介绍,这里有一篇
!!参考文献
是后文参考的基础,强烈建议大家自己看一下。
其实 在上一节内核编译的过程中,我们的内核源码已经为我们形成了一个initramfs 它默认和我们生成的bzImage绑定在了一起,因此我们并未看到它的存在,下面我们看一下内核中的相关配置。
首先我们要确保一下参数:
Executable file formats
–> kernel support for ELF binaries 选中则可使内核支持ELF格式的可执行文件。
File systems —>
Pseudo filesystems —>
/proc file system support /
Virtual memory file system support (former shm fs) 支持虚拟文件系统
按照默认配置,编译2.6版本的linux内核时,编译系统总会创建initramfs,然后把它与编译好的内核连接在一起。内核源代码树中的usr目录就是专门用于构建内核中的initramfs的,其中的initramfs_data.cpio.gz文件就是initramfs。缺省情况下,initramfs是空的,X86架构下的文件大小是134个字节。
我们在之后的配置中,需要分析理解initrd的构成,因此我们需要独立的initrd 也就是 grub.conf中:
initrd XXXXXXXX
这个参数,因此 我们要修改内核配置,支持独立的内核。
Device Driver –>
Block device 选择
RAMfilesystem and RAMdisk ( initramfs/initrd ) support (支持ram文件)
General Setup –>
initramfs source file(s) 配置项原有的内容清空。
我们在/mnt下
# mkdir initrd
创建一个叫做initrd的文件夹 这是我们之后创建initrd的工作目录
其实我们也可以将上面的 initramfs source file(s) 选项中参数设为/mnt/initrd 在initrd中的文件写完之后编译内核 ,这是内核会自动从initrd文件夹中取出文件 压缩为initrd 但我们不用这种方法 直接用cpio压缩 这样更灵活。
到此 与initrd相关的内核配置就结束了,它的组成 ,形成和使用我们下章再说。
#########################################
其实 到此为止 U盘linux已经可以成功了。
# cp /boot/initrd.img -XXXXX- XXXX /mnt/usb/usblinux.img
由于内核,grub已经到位 我们完全可以吧宿主机的initrd直接拿来使用 是一样的。
修改 grub.conf / menu.lst
initrd usblinux.img
不要忘记 修改grub配置后 要重新安装grub!
用你的U盘引导 OK 你已经可以看到 在一堆加载硬件的提示之后会有:
(initramfs)_
这就是一个内存中的linux 虽然掉电丢失,但常用的操作都完全可以执行 甚至还有vi!
如果你的要求不高 那么恭喜 到此你就已经可以交稿了。
##########################################################
| anyShare分享到: | |
| |





