【linux】kernel 编译个人小结

10. 内核编译

开发环境

  1. Ubuntu1804
  2. gcc // 无交叉编译

编译步骤

  1. 下载源码:
    方式一:官网下载压缩包,或者通过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
  1. 安装依赖
# 仅供参考:
sudo apt-get install build-essential kernel-package libncurses-dev bison flex libssl-dev libelf-dev
  1. 默认编译
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

  1. 问题:编译module时报错
  1. 原因:未指定交叉编译器,导致默认的编译器与内核出现一些功能不匹配的报错
  1. 解决:配置交叉编译环境

参考如下:
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


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过得精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值