交叉編譯基於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
解決辦法:
引起原因是由於GNU90和C99不相容的問題,解決辦法:將/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:中68、69註釋掉(方法待定,不確定是否以後會不會遇到問題)
後來歷經周折終於編譯通過了,特此宣告:以上的問題都不是問題,如果您也遇到了以上的問題,那麼就說明是您的核心版本,交叉編譯工具版本,和主機核心版本之間不相容。
後來我選擇則ubuntu-14.04(核心版本3.13.8)作為主機,編譯的核心版本linux-3.13.8,交叉編譯工具的版本是4.8,順利完成編譯:
您頂多會遇到上邊這個問題,那是因為uboot中製作uimage的工具沒有找到,
安裝一下再次編譯:
編譯完成: