ramdisk 和busybox在开发板上的移植[转]

原文链接:http://windowzs.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=amonth%3d12%26ayear%3d2006

这个题目太大了,其实我哪个也搞不清楚.只是追随前人的脚步,把这个平台搭建起来了.在这里只是纪录以下我工作的过程,和遇到的问题.

首先,

cd ~

wget -c http://www.busybox.com/downloads/busybox-1.2.1.tar.bz2 得到busybox的1.2.1版

tar -jvxf busybox-1.2.1.tar.bz2

cd busybox-1.2.1

make menuconfig

设置几个地方

1. install option --> [ ] use /usr/bin 不要选中,否则make install 会把相应的命令安装到/usr/bin下覆盖系统原有的命令

2. build options --> [*]build busybox as a static binary(no shared libs) 把busybox编译成能独立运行的程序。

[*]do you want to build busybox with a cross compiler?然后填上交叉编译器的路径和头

/usr/arm/3.3.2/bin/arm-linux-

3. 在集成的工具里加入几个必须的 initrd ls cd mkdir mount umount gzip guzip cp mv telnet tftp ps 等命令。尝试一下,命令过多老是出古怪的编译错误,其他命令过几天加上。

4. make ; make install 在./目录出现_install目录,下面有linuxrc bin/ sbin/ 3个文件

5. make shell ramdisk

cd ~

dd if=/dev/zero of=initrd.img bs=1k count=8192 在./目录生成initrd.img文件

losetup /dev/loop2 ramdisk 还不知道什么意思

mkfs.ext2 /dev/loop2 格式化loop2为ext2格式

mount -t ext2 /dev/loop2 /mnt/local 挂载ramdisk至/mnt/local

6.做个脚本 make_rd_lib

#!/bin/sh

TEMP_LIB=/tmp/lib

DEST_LIB=/mnt/local/lib

SOURCE_LIB=/usr/local/arm/3.3.2/arm-linux/lib

mkdir -p $TEMP_LIB

cd $SOURCE_LIB

for file in libc libcrypt libdl libm libpthread libresolv libutil

do

cp $file-*.so $TEMP_LIB

cp -d $file.so.[*0-9] $TEMP_LIB

done

cp -d ld*.so* $TEMP_LIB

#去除符号标志,使库文件尽量减小,值得一提的是通过strip,使得原来的库文件由19M减小到了1.8M,效果非常好

cd $TEMP_LIB

PATH=$PATH:/usr/local/arm/3.3.2/bin

arm-linux-strip *

mkdir -p $DEST_LIB

cp -rf $TEMP_LIB/* $DEST_LIB/

rm -rf $TEMP_LIB

#EOF

7. chomd a+x make_rd_lib

./make_rd_lib copy库文件

8. cp -rf busybox-1.2.1/_install/* /mnt/local copy linux bin/ sbin/文件

9. 现在/mnt/local/下 有 linuxrc /bin /sbin /lib 了

cd /mnt/local

mkdir etc

cd etc

vim inittab

内容如下

::sysinit:/etc/init.d/rcS #系统初始化时执行/etc/init.d/rcS

#::wait:/etc/rc.d/rclocal #等待系统初始化动作结束后执行/etc/rc.d/rclocal

::respawn:/sbin/getty 115200 ttyS0 #getty进程结束时重新启动,并设置tty为串口

::restart:/sbin/init #当init进程重新启动时,执行初始化程序/sbin/init

::shutdown:/bin/umount -a -t #系统关机时执行的进程

::respawn:/bin/sh #当sh进程结束时,自动运行/bin/sh

mkdir init.d

cd init.d

vim rc.S

内容

#!/bin/sh

#Remount the root filesystem in read-write (require /etc/fstab)

/bin/mount -a

#Mount /proc filesystem

mount /proc

#Start the network interface

/sbin/ifconfig eth0 192.168.0.42

#EOF

10. 至此/mnt/local/有etc/ bin/ sbin/ linuxrc dev/还不能构成最小文件系统

mkdir proc var tmp usr dev

mkdir dev/fd

cd /dev

cp -avf mem ram0 zero null ttyS0 ramdisk random /mnt/local/dev

这样一个比较完整的文件系统就建立完毕了。在根目录下有bin/ sbin/ etc/ var/ tmp/ dev/ proc/ linuxrc

cd ~

umount /dev/loop2

losetup -d /dev/loop2

gzip -9 initrd.img

生成了 initrd.img.gz

cp initrd.img.gz /tftpboot/

至此,busybox 和ramdisk基本安装完毕

明天再写linux的配置吧。

编译busybox-1.2.1遇到的问题,当insmod命令选用时,就会出现

undefined reference to `query_module' 这个错误,在网上搜索发现是交叉编译器的版本不够,要3.4以上才能顺利编译过去。只好返回去下载了busybox-1.00,发现里面有反向移植的支持2.6内核的insmod,而且用3.3的编译器也可以编译过去,于是最终选用了busybox-1.00.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值