linux ramdisk根文件系统,ramdisk 根文件系统制作

隐逸桃源说:1、ramdisk是一个最小的linux rootfs系统,它包含了除内核以外的所有linux系统在引导和管理时需要的工具,包含如下目录:bin,dev,etc,home,lib,mnt,proc,sbin,usr,var。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin目录中);必要的配置文件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/console,/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中了。

阅读(1214) | 评论(0) | 转发(1) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值