主机:ubuntu 8.04 x86_32
交叉编译器:/usr/local/arm/3.4.1/bin/arm-linux-
Busybox版本:busybox-1.13.2.tar.bz2
之前使用3.3.2的编译器出错,难以修改,改用3.4.1的,发现3.3.2的最好用来编译uboot1.1.4,然后内核与busybox使用3.4.1编译!!!!!!!!!
Busybox嵌入式Linux中的瑞士军刀
BusyBox - The Swiss Army Knife of EmbeddedLinux
首先,去http://busybox.net/下载最新版本的busybox,目前最新版为29 November 2008 -- BusyBox1.13.1
解压,进入目录,
make menuconfig
Busybox Settings-->BuildOptions--> Build BusyBox as a static binary (noshared libs) 选上。静态编译,为了以后方便。
在Busybox Settings-->BuildOptions-->Cross Compiler Prefix
填入交叉编译器路径。这里用3.3.2的版本。
由于编译器版本,glibc的版本匹配问题,编译过程中可能会出错。有些错误是莫名其妙的。
编译过程中出现了
In fileincluded from miscutils/watchdog.c:13:
/usr/local/arm/3.3.2/arm-linux/sys-include/linux/watchdog.h:17:error: parse error before "__u32"
/usr/local/arm/3.3.2/arm-linux/sys-include/linux/watchdog.h:19:error: parse error before "identity"
/usr/local/arm/3.3.2/arm-linux/sys-include/linux/watchdog.h:20:error: parse error before '}' token
make[1]: ***[miscutils/watchdog.o] 错误 1
make: ***[miscutils] 错误 2
可是/usr/local/arm/3.3.2/arm-linux/sys-include/linux/watchdog.h相关行
structwatchdog_info {
__u32options;
__u32firmware_version;
__u8identity[32];
};
并没有语法错误,解决办法为,去掉相应选项,
make menuconfig
去掉Miscellaneous Utilities--->里的最后一个watchdog(实际上它是指pc机上的,和我们板子的看门狗没有关系)
继续make
networking/brctl.c: In function `brctl_main':
networking/brctl.c:186: error: `SIOCBRADDBR' undeclared (firstuse in this function)
networking/brctl.c:186: error: (Each undeclared identifier isreported only once
networking/brctl.c:186: error: for each function it appearsin.)
networking/brctl.c:186: error: `SIOCBRDELBR' undeclared (firstuse in this function)
networking/brctl.c:202: error: `SIOCBRADDIF' undeclared (firstuse in this function)
networking/brctl.c:202: error: `SIOCBRDELIF' undeclared (firstuse in this function)
make[1]: ***[networking/brctl.o] 错误 1
make: *** [networking] 错误 2
在3.3.2的编译器/usr/local/arm/3.3.2/arm-linux/sys-include/linux/sockios.h里没有找到
SIOCBRDELBR等相关定义,解决办法:在自己电脑的内核头文件里找到相关定义,并加入。
稍微新一点的内核都应该增加了以下定义,
#defineSIOCBRADDBR 0x89a0
#defineSIOCBRDELBR 0x89a1
#defineSIOCBRADDIF 0x89a2
#defineSIOCBRDELIF 0x89a3
把他们加入到busybox的networking/brctl.c
继续,make
networking/ifenslave.c出错,出错信息太多,直接去掉选项。
接着,networking/interface.o出错,
ARPHRD_INFINIBAND没有定义,
由主机上的内核源码目录include/linux/if_arp.h可知,其值为32
在networking/interface.c合适的地方加上
#defin e ARPHRD_INFINIBAND32
再make,通过编译。
然后make install
在 _install目录下得到所有二进制文件。