现在的位置: 首页 > 综合 > 正文

制作ramdisk

2013年06月28日 ⁄ 综合 ⁄ 共 2761字 ⁄ 字号 评论关闭

1、建立loop设备的临时挂载点
    #mkdir /mnt/loop
2、建立一个大小为20M的临时文件
#dd if=/dev/zero of=/tmp/ramdisk bs=1k count=15360
  注意:可根据自己的需要建立大小合适的文件系统,bs为块大小(此处大小为1k);count为块数(此处为15360块),文件系统大小为size=bs*count=1k*15360=15M;存于/tmp/ramdisk;并以dev/zero对它进行初始化。用这种方式对文件系统进行初始化,稍后当我们使用gzip命令压缩整个映象时,将让文件系统中未使用的部分获得最大压缩比。
3、将设备文件与临时文件联系起来
   #losetup /dev/loop0 /tmp/ramdisk
   把设备文件/dev/loop0与临时镜象文件/tmp/ramdisk联系起来,/dev/loop0是个块设备,如果出现“ioctl:LOOP_SET_FD:设备或资源忙”,说明/dev/loop0设备还和一文件联系,可用#losetup /dev/loop0查看,并可用#losetup /dev/loop0-d 删除其关联。
 
4、将/dev/loop0格式化为ext2文件系统
    #mke2fs –m 0 /dev/loop0
-m 0指出不必在文件系统上为“超级用户”保留任何区块。
5、把虚拟盘挂在节点/mnt/loop上
    #mount –t ext2 /dev/loop0 /mnt/loop
(一个空的文件系统就挂载到了/mnt/loop上)
6、建立文件系统文件
使用busybox生成bin sbin linuxrc (busybox建立文件参看busybox-1.9.2制作根文件系统,busybox-1.13.3编译),将它们一起拷贝到/mnt/loop下,
创建文件结构 dev lib  sys  proc  etc  home  usr  tmp  var ;
在etc中建立相关的配置文件 /etc/init.d/rcS  /etc/fstab  /etc/inittab /etc/passwd  /etc/group  /etc/shadow
Linuxrc:boot运行完成执行的第一个用户程序,将控制交给用户;
Inittab:linuxrc将会去执行这个文件中的配置;
console::sysinit:-/etc/init.d/rcS
rcS:inittab调用的用户程序借口
#!/bin/sh
mount  -a(可以在此直接挂载设备mount -t proc proc /proc 
 mount -t sysfs sys /sys)
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
# Start a new shell in the console
/bin/sh
(注:#chmod  777 rcS  )
Fstab: mount的相关配置
proc /proc proc defaults 0  0
Group passwd shadow为用户信息,可以从linux系统中的etc中拷贝使用,本文给出一个简单的,
Group :用户信息
root::0:root(第一二两个:号中间为空的时候不需要密码,就可以登陆,当不为空时读取shadow中相关信息,并得到登陆密码)
Shadow :密码信息,当不需要密码时可以为空;
Passwd : 用户登陆后,跳转到得目录及命令行
 root:x:0:0:root:/root:/bin/sh
 以root身份建立节点文件/dev/console, /dev/null
  mknod -m 600 dev/console c 5 1
  mknod -m 666 dev/null c 1 3
(由于从2.6.13以后linux内核中devfs被udev代替,所以需要添加这两个节点)
用cp –af命令将所需要文件拷贝到虚拟盘上
#cp -af /xx/* /mnt/loop
     /bin, /dev, /etc, /lib, proc, /sbin, /usr都是不可或缺的目录,建议保留/tmp,/var,不过可以为空。而为多用户提供可扩展环境的所有目录(例如/home、/mnt、/opt、/root)都应该省略。
 
7、卸载文件系统,得到的/tmp/ramdisk就是文件系统映象。
    #cd /mnt/loop以外的目录 (否则会提示无法卸载,设备busy)
    #umount /mnt/loop 
8、压缩文件系统映象
#gzip –vc9 /tmp/ramdisk >ramdisk.gz
    在/tftpboot下生成了ramdisk.gz,这样一个内存文件镜象生成了。
注意:
1内核的影响:
 
 <1>文件系统大小受到内核配置文件影响:
    make menuconfig
Device Drivers
Block devices

(16384) Default RAM disk size (kbytes)
 (16384为文件系统上限,在此设置文件系统上线,如果文件系统大于这个上线,加载文件系统时可能会出问题);

Default kernel command string  
-> root=/dev/ram0

<2>文件系统的启动文件在内核中设置
本文件系统的启动文件时由busybox生成的linuxrc,有的文件系统使用的是自己编写的脚本如:init,linuxrc,这个启动文件需要在内核编译时定义一致;
Make menuconfig
Boot options
(mem=32M console=ttyS0,115200 init=/linuxrc root=/dev/ram0 rw)Default kernel command string 
2 busybox的影响:
<1>使文件系统使用真正的串口设备,而不是使用虚拟控制台。
Make menuconfig
Init Utilities
[*]   Run commands with leading dash with controlling tty  
 在真实的串口设备中运行命令行;
否则启动时出现-sh: can''t access tty; job control turned off
   危害:不能使用CTRL+C终止进程, 特别郁闷的是ping 的时候不能退出 
<2>使用静态链接后可以不加入库文件,
Make menuconfig
Busybox settings 
Build optrons
[*] Build BusyBox as a static binary (no shared libs) 
 

如果使用的是动态链接,可以使用 arm-linux-readelf -d busybox 命令查看相关的库文件;拷贝的时候一定不能只拷贝那些链接文件,还要拷贝真正的库文件;

百度文库

http://wenku.baidu.com/view/9a805cfd700abb68a982fb81.html 

【上篇】
【下篇】

抱歉!评论已关闭.