Linux内核编译基本流程(ARM)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

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(设备树)

总结

这里简单的对内核进行配置编译一遍,这些基本上是通用的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值