一.环境
1.主机:ubuntu20.04
2.内核版本:linux5.11.11
3.交叉编译工具链:arm-linux-gnueabihf-gcc
4.目标平台:imx6ull主板
内核源码和交叉编译工具的下载安装不再赘述,直接上步骤
二.步骤
1.安装编译内核需要的依赖:
sudo apt install libncurses5-dev
sudo apt install openssl
sudo apt install libssl-dev
sudo apt install build-essential
sudo apt install pkg-config
sudo apt install libc6-dev
sudo apt install bison
sudo apt install flex
sudo apt install libelf-dev
sudo apt install zlibc
sudo apt install minizip
sudo apt install libidn11-dev
sudo apt install libidn11
sudo apt install qttools5-dev
sudo apt install liblz4-tool
2.准备平台配置文件:
到
./linux-5.11.11/arch/arm/configs
目录,找到我对应的配置文件。硬件型号是NXP的IMX6,所以将
imx_v6_v7_defconfig
文件拷贝到./linux-5.11.11目录下
3.修改源码的根目录下的Makefile:
找到如下行
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
改为
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-
arm
即要编译到的目标平台,
arm-linux-gnueabihf-
为交叉编译工具的前缀,我的Makefile里没有第二行,我就直接加上了,无影响
4.利用Makefile编译平台配置文件
make imx_v6_v7_defconfig
报错
清除一下之前编译的中间文件即可解决
make clean
重新编译
在linux源码目录会产生一个.config文件
另外,这个文件在当前Ubuntu系统/boot目录也能找到,如果是更新系统内核,可以用这个文件,可通过
cp /boot/(uname -r).config
命令复制到源码目录使用。但是我们是编译给ARM平台使用,所以不使用。
5.编译内核
执行如下指令,通过图形界面配置内核
make menuconfig
选择
< Load >
,可以看到用的就是
.config
这个文件,无需修改,按Esc退出即可
执行编译指令,开始编译内核
make -j4 zImage
j4是用了4个核来执行编译,根据自己电脑情况选择,zImage是要生成的内核文件名称
当然,编译内核的路途的是坎坷的,不报错显得不正常,不过还好,我这里只有一个错误
缺啥补啥就是了,安装一下gmp软件
sudo apt-get install libgmp3-dev
6.然后一切交给电脑
去上个厕所…
大功告成!