前言
上文我们讲述了uboot编译及配置,本文讲述了如何编译kernel,对编译过程中遇到的问题进行解决
一、安装依赖
sudo apt install git wget make gcc flex bison libssl-dev bc kmod
二、安装交叉编译器
交叉编译器的安装同上文 Uboot 的编译中安装的交叉编译器一致,这里不再多做解释
三、下载linux源码
1、(默认是zero-5.2.y分支):–depth 1 指拉取最近一次更改,不然会拉取所有更改(警告,数据量爆炸!)
git clone -b zero-5.2.y --depth 1 https://github.com/Lichee-Pi/linux.git
2、修改makefile文件
cd linux vim Makefile [364]ARCH = arm [365]CROSS_COMPILE = arm-linux-gnueabihf- [366]INSTALL_MOD_PATH = out
分别是指定架构,交叉编译器,MOD安装位置。
如果涉及到多个编译链版本,可以不用写入环境变量,在这里直接绝对路径指定。
[365]CROSS_COMPILE = /opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
四、编译linux源码
1、然后开始编译
cd linux make licheepi_zero_defconfig make menuconfig #一般不用修改,需要时单独改 make -j16 make -j16 modules #编译模块 make -j16 modules_install INSTALL_MOD_PATH=out #安装模块 make dtbs #编译设备树
上述make -j16骤报错可参考 4、问题描述及解决办法
2、编译完成后,zImage在arch/arm/boot/下,驱动模块在out/lib下,设备树在arch/arm/boot/dts下。
3、后面我们要使用zImage,sun8i-v3s-licheepi-zero-dock.dtb、sun8i-v3s-licheepi-zero-dock.dts、sun8i-v3s-licheepi-zero.dtb、sun8i-v3s-licheepi-zero.dts文件
4、问题描述及解决办法:
问题描述:
执行make -j16时报如下错误
/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x20): multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
make[1]: *** [scripts/Makefile.host:99:scripts/dtc/dtc] 错误 1
make: *** [Makefile:1280:scripts_dtc] 错误 2
make: *** 正在等待未完成的任务…
解决办法:
vim scripts/dtc/dtc-parser.tab.h 修改extern YYLTYPE yylloc 为yyloc vim scripts/dtc/dtc-lexer.l 修改YYLTYPE yylloc 为 extern XXX yylloc
scripts/dtc/dtc-parser.tab.h
scripts/dtc/dtc-lexer.l