`
xiaoer_1982
  • 浏览: 1815079 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

utu2440:利用busybox制作文件系统

阅读更多

前段时间想在扬创utu2440的ARM9开发板上交叉编译QT4程序,用arm-linux-gcc 3.4.1版本的编译器对Qtopia4.3.3进行交叉编译后移植到开发板上却发现不能正确运行,查看utu2440用户手册,需要采用3.3.2版本 的GCC编译QT程序,然而采用这个版本的编译器编译完Qtopia4.3.3后字体和图标都非常的小(具体原因未知,详见另一篇文章)。细想一下用 3.4.1版本编译的程序运行错误的原因,提示是库链接错误,可能开发板上原有的共享链接库还是arm-linux-gcc 3.3.2自带的,于是试着更新一下,干脆一并把文件系统更新了,原有的busybox版本也太旧了。
busybox.net 下 载最新版的 Busybox1.13.2, 配置好交叉编译环境,这次采用arm-linux-gcc 3.4.1, 解压busybox源码包,执行make menuconfig进行配置,这里一定需要改的有:BusyBox Setting->Build Options->Cross Compiler prefix,将它的值设为arm-linux-。此外,最好对Busybox进行静态编译,省去不少麻烦,于是选中Build BusyBox as a static binary。其余的选项可根据需要自行选择,在Installation Options里可以选择BusyBox生成路径,默认为./_install。介于选中Miscoellaneous Utilities -> taskset可能会出现问题[1] , 因此我没有选中这个选项。
保 存配置,make,如果出现找不到crypt m库的错误提示Trying libraries: crypt m Library crypt is needed, can't exclude it (yet) Library m is needed, can't exclude it (yet) Final link with: crypt m,可以不必理会,直接make install,然后在./_install下可以找到bin sbin usr三个目录以及linuxrc。还需要建立一些新的目录,执行mkdir dev etc home lib mnt opt proc sys tmp var。将共享链接库文件拷贝到lib下,具体的命令是

sudo cp /usr/local/arm/3.4.1/arm-linux/lib/* lib
写inittab文件,这个文件是Linux启动时init进程寻找的主要文件,采用BusyBox缺省配置:
::sysinit:/etc/init.d/rcS
::askfirst:-bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r


sysinit的意思是为init提供初始化命令行的路径。
askfirst主要用途是减少系统上执行的终端应用程序的数量,会在控制台上显示"Please press Enter to active this console"的信息,并在系统重新启动进程之前等待用户按下"Enter"键
ctrlaltdel:当按下Ctrl+Alt+Del组合键时运行的进程
shutdown和restart类似。


在Busybox1.13.2中采用mdev代替了udev, mdev 是通过 init 进程来启动的,在使用 mdev 构造 /dev 目录之前,init 至少要用到设备文件/dev/console、 /dev/null ,所以建立这两个设备文件。[2]
cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
编写/etc/fstab
proc /proc proc defaults 0 0
tmpfs /dev tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
编写/etc/init.d/rcS
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
trap ":" INT QUIT TSTP
##################################
/bin/mount -a
echo "Starting mdev..."
#支持热插拨 [3]
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
##################################
mkdir /dev/pts
/bin/mknod /dev/pts/0 c 136 0
/bin/mknod /dev/pts/1 c 136 1
/bin/mknod /dev/pts/2 c 136 2
/bin/mknod /dev/pts/3 c 136 3
/bin/mknod /dev/pts/4 c 136 4
/bin/mknod /dev/pts/5 c 136 5
/bin/mount -t devpts devpts /dev/pts
ln -s /dev/ts0 /dev/h3600_tsraw
mknod /dev/buttons c 254 0
mkdir /dev/fb
ln -s /dev/fb0 /dev/fb/0
mkdir /dev/v4l
ln -s /dev/video0 /dev/v4l/video0
/sbin/hwclock -s
hostname -F /etc/sysconfig/HOSTNAME
/sbin/ifconfig lo 127.0.0.1
#config network by manual work
/sbin/ifconfig eth0 192.168.1.168


到此,一个最基本的文件系统就做好了。
做成yaffs映象


mkyaffsimage _install utu2440.yaffs
烧到开发板上,再做一些小的调整就可以了。

如果需要做域名解析,新建/etc/resolv.conf,内容为nameserver DNS服务器地址。

参考资料

[1]成功使用busybox制作yaffs根文件系统 http://blog.chinaunix.net/u2/77911/showart_1218594.html
[2]busybox-1.7.0制作yaffs根文件系统http://linux.chinaunix.net/techdoc/system/2008/08/23/1027174.shtml
[3]mdev的使用方法和原理 http://blog.csdn.net/hugerat/archive/2008/12/03/3437099.aspx
[4]<嵌入式Linux系统开发技术详解--基于ARM>,孙纪坤 张小全编著,人民邮电出版社

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics