1. 程式人生 > >交叉編譯基於ARM架構的linux-3.6核心遇到的問題及解決方法

交叉編譯基於ARM架構的linux-3.6核心遇到的問題及解決方法

編譯linux-3.6核心:

安裝交叉編譯工具:arm-linux-gnueabi-gcc

下載並解壓linux-3.6原始碼

清楚原始碼中的無用的編譯檔案:makeclean清除除了config之外的所有編譯出來的文件,makemrproper將配置的config也一併清除掉

配置核心(選擇編譯的版本)makemenuconfig ARCH=arm

編譯核心:make-j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

謹慎使用make clean命令

錯誤總結:

q1:

drivers/i2c/busses/i2c-piix4.c:551:9:error: implicit declaration of function ‘kzalloc’[-Werror=implicit-function-declaration]

adap =kzalloc(sizeof(*adap), GFP_KERNEL);

^

drivers/i2c/busses/i2c-piix4.c:551:7:warning: assignment makes pointer from integer without a cast[-Wint-conversion]

adap =kzalloc(sizeof(*adap), GFP_KERNEL);

^

drivers/i2c/busses/i2c-piix4.c:561:11:warning: assignment makes pointer from integer without a cast[-Wint-conversion]

adapdata =kzalloc(sizeof(*adapdata), GFP_KERNEL);

^

drivers/i2c/busses/i2c-piix4.c:563:3:error: implicit declaration of function ‘kfree’[-Werror=implicit-function-declaration]

kfree(adap);

^

cc1: some warningsbeing treated as errors

make[3]: ***[drivers/i2c/busses/i2c-piix4.o] Error 1

make[2]: ***[drivers/i2c/busses] Error 2

make[1]: ***[drivers/i2c] Error 2

make[1]: *** Waitingfor unfinished jobs....

make: *** [drivers]Error 2

解決辦法:找到出現錯誤的原始檔drivers/i2c/busses/i2c-piix4.c,在標頭檔案中新增一個#include<linux/slab.h>

q2:

lib/mpi/generic_mpih-mul1.o:In function `mpihelp_add_1':

/home/mrk/Projects/linux-3.6/lib/mpi/mpi-inline.h:39:multiple definition of `mpihelp_add_1'

lib/mpi/generic_mpih-lshift.o:/home/mrk/Projects/linux-3.6/lib/mpi/mpi-inline.h:39:first defined here

/home/mrk/Projects/linux-3.6/lib/mpi/mpi-inline.h:110:multiple definition of `mpihelp_sub'

lib/mpi/generic_mpih-lshift.o:/home/mrk/Projects/linux-3.6/lib/mpi/mpi-inline.h:110:first defined here

make[2]: ***[lib/mpi/mpi.o] Error 1

make[1]: ***[lib/mpi] Error 2

make: *** [lib]Error 2

解決辦法:

引起原因是由於GNU90C99不相容的問題,解決辦法:將/mpi/mpi-inline.h標頭檔案中extentinline替換成staticinline

q3

drivers/scsi/osd/osd_initiator.c:In function ‘build_test’:

drivers/scsi/osd/osd_initiator.c:68:2:error: size of unnamed array is negative

BUILD_BUG_ON(sizeof(struct osdv2_cdb) != OSD_TOTAL_CDB_LEN);

^

drivers/scsi/osd/osd_initiator.c:69:2:error: size of unnamed array is negative

BUILD_BUG_ON(sizeof(struct osdv1_cdb) != OSDv1_TOTAL_CDB_LEN);

^

make[3]: ***[drivers/scsi/osd/osd_initiator.o] Error 1

make[2]: ***[drivers/scsi/osd] Error 2

make[2]: *** Waitingfor unfinished jobs.…

解決辦法:

drivers/scsi/osd/osd_initiator.c:6869註釋掉(方法待定,不確定是否以後會不會遇到問題)

後來歷經周折終於編譯通過了,特此宣告:以上的問題都不是問題,如果您也遇到了以上的問題,那麼就說明是您的核心版本,交叉編譯工具版本,和主機核心版本之間不相容。

後來我選擇則ubuntu-14.04(核心版本3.13.8)作為主機,編譯的核心版本linux-3.13.8,交叉編譯工具的版本是4.8,順利完成編譯:



您頂多會遇到上邊這個問題,那是因為uboot中製作uimage的工具沒有找到,


安裝一下再次編譯:


編譯完成: