Chinaunix首页 | 论坛 | 博客
  • 博客访问: 453756
  • 博文数量: 122
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1540
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 11:11
文章分类

全部博文(122)

文章存档

2010年(1)

2009年(76)

2008年(45)

我的朋友

分类: LINUX

2008-12-26 17:12:30


下载文件系统

制作过程:
$genext2fs  -b  8192 -d /nfs/rootfs  ramdisk
$gzip -9 -f ramdisk
其中genext2fs是生成ramdisk文件系统的工具;
在uboot的提示符下执行:
SMDK2410=> tftp 30008000 zImage
SMDK2410=> tftp 30800000 ramdisk.gz
SMDK2410=> go 30008000 30800000

除非您使用初始化 ramdisk (initrd),否则一定不要把挂载根文件系统必需的驱动程序(硬件驱动以及文件系统驱动)编译成模块!而如果您确实使用初始化 ramdisk,请为 ext2FS 支持选项选择 Y,因为 ramdisk 使用该文件系统。您还需要 initrd 支持。


initrd and ramdisk:

# initrd全称是 initial RAM disk ,他提供一种让核心能简单使用Ramdisk的能力,简单
的说,这些能力包括:

# 格式化一个 Ramdisk;
# 加载文件系统内容到Ramdisk;
# 将Ramdisk作为根文件系统;

我们能将initrd形像的比作 Norton Ghost 备份的硬盘分区,而Linux启动阶段的Ramdisk
相当于一个未格式化的硬盘分区,核心能直接将initrd的内容释放到一个未初始化的
Ramdisk里,这个过程和Ghost恢复一个分区的过程十分相似。于是,相应的内容被加载
到相应的Ramdisk中,同时,这个Ramdisk也被格式化成某种由initrd格式所表达的分区
格式。
initrd和Ghost备份的分区有许多相似之处,例如,他有一定的大小,包含分区上的文件
系统格式等。initrd支持的格式包括:
    *
      Ext2文件系统;
    *
      Romfs文件系统;
    *
      cramfs文件系统;
    *
      minix文件系统;
如果核心选择了Gzip支持(通常这是默认的,在init/do_mounts_rd.c中定义的BUILD_CRA
MDISK宏)还能使用Gzip压缩的initrd。相关的代码能在核心源码 drivers/block/rd.c:i
dentify_ramdisk_image 中找到。


制作initrd
制作initrd传统的作法是通过软盘(显然过时了,不介绍了)、ramdisk或loop设备(
/dev/loop)。通过ramdisk来制作的方法比较简单(以ext2文件系统为例):
redice # mkfs.ext2 /dev/ram0
redice # mount /dev/ram0 /mnt/rd
redice # cp _what_you_like_  /mnt/rd    # 把需要的文件复制过去
redice # dd if=/dev/ram0 of=/tmp/initrd
redice # gzip -9 /tmp/initrd

这个过程也最能够解释initrd的本质,对于Linux来说,Ramdisk的一个块设备,而initrd
是这个块设备上所有内容的“克隆”(由命令 dd来完成)而生成的文件。核心中加载ini
trd相关的代码则用于完成将相反的过程,即将这一个文件恢复到Ramdisk中去。

通过loop设备来制作initrd的过程:
redice # dd if=/dev/zero of=/tmp/initrd bs=1024 count=4096 # 制作一个4M的空白文

redice # losetup /dev/loop0 /tmp/initrd                    # 映射到loop设备上;

redice # mkfs.ext2 /dev/loop0                              # 创建文件系统;
redice # mount /dev/loop0 /mnt/rd
redice # cp _what_you_like_ /mnt/rd                        # 复制需要的文件;
redice # umount /mnt/rd
redice # losetup -d /dev/loop0
redice # gzip -9 /tmp/initrd
不过,目前已有了一些更好的工具来完成这些工作,包括genromfs(uClinux里常用的工具
),genext2fs,mkcramfs等。这些工具提供了一些方便研发的新特性,例如,不必上面烦
索的过程,只要将文件复制到某个目录中,将其作为根目录,即可生成initrd;另一个重
要的改进是,这些工具都能以普通用户的身份来生成initrd。

未完,待续…(补充有关怎么加载|ARM中怎么使用initrd作为根文件系统等)
链接和参考文件
文件
    *
      Linux文件中关于ramdisk的介绍,核心目录里 Documentation/ramdisk.txt;
    *
      Linux文件中关于initrd的介绍,核心目录 Documentation/initrd.txt;
    *
      Linux文件中关于tmpfs的介绍,核心目录 Documentation/filesystems/tmpfs.txt
;
一个完整的参考:
http://blog.chinaunix.net/u2/79779/showart_1664215.html
--

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