硬件平台:XC2440
主机系统:ubuntu9.10
交叉编译器:4.1.2
编译这个busybox主要是为了巩固并记录一下编译器过程,当然主要是记录一些问题。
首先下载并解压源码,按照官方的分为三步
make menuconfig 进行配置以生成.config
make 编译
make install 安装,需要指定安装位置,也可以在第一步的配置中指定。
如果真有那么顺利就好了。我配置好后执行make的时候提示有好几个错误,第一个就是mtd/mtd-user.h文件找不到。
解决办法:cp /usr/include/mtd/ include/mtd/ -a
然后重新编译,又说struct mtd_info_user中没有定义成员writesize,找到struct mtd_info_user结构体,在后面加入一个成员uint32_t writesize;这个问题解决掉。
再编译,双出现一个问题。提示rfkill的一堆错误,这个估计也没什么用,直接make menuconfig取消掉这个,再编译,等一下就是下面的输出,那么编译就完成了
这是最终编译完成
Trying libraries: crypt m
Library crypt is not needed, excluding it
Library m is needed, can't exclude it (yet)
Final link with: m
libbusybox: 0_lib/libbusybox.so.1.20.0
busybox linked against libbusybox: 0_lib/busybox
Linking individual applets against libbusybox (see 0_lib/*)
DOC busybox.pod
DOC BusyBox.txt
DOC busybox.1
DOC BusyBox.html
注意CROSS_COMPILE可以在Makefile中指定,也可以在make menuconfig配置的时候指定路径 ,安装路径也是。
make CONFIG_PREFIX=/指定路径 install 就可以安装了。
安装完后输出
--------------------------------------------------
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
--------------------------------------------------
进入安装目录会发现bin linuxrc sbin usr这几个文件
进入安装目录,创建dev目录并手动创建两个设备节点。
mkdir dev
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
mkdir etc
vi etc/inittab输入
console::askfirst:-/bin/sh
保存退出
创建lib目录,并将交叉编译工具中的库文件拷过来,保持动态链接,加-d
cp 交叉工具路径/lib/*.so*/ 安装路径下面的lib -d
至此最小根文件系统已建立 可以用mkyaffs2image工具进行制作yaffs2文件系统
进行完善
mkdir proc
mkdir etc/init.d
vi etc/init.d/rcS
mount -t proc /proc
chmod +x etc/init.d/rcS
还可以用mount -a的方法,它会去读/etc/fstab
vi etc/fstab
proc /proc proc defaults 0 0
保存退出。
还有其他要完善的功能,网上很多就不说了。
由于我是用网络文件系统,所以我配置busybox的时候没怎么裁剪,能选的基本上全选择了。最终生成的yaffs2文件系统有30多兆。
现在通过NFS起根文件系统,调试程序也方便很多。
其实刚在使用时发现卸载*.ko的模块时会出问题。说是找不到相关的命令,解决办法:在文件系统的lib目录下添加空目录modules/2.6.37.4,其中后面的那个LINUX版本号根据你自己编译的时候用的哪个就写哪个。
阅读(9871) | 评论(0) | 转发(0) |