免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1307 | 回复: 0
打印 上一主题 下一主题

busybox 制作ramdisk [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-08 15:43 |只看该作者 |倒序浏览
                 [color="#555555"] ramdisk 制作:
1: 内核支持:
其中主要修改3项,如下:
①、修改Bootoptions
Default kernel command string  这一项我设为空,让bootloader(u-boot,vivi)传入。
②、选上 Float point emulation ->
[ * ] NWFE math emnulaiton
③、修改Driver device  ->
  Block device ->
(4096)Default RAM disk size (kbytes)
改4096为8192
2:以下是摘自网上的,
制作空的ramdisk:
# dd if=/dev/zero of=ramdisk bs=1k count=8000
   在本地目录下出现一个rmdisk的块文件
# losetup /dev/loop2 ramdisk
# mkfs.ext2 /dev/loop2
挂载ramdisk至/mnt下
# mount -t ext2 /dev/loop2 /mnt
㈢.准备lib库文件
# cd /mnt
# mkdir lib
# cd  /usr/local/arm/3.4.1/arm-linux/lib
# for file in libc libcrypt libdl libm libpthread libresolv libutil
> do
> cp $file-*.so /mnt/lib
> cp -d $file.so.[*0-9] /mnt/lib
> done
# cp -d ld*.so* /mnt/lib
㈣.复制busybox文件至ramdisk中:
# cp –rf  /busybox-1.2.2.1/_install/* /mnt/
这样在ramdisk中就有:sbin linuxrc bin
㈤.
# umount /dev/loop2
# losetup -d /dev/loop2
# gzip -9  ramdisk
这样ramdisk.gz就制作好了。
# cp ramdisk.gz /tftpboot
基本上我也是如法炮制, 不过我是直接拿上次nfs启动的文件系统的内容全部拷贝到这里,
注意拷贝链接文件时要加上参数-d, 同时参阅了hh bbs上的说要
在ramdisk中建立console和null即可
cd /dev
mknod -m 660 console c 5 1
mknod -m 660 null c 1 3
同时我的文件名字叫做today.ramfs.gz
试验: 在uboot中设置
setenv bootargs "console=ttySAC0 initrd=0x30800000,0x440000 root=/dev/ram init=/linuxrc"

setenv bootargs "console=ttySAC0 initrd=0x30800000,0x440000 root=/dev/rd/0 init=/linuxrc"
按Document/initrd.txt中说如果采用devfs,则应使用root=/dev/rd/0, 如不采用,则用/dev/ram  ,结果反复试验了一下, 两个效果是一样的。
uboot==>tftp 30008000 zImage;tftp 30800000 today.ramfs.gz;go 30008000
发信人: iaadoa (猩猩~~~心在泰达), 信区: LinuxDev
标  题: rootfs和ramdisk的制作(原创)(转载)
发信站: 我爱南开站 (2005年11月07日21:46:53 星期一), 站内信件
【 以下文字转载自 EE 讨论区 】
发信人: lsfdxuxian (蓝色沸点), 信区: EE
标  题: rootfs和ramdisk的制作(原创)
发信站: 我爱南开站 (2005年11月07日21:39:59 星期一), 站内信件
1、ramdisk是一个最小的linux rootfs系统,它包含了除内核以外的所有linux系统在引
导和管理时需要的工具,包含如下目录:bin,dev,etc,home,lib,mnt,proc,sbin,usr,va
r。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin目录中);必要的配置文
件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/co
nsole,
/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。
2、首先建立一个空的ramdisk image文件:
xuxian@omap1:~$cd /home/xuxian/fsys
xuxian@omap1:~$dd if=/dev/zero of=rootfs bs=1M count=16
ramdisk image文件名为rootfs,大小为16M。
把它格式化为你需要的文件系统,比如 ext2 ,ext3等。
比如ext3 :
xuxian@omap1:~$mkfs.ext3 -m 0 -N 2000 ./rootfs
这里的-N 2000表示最大的node数为2000。因为linux的设备也是基于文件系统的,需要
占用文件系统的node,如果数目建立的太少,以后可能会不够用。
然后把它mount到某个目录:
xuxian@omap1:~$mkdir ramdisk
xuxian@omap1:~$mount -t ext3 -o loop ./rootfs ./ramdisk
xuxian@omap1:~$cd ramdisk
xuxian@omap1:~$ls
xuxian@omap1:~$lost+found
通过这一步,已经得到一个空的ramdisk image文件了。
3、建立各个目录:
xuxian@omap1:~/fsys/ramdisk$mkdir dev
xuxian@omap1:~/fsys/ramdisk$mkdir proc
xuxian@omap1:~/fsys/ramdisk$mkdir etc
xuxian@omap1:~/fsys/ramdisk$mkdir sbin
xuxian@omap1:~/fsys/ramdisk$mkdir bin
xuxian@omap1:~/fsys/ramdisk$mkdir lib
xuxian@omap1:~/fsys/ramdisk$mkdir mnt
xuxian@omap1:~/fsys/ramdisk$mkdir usr
xuxian@omap1:~/fsys/ramdisk$mkdir tmp
xuxian@omap1:~/fsys/ramdisk$mkdir root
xuxian@omap1:~/fsys/ramdisk$mkdir home
xuxian@omap1:~/fsys/ramdisk$mkdir var
xuxian@omap1:~/fsys/ramdisk$mkdir usr/bin
xuxian@omap1:~/fsys/ramdisk$mkdir usr/sbin
xuxian@omap1:~/fsys/ramdisk$mkdir usr/lib
对单用户来说,home和root不是必须的。
4、/dev目录:
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 console c 5 1
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 666 tty c 5 0
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 tty0 c 4 0
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 ttyS0 c 4 64
也可以用一种简单的方法来创建/dev里面的文件:首先你要下载一个文件系统
omap1:/home/xuxian/fsys/ramdisk/dev$cp -dpR /home/xuxian/osk/rootfs2.6/dev/*
.
这个命令把下载的文件系统的/dev目录拷贝到ramdisk的/dev中。dp参数表示符号连接拷
贝为符号连接,不拷贝连接的符号,并且拷贝源文件的所有属性。
5、/lib目录:
下面是arm-linux的动态库,可以选择一些必须的拷贝到ramdisk的lib下。
omap1:/home/iaadoa/work/crosstool/gcc-3.3.2-glibc-2.3.2/arm-linux/arm-linux/l
ib# ls
crt1.o                    libc_nonshared.a   libmcheck.a            
libnss_hesiod.so.2       librt.a
crti.o                    libcrypt-2.3.2.so  libmemusage.so         
libnss_nis-2.3.2.so      librt.so
crtn.o                    libcrypt.a         libm.so                 
libnss_nisplus-2.3.2.so  librt.so.1
gconv                     libcrypt.so        libm.so.6               
libnss_nisplus.so        libSegFault.so
gcrt1.o                   libcrypt.so.1      libnsl-2.3.2.so         
libnss_nisplus.so.2      libstdc++.a
ld-2.3.2.so               libc.so            libnsl.a               
libnss_nis.so            libstdc++.la
ld-linux.so.2             libc.so.6          libnsl.so               
libnss_nis.so.2          libstdc++.so
ldscripts                 libc.so_orig       libnsl.so.1            
libpcprofile.so          libstdc++.so.5
libanl-2.3.2.so           libdl-2.3.2.so     libnss_compat-2.3.2.so  
libpthread-0.10.so       libstdc++.so.5.0.5
libanl.a                  libdl.a            libnss_compat.so        
libpthread.a             libsupc++.a
libanl.so                 libdl.so           libnss_compat.so.2      
libpthread_nonshared.a   libsupc++.la
libanl.so.1               libdl.so.2         libnss_dns-2.3.2.so     
libpthread.so            libthread_db-1.0.so
libBrokenLocale-2.3.2.so  libg.a             libnss_dns.so           
libpthread.so.0          libthread_db.so
libBrokenLocale.a         libgcc_s.so        libnss_dns.so.2         
libpthread.so_orig       libthread_db.so.1
libBrokenLocale.so        libgcc_s.so.1      libnss_files-2.3.2.so   
libresolv-2.3.2.so       libutil-2.3.2.so
libBrokenLocale.so.1      libiberty.a        libnss_files.so         
libresolv.a              libutil.a
libbsd-compat.a           libieee.a          libnss_files.so.2      
libresolv.so             libutil.so
libc-2.3.2.so             libm-2.3.2.so      libnss_hesiod-2.3.2.so  
libresolv.so.2           libutil.so.1
libc.a                    libm.a             libnss_hesiod.so        
librt-2.3.2.so           Mcrt1.o
以下这些是必须的:
ld-2.3.2.so               libmemusage.so           libnss_nisplus.so.2
ld-linux.so.2             libm.so.6                libnss_nis.so.2
libanl-2.3.2.so           libnsl-2.3.2.so          libpcprofile.so
libanl.so.1               libnsl.so.1              libpthread-0.10.so
libBrokenLocale-2.3.2.so  libnss_compat-2.3.2.so   libpthread.so.0
libBrokenLocale.so.1      libnss_compat.so.2       libresolv-2.3.2.so
libc-2.3.2.so             libnss_dns-2.3.2.so      libresolv.so.2
libcrypt-2.3.2.so         libnss_dns.so.2          librt-2.3.2.so
libcrypt.so.1             libnss_files-2.3.2.so    librt.so.1
libc.so.6                 libnss_files.so.2        libSegFault.so
libdl-2.3.2.so            libnss_hesiod-2.3.2.so   libthread_db-1.0.so
libdl.so.2                libnss_hesiod.so.2       libthread_db.so.1
libgcc_s.so.1             libnss_nis-2.3.2.so      libutil-2.3.2.so
libm-2.3.2.so             libnss_nisplus-2.3.2.so  libutil.so.1
拷贝到ramdisk的lib目录下就行了。
6、安装busybox:
下载busybox-1.01
xuxian@omap1:~/osk$tar -xjvf busybox-1.01.tar.bz2
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk menuconfig
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk dep
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk inatall
xuxian@omap1:~/fsys/ramdisk/bin$ls
addgroup  chown     dmesg   gzip      login  netstat  sed    true
adduser   cp        echo    hostname  ls     pidof    sh     umount
ash       date      egrep   ip        mkdir  ping     sleep  uname
busybox   dd        false   ipaddr    mknod  ps       su     usleep
cat       delgroup  fgrep   iproute   more   pwd      sync   vi
chgrp     deluser   grep    kill      mount  rm       tar    zcat
chmod     df        gunzip  ln        mv     rmdir    touch
这些就是可用的命令。
7、/etc下系统配置文件说明:
xuxian@omap1:~/fsys/ramdisk/etc/$vi inittab
#
# This is run first except when booting in single-user mode
#指定初始化文件
::sysinit:/etc/init.d/rcS
# /bin/sh
#
# Start an "askfirst" shell on the console (whatever that may be)
#启动时执行的shell
::askfirst:-/bin/sh
# Stuff to do when restarting the init process
#重启动作
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
#关机时动作,卸载所有文件系统
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
再来编写rcS脚本:
xuxian@omap1:~/fsys/ramdisk/etc/$mkdir init.d
xuxian@omap1:~/fsys/ramdisk/etc/$cd init.d
xuxian@omap1:~/fsys/ramdisk/etc/init.d$vi rcS
脚本如下:
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
HOSTNAME=OMAP5912OSK
hostname $HOSTNAME
echo ""
echo "******************************************"
echo "Starting System Init for $HOSTNAME"
echo "******************************************"
# goto the init.d directory
cd /etc/init.d
# Mount the default file systems
mount -a # Mount the default file systems
# Configure network
#/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255
#/sbin/ifconfig eth0 128.247.75.151 netmask 255.255.254.0 broadcast
128.247.75.255
#/sbin/route add default gw 128.247.74.1 eth0
然后时rcS2脚本:
xuxian@omap1:~/fsys/ramdisk/etc/init.d$vi rcS2
#!/bin/sh
/bin/mount -n -o remount,rw /
/bin/mount -a
echo Starting Network
#modprobe i2c-core
#modprobe i2c-algo-bit
#modprobe i2c-omap1510
#modprobe soundcore
#modprobe omap-audio
#modprobe omap1510-aic23
/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
/sbin/ifconfig eth0 10.1.3.3 netmask 255.255.0.0 broadcast 10.1.255.255
/sbin/route add default gw 10.1.0.100 eth0
~
~
最后时编写fstab脚本,我的很简单:
xuxian@omap1:~/fsys/ramdisk/etc$vi fstab
proc            /proc           proc    defaults        0       0
8、用nfs检查根文件系统:
做完以上这些就可以用nfs来启动目标系统了。编辑/etc/exports加入/home/xuxian/fsy
s/ramdisk 192.168.4.190(rw,sync,no_root_squash,no_all_squash)其中192.168.4.19
0是目标板的ip。
连接目标板用tftp或者串口线下载u-boot和kernel,在u-boot的环境变量中加入:seten
v bootargs console=ttyS0,115200n8 noinitrd rw ip=dhcp root=/dev/nfs
nfsroot=192.168.0.11:/home/xuxian/fsys/ramdisk,nolock mem=30M其中192.168.0.11
是主机ip,/home/xuxian/fsys/ramdisk为ramdisk目录。
9、通过烧写flash检查文件系统
最后如果想生成image文件烧到flash中可以执行如下命令:
xuxian@omap1:~/fsys$umount ramdisk
xuxian@omap1:~/fsys$gzip -v9 rootfs
这样就生成了rootfs.gz文件,可以连同u-boot,kernel一起烧到flash中了。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21378/showart_336305.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP