1. 程式人生 > >linux下3.4.1交叉編譯器編譯busybox-1.20.2

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>