文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Using the initial RAM disk (initrd)

Using the initial RAM disk (initrd)

时间:2006-09-14  来源:jiok

Using the initial RAM disk (initrd)
===================================
//使用initrd (在嵌入式系统中我们是比较常见的)
initrd提供通过boot loader导入ramdisk的能力,这个ramdisk能做为一个根文件系统加载并且
程序能从这里运行.然后,一个新的根文件系统能被加载从不同的设备上.以前的根可以移动一个
目录下也可以unmount.
initrd的主要设计目的是允许系统从两个阶段启动,一个加有驱动的小内核,一个是从initrd导入
附加模块.
这个文档给我们一个使用的简短概述,一个详细的启动过程的讨论在[1]中.
操作
---------
当使用initrd时,系统的典型导入如下:
1)导入内核和ramdisk
2)内核转化initrd为一个"正常的ramdisk"并且释放initrd使用的内存.
3)initrd被加载为根读写.
4)/linuxrc被执行,(这是能有效执行的,包括shell脚本,这被运行用uid0(root),并且能做初始化   的所有工作)
5)linuxrc加载"真正的"根文件系统.
6)linuxrc置根文件系统于根目录.
7)一个通常的启动过程(例如:/sbin/init的调用)被完成在根文件系统中.
8)initrd被移除.
注意:改变根文件目录没有包括unmount initrd,因此initrd中的程序是可以继续被访问的. 启动命令行选项
initrd 添加下列新选项:
 initrd=<path>
  导入指定的文件进入初始的RAMdisk,当使用LILO,你必须指定ramdisk image在/etc/lilo.conf
  中,使用initrd配置变量.
 noinitrd
 initrd数据是被保护的,但这不能转换为ramdisk即使一个"正常的"根文件系统被加载.initrd
 数据能读从/dev/initrd.注意这数据在initrd中的是有结构的,并且没有必要是一个文件系统
 映象.这个选项用于debug.
 注意:/dev/initrd是只读的并且只能一次使用,一但最后一个程序把它关闭,所有的数据是释放
 的并且/dev/initrd不能再被打开.
 root=/dev/ram0(没有devfs)
 root=/dev/rd/0(有devfs)
安装
-------------
首先,对于initrd目录必须创建一个根文件系统.
#mkdir /initrd
名字是没有关系的.更多的细节能发现在man page.
如果根文件系统在启动的过程中被创建,根文件系统的创建程序应该创建/initrd目录. 如果initrd没有加载由于某种原因,它的内容仍然是可能被访问,如果下面设备被创建,
(注意:这不能工作如果没有devfs):
# mknod /dev/initrd b 1 250
# chmod 400 /dev/initrd
第二,内核必须在编译过程中包含ramdisk支持和支持ramdisk初始化.至少所有的需要从initrd中执行程序的组件必须编译到内核中. 第三,你必须去创建ramdisk映象,这可以能过创建一个文件系统在块设备上做到,复制需要的
文件,然后复制块设备的内容到initrd中,在最近的内核中,至少有三种类型的设备是合适的:
-floppy
-ramdisk
-loopback(这是最合适的)
我们将描述loopback的制作方法:
1)内核配置时包含loopback块设备.
2)创建一个适当大小的空的文件系统,例如:
  # dd if=/dev/zero of=initrd bs=300k count=1
  # mke2fs -F -m0 initrd
  (如果空间小,你可能想去使用一个比较小的文件系统去取代EXT2)
3)加载文件系统
  # mount -t ext2 -o loop initrd /mnt
4)创建一个控制区设备
   # mkdir /mnt/dev
   # mknod /mnt/dev/console c 5 1
5)复制所有需要在initrd中使用的文件,不要忘记最重要的文件/linuxrc.
6)在initrd环境下正确的操作常常用测试,
   # chroot /mnt /linuxrc
7)unmount 文件系统
  # umount /mnt
8)压缩initrd
  # gzip -9 initrd
对于initrd的试验,你可能想去节约floppy并且只添加一个符号从/linuxrc链接到/bin/sh
你可以去试验一个newlib去创建一个更小的initrd.
最后,你必须去启动内核并且导入initrd.几乎所有的linux引导程序都支持initrd.因为启动
过程与老的机制也是兼营的,下面是一个命令参数.
 root=/dev/ram0 init=/linuxrc rw
如果没有使用devfs,否则
 root=/dev/rd/0 init=/linuxrc rw
如果使用了(rw仅仅是去写initrd)
With LOADLIN, you simply execute
     LOADLIN <kernel> initrd=<disk_image>
e.g. LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0
       init=/linuxrc rw
在LILO中,你添加这个选项INITD=<path>在一个全局的段中或者在/etc/lilo.conf
  image = /bzImage
    initrd = /boot/initrd.gz
    append = "root=/dev/ram0 init=/linuxrc rw"
并且运行/sbin/lilo
对于其它的bootloader,请参考相关的文档.
现在你能启动and享受使用initrd.

 
相关阅读 更多 +
排行榜 更多 +
太鼓达人plus

太鼓达人plus

音乐节奏 下载
吉品甄选

吉品甄选

购物比价 下载
恋与练习生2

恋与练习生2

音乐节奏 下载