- 论坛徽章:
- 0
|
前段时间把linux2.6.14内核给移植成功了,接下来就研究下移植yaffs文件系统。以前看过有关移植ramdisk的文章,里面介绍了busybox这个很强大的工具。相信大家也很清楚它的作用了,就不多说了。既然要使用busybox,那么就要面对一个挺头痛的问题,就是busybox与交叉编译器版本的问题。而且据说编译busybox的交叉编译器版本必须与编译内核的版本一至才能挂载上内核。所以个人建议采用前人所编译成功的组合,以下是在网上搜索的一些组合:
busybox1.1.3+arm-linux-3.3.2
busybox1.2.2.1+arm-linux-3.3.2
busybox-1.2.2.1+arm-linux -3.4.1
busybox-1.1.3+arm-linux -3.4.1
busybox-1.5.1+arm-linux -4.1.2
我个人所采用的是busybox-1.10.1+arm-linux -3.4.1, busybox-1.10.1是最新的版本。
Busybox的配置与编译
>Make menuconfig ,进入配置界面。一定要把以下给选上:
Busybox setting -> build option -> build busybox as a static binary 生成为静态库
Init Utilities -> init
Support reading as inittab file
Shells à choose your default shell(ash) -> (X) ash 如果没选上这个,就不会生成sh
然后>make install
使用arm-linux -3.4.1去编译busybox-1.10.1也不是一帆风顺的。最先遇到一个编译错误,提示是由于Miscoellaneous Utilities -> taskset出问题。具体的出错信息由于没保存,就不公布了。我的解决方法是把Miscoellaneous Utilities -> taskset给去掉,再继续编译。在快完成的时候又出现下面的错误:
……
:undefined reference to ‘query_module’
Modutils/lib.a(insmod.o)(.text.insmod_main+0xc38):In function ‘insmod_main’:
:undefined reference to ‘create_moudle’
Collect2:ld returned 1 exit status
Make: *** [busybox_unstripped[] Error 1
看来是与模块单元有关的哦,没理由叫我把模块功能给屏蔽掉吧~~!后来经测试,发觉解决办法为把模块中与linux 2.4.*相关的给去掉。
Linux Module Utilities à []Support version 2.2.x to 2.4.x Linux kernels
修改后再编译,没其它意外的话,在Busybox的目录下就会生成_install目录。
建立根文件系统
把Busybox目录下生成的_install拷贝到用户文件夹里(为了方便工作),并改文件名(我改为myroot)。目前myroot文件夹里只有/bin /sbin /usr 3个文件夹,并不能构成linux文件系统所需要的内容。因此,新创建以下文件夹:dev etc home home/user lib mnt opt proc tmp var 。
创建设备文件,我觉得可以先在/dev里创建需要的设备文件,也可以在Init.d/rcS添加创建脚本,让在初始化时再创建设备文件。而我选择的就是后者,所以把/dev文件夹留空就可以了。
创建初始化文件,其中包括了最重要的三个文件:/etc/Inittab、/etc/Init.d/rcS和/etc/Fstab。
/etc/Inittab文件:
#System initialization .
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
注意:如果::askfirst:后面不是/bin/sh的话,需要用户名和密码才能登陆到系统。
fstab文件
none /proc proc defaults 0 0
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmfs defaults 0 0
Init.d/rcS文件
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#Charactor modules
/bin/mknod /dev/pts/0 c 136 0
/bin/ln -s /dev/v4l/video0 /dev/video0
/bin/ln -s /dev/fb/0 /dev/fb0
/bin/ln -s /dev/vc/0 /dev/tty1
/bin/ln -s /dev/scsi/host0/bus0/target0/lun0/part1 /dev/sda1
/bin/mount -t proc none /proc
/bin/mount -t tmpfs none /tmp
/bin/mount -t tmpfs none /var
/bin/mkdir -p /var/lib
/bin/mkdir -p /var/run
/bin/mkdir -p /var/log
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 192.168.0.27 up
目前可以说一个最基本的根文件系统已经准备好了。
制作yaffs文件系统
只须执行以下程序:
>mkyaffsimage myroot myroot.img
所创建出的myroot.img就为yaffs文件系统镜像文件。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/77911/showart_1218594.html |
|