linux下3.4.1交叉編譯器編譯busybox-1.20.2
一、移植:busybox-1.20.0並且使用strace解決問題
2、解壓:tarxvf busybox-1.20.0.tar.bz2
3、配置:cd busybox-1.20.0
make menuconfig
4、配置選項新增交叉編譯工具:arm-linux-
Busybox Settings --->
Build Options --->
新增交叉編譯工具字首:arm-linux-
5、編譯:make
6、解決錯誤:
錯誤1:
miscutils/ionice.c:23: error:`SYS_ioprio_set' undeclared (first use in this function)
解決方法:將ionice選項去掉
(1)make menuconfig
(2)輸入"/",進入到搜尋框
(3)在搜尋框裡面輸入:ionice,回車
(4)會列出ionice選項的位置
(5)找到ionice選項並去除選中
(6)儲存退出,並且執行:make
錯誤2:
miscutils/nandwrite.c:64: error:dereferencing pointer to incomplete type
解決方法:將nandwrite,nanddump選項去掉
方法同上
錯誤3:
miscutils/ubi_tools.c:67:26:mtd/ubi-user.h: No such file or directory
解決方法:將ubi開頭的選項都去掉
錯誤4:
networking/interface.c:806: error:`ARPHRD_INFINIBAND' undeclared here (not in a function)
networking/interface.c:806: error: initializerelement is not constant
networking/interface.c:806: error: (nearinitialization for `ib_hwtype.type')
在檔案interface.c中加入如下語句
#define ARPHRD_INFINIBAND 32 /* InfiniBand */
這個是從檔案include/linux/if_arp.h中得到
錯誤5:法一、networking/udhcp/dhcpc.c: In function`udhcp_raw_socket':
networking/udhcp/dhcpc.c:821: error:elements of array `filter_instr' have incomplete type
把network下面不要的一堆東西幹掉吧
法二、
我根據提示,改了一下,將/FL2440/usr/local/arm/3.4.1/arm-linux/sys-include/llinux/filter.h中的sock_filter型別的定義改成了
struct sock_filter /* Filter block */
{
unsigned short code; /* Actual filter code */ 原來為__u16
unsigned char jt; /* Jump true */
unsigned char jf; /* Jump false */
unsigned int k; /* Generic multiuse field */
};
或者直接新增標頭檔案 #include <linux/types.h>
錯誤6:
/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45:error: `GFP_KERNEL' undeclared (first use in this function)
/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45:error: (Each undeclared identifier is reported only once
/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45:error: for each function it appears in.)
In file included from/opt/arm/3.4.1/bin/../lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/ext2_fs.h:20,
去掉
Linux System Utilities --->
[ ] mkfs_ext2
[ ] mkfs_vfat
錯誤7:
usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/fd.h:342: error: variable or field `__user'' declared void
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/fd.h:342: error: parse error before ''*'' token
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/fd.h:360: error: parse error before ''}'' token
解決方法:
在/usr/local/arm/3.4.1/arm-linux/sys-include/linux/fd.h檔案中新增#include <linux/compiler.h>