文章目录
- 10. 内核编译
- 20.问题
- 1. 问题1:cc1: error: code model kernel does not support PIC mode
- 2. 问题2:/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
- 3. 问题3:/bin/sh: 1: flex: not found
- 4. 问题4:/bin/sh: 1: bison: not found
- 5. 问题5: scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or directory
10. 内核编译
开发环境
- Ubuntu1804
- gcc // 无交叉编译
编译步骤
- 下载源码:
方式一:官网下载压缩包,或者通过git、https等等下载
方式二:Ubuntu 可以直接通过deb包的形式下载参考命令:
sudo apt-get install linux-source
2 配置编译环境
# 解压到指定路径中
tar -jxvf /usr/src/linux-source-5.4.0.tar.bz2 -C /workspace/
# cd /workspace/
# ln -s linux-source-5.4.0 kernel
- 安装依赖
# 仅供参考:
sudo apt-get install build-essential kernel-package libncurses-dev bison flex libssl-dev libelf-dev
- 默认编译
1. 生成.config
make defconfig // 最小配置
# make menuconfig
# make saveconfig
# make oldconfig
2. 开始编译
make // 无交叉编译环境
3. install等操作
略
20.问题
1. 问题1:cc1: error: code model kernel does not support PIC mode
- 问题:编译module时报错
- 原因:未指定交叉编译器,导致默认的编译器与内核出现一些功能不匹配的报错
- 解决:配置交叉编译环境
参考如下:
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make
2. 问题2:/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
问题:编译报错,首次编译,应该是dtc工具没编译成功
原因:盲猜是本机编译环境问题,我工作的电脑是ubuntu1804和ubuntu2004都没有问题,换成我自己的ubuntu2204就出问题了。
看别人的说法,是gcc版本的问题,降版本就可以,没试过,但是感觉比较靠谱,因为我用的这个内核4.x版本,可能dtc用的编译器也是老版本吧,本机的gcc 11.2.0,可能有新特性吧,没细研究。
解决:看报错,找第一次报错的地方,修改变量作用域。
vi scripts/dtc/dtc-lexer.lex.c
- YYLTYPE yylloc;
+ extern YYLTYPE yylloc;
3. 问题3:/bin/sh: 1: flex: not found
问题 : 编译kernel报错,linux-5.5.19,make menuconfig
liam@VM-0-2-ubuntu:/workspace/kernel/linux-5.5.19$ make menuconfig
HOSTCC scripts/basic/fixdep
UPD scripts/kconfig/mconf-cfg
HOSTCC scripts/kconfig/mconf.o
HOSTCC scripts/kconfig/lxdialog/checklist.o
HOSTCC scripts/kconfig/lxdialog/inputbox.o
HOSTCC scripts/kconfig/lxdialog/menubox.o
HOSTCC scripts/kconfig/lxdialog/textbox.o
HOSTCC scripts/kconfig/lxdialog/util.o
HOSTCC scripts/kconfig/lxdialog/yesno.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
/bin/sh: 1: flex: not found
make[1]: *** [scripts/Makefile.host:9: scripts/kconfig/lexer.lex.c] Error 127
make: *** [Makefile:568: menuconfig] Error 2
原因 :命令缺失
解决 :sudo apt install flex
4. 问题4:/bin/sh: 1: bison: not found
问题 : 编译kernel报错,linux-5.5.19,make menuconfig
$ make menuconfig
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
/bin/sh: 1: bison: not found
make[1]: *** [scripts/Makefile.host:17: scripts/kconfig/parser.tab.h] Error 127
make: *** [Makefile:568: menuconfig] Error 2
原因 :命令缺失
解决 :sudo apt install bison
5. 问题5: scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or directory
问题 :
make -j 20
scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or directory
25 | #include <openssl/opensslv.h>
| ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.host:107: scripts/sign-file] Error 1
make[1]: *** Waiting for unfinished jobs....
HOSTLD scripts/genksyms/genksyms
make: *** [Makefile:1098: scripts] Error 2
make: *** Waiting for unfinished jobs....
原因 : lib库缺失
解决 :sudo apt install libssl-dev