嵌入式 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 基础上,删除编辑器备份文件,补丁文件和其他文件,使源码树变为最原始的状态 |
分类:
嵌入式 Linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix