热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>内核研究>

Linux2.4内核和2.6内核对Initrd处理流程

来源: 作者: 时间:2008-03-28 Tag: 点击:

 

image-initrd的处理流程:

 

1. boot loader把内核以及initrd文件加载到内存的特定位置。

 

2. 内核判断initrd的文件格式,如果不是cpio格式,将其作为image-initrd处理。

 

3. 内核将initrd的内容保存在rootfs下的/initrd.image文件中。

 

4. 内核将/initrd.image的内容读入/dev/ram0设备中,也就是读入了一个内存盘中。

 

5. 接着内核以可读写的方式把/dev/ram0设备挂载为原始的根文件系统。

 

6. .如果/dev/ram0被指定为真正的根文件系统,那么内核跳至最后一步正常启动。

 

7. 执行initrd上的/linuxrc文件,linuxrc通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动, 以及加载根文件系统。

 

8. /linuxrc执行完毕,常规根文件系统被挂载

 

9. 如果常规根文件系统存在/initrd目录,那么/dev/ram0将从/移动到/initrd。否则如果/initrd目录不存在, /dev/ram0将被卸载。

 

10. 在常规根文件系统上进行正常启动过程 ,执行/sbin/init。

 

通过上面的流程介绍可知,Linux2.6内核对image-initrd的处理流程同linux2.4内核相比并没有显著的变化, cpio-initrd的处理流程相比于image-initrd的处理流程却有很大的区别,流程非常简单,在后面的源代码分析中,读者更能体会到处理的简捷。

 

cpio-initrd同image-initrd的区别与优势

 

没有找到正式的关于cpio-initrd同image-initrd对比的文献,根据笔者的使用体验以及内核代码的分析,总结出如下三方面的区别,这些区别也正是cpio-initrd的优势所在:cpio-initrd的制作方法更加简单。cpio-initrd的制作非常简单,通过两个命令就可以完成整个制作过程。

 

#假设当前目录位于准备好的initrd文件系统的根目录下:

 

bash# find . | cpio -c -o > ../initrd.img

 

bash# gzip ../initrd.img

 

 

而传统initrd的制作过程比较繁琐,需要如下六个步骤,#假设当前目录位于准备好的initrd文件系统的根目录下:

 

bash# dd if=/dev/zero of=../initrd.img bs=512k count=5

 

bash# mkfs.ext2 -F -m0 ../initrd.img

 

bash# mount -t ext2 -o loop ../initrd.img /mnt

 

bash# cp -r * /mnt

 

bash# umount /mnt

 

bash# gzip -9 ../initrd.img




相关文章:
精通initramfs构建step by step
Linux利用kexec迅速切换内核
进程上下文VS中断上下文
内核通知链 学习笔记
linux spi子系统驱动分析
menuconfig 配置选项
《Linux操作系统内核实习》之练习一
udev详解
什么叫微内核,宏内核?
Linux 信号signal处理机制
开发简单的 Linux2.6 内核模块
删除内核的perl脚本
Linux2.6内核usb gadget驱动移植
GCC hacks in the Linux kernel
iomem
kernel学习的想法
让自己的驱动支持udev
linux内核编译步骤
内核的等待队列
Linux内核wait_queue深入分析
升级和删除内核
SD卡驱动分析2
Linux Kernel VDSO本地权限提升漏洞
内核中的TCP的追踪分析-15-TCP(IPV4)的客户端与
linux 2.6内核可加载模块的编译
内核模块HelloWorld
在环回接口上发送一个数据报
ARP初始化
1分钟编译FreeBSD内核
linux设备模型之uart驱动架构分析