提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Linux内核编译流程(ARM)
笔者使用 linux-5.4.238、gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf
一、交叉编译器选择
ARM 裸机、 Uboot 移植、 Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器。
笔者使用的是 Linaro 的7.5.0版本的交叉编译器,根据个人需要选择版本(https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/)
二、交叉编译器配置
1.配置环境
- 创建目录并拷贝至该目录
sudo mkdir /usr/local/arm
sudo cp gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f
cd /usr/local/arm
sudo cp gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
- 修改环境变量
sudo vi /etc/profile //打开该文件
export PATH=$PATH:/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin //在最后文件的输入
- 安装相关库
sudo apt-get install lsb-core lib32stdc++6
2.修改顶层Makefile
在Linux内核顶层Makefile文件中定义 ARCH 和 CROSS_COMPILE 变量
ARCH =? arm
CROSS_COMPILE =? arm-linux-guneabinf-
笔者遇到交叉编译软件依旧有问题,这时候把 CROSS_COMPILE 的变量改为绝对地址以后就可以正常编译了。
3. 编译
make ARCH=arm CORSS_COMPILE=arm-linux-gnueabihf- distclean // 清理配置
make ARCH=arm CORSS_COMPILE=arm-linux-gnueabihf- imx_v7_mfg_defconfig // 配置文件,后面文章具体记录
make ARCH=arm CORSS_COMPILE=arm-linux-gnueabihf- menuconfig //配置内核
make ARCH=arm CORSS_COMPILE=arm-linux-gnueabihf- -j12 //编译
修改过顶层Makefile也可不加 ARCH=arm CORSS_COMPILE=arm-linux-gnueabihf-
make clean // 清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件
make distclean // 类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile文件
make menuconfig // 图形化界面配置内核
make all -j12 // 全局编译(-j(n) 让make最多允许n个编译命令同时执行,这样可以更有效的利用CPU资源)
4. 镜像
编译完成后生成两个文件:arch/arm/boots/zImage(镜像)、arch/arm/boots/dts/xxx.dtb(设备树)
总结
这里简单的对内核进行配置编译一遍,这些基本上是通用的。