SEP4020中RAMDISK的加载

SEP4020RAMDISK的加载

 

一、        文件系统制作

1.      BusyBox制作简易的根文件目录系统

Ø 创建根文件系统目录:新建文件夹并命名为fs

cd /home/project

mkdir /home/project/fs

cd fs

Ø 利用shell脚本在fs文件夹下创建根文件系统目录

n  fs文件夹下创建一个名为mkrootfsdir.shshell脚本文件,复制以下内容到文件中。

#!/bin/sh

echo "Makeing rootfs_dir"

mkdir rootfs

cd rootfs

echo "Makeing dir:bin dev etc lib proc sbin sys usr"

mkdir bin dev etc lib proc sbin sys usr

mkdir usr/bin usr/lib usr/sbin lib/modules

echo "Makeing initial console"

mknod dev/console c 5 1

mknod dev/null c 1 3

echo "Makeing dir:mnt tmp var"

mkdir mnt tmp var

chmod 777 tmp

mkdir mnt/cramfs mnt/yaffs mnt/nfs

echo "Makeing dir:home root boot"

mkdir home root boot

echo "Done"

n  保存该脚本文件并运行

[root@localhost fs]# source mkrootfsdir.sh

n  进入rootfs目录查看所创建的文件夹

[root@localhost rootfs]# ls

bin boot dev etc home lib mnt proc root sbin sys tmp usr var

Ø 复制/dev目录下的设备节点到/home/project/fs/rootfs/dev

[root@localhost ~]# cp -dpR /dev /home/project/fs/rootfs/

2.      交叉编译busybox工具

Ø busybox-1.15.3.tar.bz2解压并进行menuconfig配置

n  [root@localhost fs]# tar -jxvf busybox-1.15.3.tar.bz2

n  [root@localhost fs]# cd busybox-1.15.3

n  [root@localhost busybox-1.15.3]# make menuconfig

Ø 默认编译interface.c文件时会报错,需要做如下调整:

n  coreutils/fsync不选

n  miscellaneous/ionice不选

n  Linux System Utilities/mkfs_vfat不选

Ø 修改busybox-1.15.3/networking/interface.c文件,添加:

n  #define ARPHRD_INFINIBAND 32 /* InfiniBand */

Ø 修改好后进行编译命令如下

n  [root@localhost busybox-1.15.3]#make ARCH=arm

n  CROSS_COMPILE=arm-linux-

n  CONFIG_PREFIX=/home/project/fs/rootfs/ all

n  Install

正确指令make ARCH=arm CROSS_COMPILE=arm-linux- CONFIG_PREFIX=/home/project/fs/rootfs/all install

Ø 复制常用的armlib库到rootfs 中(脚本实现)

#!/bin/sh

cd /usr/local/arm/3.4.1/arm-linux/lib

for file in libc libcrypt libdl libm libpthread libresolv libutil

do

cp $file-*.so /home/project/fs/rootfs/lib/

cp -d $file.so.[*0-9] /home/project/fs//rootfs/lib/

done

cp -d ld*.so* /home/project/fs/rootfs/lib/

Ø 建立系统配置文件

n  busybox-1.15.3/examples/bootfloppy/etc 文件夹中的4 个文件复制到/home/project/fs/rootfs/etc

n  修改inittab

::sysinit:/etc/init.d/rcS

::respawn:-/bin/sh

::restart:/sbin/init

tty2::askfirst:-/bin/sh

::ctrlaltdel:/bin/umount -a -r

::shutdown:/bin/umount -a -r

::shutdown:/sbin/swapoff

n  修改fstab

none /proc proc defaults 0 0

none /dev/pts devpts mode=0622 0 0

tmpfs /dev/shm tmpfs defaults 0 0

Ø 根文件目录系统制作完成,所得简单文件系统rootfs

 

二、        制作RAMDISK形式的文件镜像及其内核镜像

1.      创建RAMDISK格式文件系统目录initrd

Ø rootfs目录下所有内容拷贝到initrd目录

#mkdir initrd

#dd if=/dev/zero of=initrd.img bs=1k count=4096  //确定大小(4M

#/sbin/mke2fs -F -v -m0 initrd.img

#mount -o loop initrd.img initrd

#cp -av /home/project/fs/rootfs/*  initrd

#umount initrd

#gzip -9 initrd.img

在当前目录下得到一个名为initrd.img.gzramdisk的文件系统镜像(压缩)。

Ø 如上操作所得

n  initrd.img(RAMDISK镜像)大小为先前设定的4M

n  initrd.img.gz大小为880K左右

2.      4020内核镜像制作

Ø 内核编译时要选上相应的内核选项来支持

n  device driver->block device中选中中间四个

DEFAULT RAM DISK SIZE (KBYTES)值要比实际RAMDISK(解压后)大或者一致。注: initrd.img4M,则此处必须大于或者等于4M

n  进入file system中,选中ext2文件系统的支持

Ø 将上面所得的initrd.img.gz放到内核包顶级目录下

内核编译所用交叉编译工具GCC-3.4.1

Ø #make bootpImage INITRD_PHYS=0x31000000 INITRD=./initrd.img.gz PARAMS_PHYS=0x30000100,(arch/arm/boot下)

n  zImage文件可直接用于启动内核

n  bootpimage文件用于与RAMDISK合并其中

n  命令解析:INITRD_PHYS是文件系统的起始物理地址,PARAMS_PHYSuboot存放启动参数列表的地方。这两个必须要,因为在/arch/arm/boot/bootp/init.s中会用到这两个参数。

Ø  [root@localhost linux-v3.3]#mkimage -n "Kernel 2.6.16" -A arm -O linux -T kernel -C none -a 30007fc0 -e 30008000 -d ./arch/arm/boot/bootpImage vmlinux.img。这样生成的vmlinux.img就是一个uImage镜像

 

三、        内核及RAMDISK的烧写

1.      在不与内核镜像合并烧写的情况下

Ø 传内核镜像

SEP4020=>tftp 31000000  zImage                        //zImage镜像启动地址

SEP4020=>nand erase 0x00100000 0x00200000

SEP4020=>nand write 0x31000000 0x00100000 0x00200000

SEP4020=>set bootcmd nand read 0x30008000 0x00100000 0x00200000/;bootm 0x30008000

SEP4020=>saveenv

SEP4020=>reset

Ø 传文件系统

SEP4020=>tftp 31000000  initrd.img.gz

SEP4020=>nand erase 0x600000 0x1e00000

SEP4020=>nand write 0x31000000 0x600000 0x1e00000

SEP4020=>set bootargs root=/dev/ram0 rw console=ttyS0,115200  initrd=0x31000000,10mb mem=32mb  //此处必须大于实际的RAMDISK                                                            文件大小

SEP4020=>saveenv

SEP4020=>reset

注:分开烧写未进行验证,具体烧写位置参考有关4020手册

2.      合并情况下的烧写

SEP4020=>set bootargs root=/dev/ram0 rw console=ttyS0,115200 initrd=0x31000000,10mb mem=32mb

SEP4020=>save

SEP4020=>reset

SEP4020=> tftp 30007fc0 vmlinux.img;bootm 30007fc0

3.      至此SEP4020RAMDISK加载结束(启动效果图)

 

四、        制作过程中的问题及制作意义

1.      新制作的文件系统不能超过UBOOT设定的initrd的范围。

2.      注意文件系统中/etc下的inittab文件,同时/devconsole的节点也要设置好,不然会出现警告。

创建节点:Rootfs /dev

mknod -m 660 console c 5 1

mknod -m 660 null c 1 3

3.      文件系统中库文件也要加载完全,不然会出现#重叠。

4.      制作RAMDISK形式的文件系统的意义

Ø  Ramdisk是将一部分固定大小的内存(RAM)当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。但缺点也很明显:不具有永久性、断电后无法保存、大小不可更改、浪费ram等。

Ø  在内核缺少网络支持不能使用NFS的情况下方便驱动及程序调试:将镜像放至ROOFS相应目录下做成RAMDISK镜像,待RAMDISK文件系统加载后作驱动或应用程序的的调试。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值