Chinaunix首页 | 论坛 | 博客
  • 博客访问: 131908
  • 博文数量: 24
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-14 15:19
文章分类

全部博文(24)

文章存档

2014年(6)

2008年(3)

2007年(15)

我的朋友

分类: LINUX

2007-06-20 15:05:35

1.  前言

Initrd是什么?它究竟是什么东西?

2Initrd 初级相关

标准的答案是:initrdlinux在系统引导过程中使用的一个临时的根文件系统,用来支持两阶段的引导过程。

再白话一点,initrd就是一个带有根文件系统的虚拟RAM盘,里面包含了根目录‘/’,以及其他的目录,比如:bindevprocsbinsyslinux启动时必须的目录,以及在bin目录下加入了一下必须的可执行命令。

PC或者服务器linux内核使用这个initrd来挂载真正的根文件系统,然后将此initrd从内存中卸掉,这种情况下initrd其实就是一个过渡使用的东西。 当然也可以不卸载这个initrd,直接将其作为根文件系统使用,这当然是在没有硬盘的情况下了,这种情况多用在没有磁盘的超轻量级的嵌入式系统。 其实现在的大多数嵌入式系统也是有自己的磁盘的,所以,initrd在现在大多数的嵌入式系统中也作过渡使用。

 

3Initrd的引导过程

       ‘第二阶段引导程序’,常用的是grub将内核解压缩并拷贝到内存中,然后内核接管了CPU开始执行,然后内核调用init()函数,注意,此init函数并不是后来的init进程!!!然后内核调用函数initrd_load()来在内存中加载initrd根文件系统。Initrd_load()函数又调用了一些其他的函数来为RAM磁盘分配空间,并计算CRC等操作。然后对RAM磁盘进行解压,并将其加载到内存中。现在,内存中就有了initrd的映象。

       然后内核会调用mount_root()函数来创建真正的跟分区文件系统,然后调用sys_mount()函数来加载真正的根文件系统,然后chdir到这个真正的根文件系统中。

       最后,init函数调用run_init_process函数,利用execve来启动init进程,从而进入init的运行过程。

      

阅读(3328) | 评论(0) | 转发(0) |
0

上一篇:Linux系统引导过程详解

下一篇:dup2 纪念

给主人留下些什么吧!~~