嵌入式 Linux 开发 4:编译内核

了解编译内核的需求

如果按 嵌入式 Linux 开发 3:搭建开发环境 安装交叉工具链和配置环境变量妥当的话,编译内核比较容易,因为内核结构合理并且不依赖外部文件。

首先要想清楚编译内核的需求,大部分情况下是添加某些功能(如:添加 ppp 通信,添加 yaffs 文件系统,添加某个驱动等)。因此对 Linux 内核组件了解得越清楚,编译就越轻松。

小窍门:Linux 内核配置选项有依赖关系,可能会导致编译失败。先拿默认选项编译通过,再每次仅修改 1 个选项进行编译,这种稳健的做法可大大降低出错的概率。

编译内核步骤

  • 解压内核源代码
tar zxvf ./linux-src-8fc93fc.tar.gz
cd imx_4.1.15_2.0.0_ga_rc3/
  • 导入默认配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6y2c_defconfig
  • 选择内核菜单
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

小窍门:执行 diff ./.config ./.config.old 查看改动的配置选项。

  • 编译内核
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all

保存内核文件

一般需要保存 4 个内核配置文件:经压缩的内核镜像(zImage),未压缩的内核镜像(vmlinux),内核符号对应文件(System.map),配置文件(.config)。

cp -vf ./arch/arm/boot/zImage $PRJROOT/images/kernel/
cp -vf ./vmlinux $PRJROOT/images/kernel/
cp -vf ./System.map $PRJROOT/images/kernel/
cp -vf ./.config $PRJROOT/images/kernel/

恢复备份配置

变更内核配置会破坏 .config 文件,如果保存了配置文件,按下面步骤可以随时恢复内核编译。

cp -vf $PRJROOT/images/m6y2c_kernel/.config ./
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- oldconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all

小窍门:如果需要在【正常工作】的 .config 添加新配置,请将上面的 oldconfig 替换为 menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

清理内核

make 目标 清理力度
clean 删除所有生成的目标文件,但保留 .config
mrproper 在 clean 基础上,删除 .config 和一些与体系结构相关的文件和符号链接
distclean 在 mrproper 基础上,删除编辑器备份文件,补丁文件和其他文件,使源码树变为最原始的状态
posted @ 2022-09-22 13:29  KevinAshton  阅读(171)  评论(0编辑  收藏  举报