一、简介

本文主要介绍在编译内核中常见的报错问题的处理方法,编译过程中的主要报错有缺少本地依赖库、config设置、gcc版本与内核版本不匹配、内核源文件版本问题等,具体问题请看第二章。

二、常见报错

1、CC arch/arm/kernel/asm-offsets.s

cc1: error: invalid option `abi=aapcs-linux'

make[1]: *** [arch/arm/kernel/asm-offsets.s] Error 1

make: *** [prepare0] Error 2

//解决方法:上述的关掉EABI选项可以通过测试(Kernel Features->Use EABI)

2、drivers/video/console/vgacon.o:987:warning:comparison is always true due to limited range of data type

make[3]:***[drivers/video/console/vgacon.o] error 1

make[2]:***[drivers/video/console2] error 2

make[1]:***[drivers/video1] error 2

make:***[drivers] error 2

//解决方法:在make menuconfig 时Device Drivers → Graphics support → Console display driver support →VGA text console(不选这个)

3、出现/usr/local/arm/bin/arm-linux-ld:arch/arm/kernel/vmlinux.lds:782: parse error

make:***[.tmp_vmlinux1] Error 1这类错误

//解决方法:修改arch/arm/kernel/vmlinux.lds

[arm@localhost linux2.6.14]$vi arch/arm/kernel/vmlinux.lds

//将文件尾2条的ASSERT注释掉(1439行)

ASSERT((__proc_info_end __

proc_info_begin), "missing CPU support")

ASSERT((__arch_info_end __

arch_info_begin), "no machine record defined")

//原因:binutils版本太旧

4、 常见依赖包缺失报错,如libssl-dev、openssl-devel、libncurses5-dev、bison、flex,具体如下:

1) make menuconfig

/usr/bin/ld: cannot find -lncurses

//解决办法:sudo apt-get install libncurses5-dev

2)[root@localhost *内核目录*]# make -j4

HOSTCC scripts/extract-cert

scripts/extract-cert.c:21:25: 致命错误:openssl/bio.h:没有那个文件或目录

#include

//解决办法:yum install openssl-devel

3)[root@localhost *内核目录*]# make menuconfig

UPD scripts/kconfig/.mconf-cfg

HOSTCC scripts/kconfig/mconf.o

YACC scripts/kconfig/zconf.tab.c

/bin/sh: bison: 未找到命令

make[1]: *** [scripts/kconfig/zconf.tab.c] 错误 127

make: *** [menuconfig] 错误 2

//解决办法:[root@localhost *内核目录*]# yum install bison flex

4)compress.c:14:58: fatal error: zlib.h: No such file or directory

compilation terminated.

//解决办法:sudo apt-get install zlib1g-dev

5)/bin/sh: gmake: not found

make[3]: *** [clean] Error 1

//原因:在ubuntu中已经取消掉了gmake,都用make代替。

//解决办法: sudo ln -s /usr/bin/make /usr/bin/gmake

6)“error : openssl/bio.h :No such file or folder

//解决方法:sudo apt-get install libssl-dev

7)Makefile:xxx: recipe for target 'xxx' failed

make[2]:***[arch/arm/boot/compressed/piggy.lzo] Error 1

make[1]: ***[arch/arm/boot/compressed/vmlinux] Error 2

//解决方法:sudo apt-get install lzo lzop

//原因:缺少工具lzo,lzop,LZO是致力于解压速度的一种数据压缩算法

5、在make modules_install时最后几行弹出错误:

if [ -r System.map -a -x /sbin/depmod ]; then /sbin/depmod -ae -F System.map 2.6.12.2; fi

/bin/sh: line 1: 3357 已杀死 /sbin/depmod -ae -F System.map 2.6 .12.2

make: *** [_modinst_post] 错误 137

//解决方法:make module_install之前你是否关闭了selinux,

//原因:该问题是selinux阻止写/lib/modules/ 目录

6、error:unrecognized command line options '-mabi=apcs-gnu'

note: valid arguments to '-mabi=' are: ms sysv

error: unrecognized command line option '-mlittle-endian'

//解决方法:交叉编译工具未指定,加上CROSS_COMPILE=arm-linux- 参数

7、使用内核包编译驱动时常常提示如下:

WARNING: Symbol version dump /usr/src/linux-2.6.26/Module.symvers is missing; modules will have no dependencies and modversions.

//原因:通常头核心包中是没有Module.symvers这个文件的,要想获取这个文件只能到下载相同版本核心(2.6.26-1-686)的头文件,只有下载的头文件中才有这个Module.symvers。

//解决方法:把Module.symvers 复制到核心包中,然后执行如下步骤:make oldconfig && make prepare && make scripts。

//然后重新编译驱动,将解决这个warning,同时也解决了版本不正确的问题

make 命令默认执行的是 make all,make all 有四个阶段: prepare test compile package make prepare : 只会执行prepare阶段,这个阶段主要是下载编译依赖 make test : 只会执行test阶段,这个阶段主要是做单元测试 make compile : 只会执行compile阶段,这个阶段主要是进行编译 make package : 只会执行packege阶段,这个阶段会把编译产出都copy到output目录中 make install : 只会执行install阶段,这个阶段是把编译产出放到$GOPATH/bin目录下,这个不是必须的 make clean : 只会执行clean阶段,这个阶段把编译输出的一些文件删除,恢复到编译之前的状态

8、fatal error: linux/compiler-gcc7.h: No such file or directory.

提示缺少compiler-gcc7.h这个文件,是由于内核版本较低和我的gcc版本不匹配造成的有三种解决方法:

1.在内核文件夹中include/linux目录下找到compiler-gcc4.h文件,不同内核版本可能不一样,也有可能是compiler-gcc3.h,将它重命名为compiler-gcc7.h。然后重新编译一下就好了。

2.在新的内核源码中拷贝一个compiler-gcc7.h,将它拷贝到内核文件夹include/linux目录下,重新编译即可。

3.重装一个版本低一点的gcc。

9、在进行make oldconfig时出现,code model kernel does not support PIC mode的错误

解决方法如下:

在源码的根目录下的Makefile中的KBUILD_CFLAGS中添加一个编译选项-fno-PIE

三、其他相关链接

1、交叉编译linux内核详细总结

2、gcc交叉编译工具链制作

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。