Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1837113
  • 博文数量: 343
  • 博客积分: 10342
  • 博客等级: 上将
  • 技术积分: 2892
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 12:34
个人简介

你必须非常努力,才能看起来毫不费力!

文章存档

2012年(3)

2011年(5)

2010年(2)

2009年(40)

2008年(293)

分类: LINUX

2008-08-16 09:34:08

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的运行过程。

      

阅读(888) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~