xx-准备工作
通过repo把imx6ull的sdk拉下来,主要包含kernel,toolchain,uboot,buildroot几个东西。
环境配置
在~/.bashrc中加入一下内容:
export PATH=$PATH:/mnt/2Thdd/wds/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
保存后,source ~/.bashrc一下,使上面导出的环境变量在当前终端生效。
编译内核
进入内核目录后,依次执行:
make mrproper
make 100ask_imx6ull_defconfig
make zImage -j12
#如果使用CLion阅读内核代码可以替换为
bear -- make zImage -j12 # bear如果未安装则apt安装之
make dtbs
解释下:
-
make mrproper
深度清理内核编译目录,内核Makefile常用的清理目标有:- clean
删除大多数编译生成的文件(如.o文件、.cmd文件、内核映像等),但保留配置文件(.config)和构建系统需要的文件。 - mrproper
彻底清理,删除所有编译产物以及配置文件(.config),使源码目录恢复到初始状态。 - distclean
在 mrproper 基础上额外清理编辑器/补丁残留文件,进行最彻底的清理。 - modules_clean
仅删除已编译的内核模块(.ko),保留其他编译文件。
- clean
-
make 100ask_imx6ull_defconfig
生成指定配置文件,配置文件按照不同的架构分类保存,通常是在arch/xxx/configs/目录下,其中xxx表示芯片架构,比如imx6ull属于arm的32位架构,所以xxx对应arm,如果是rk3568芯片,则是arm的64位架构,对应arm64。 -
make zImage -j12
生成压缩的可启动内核映像,这个过程是先编译内核生成非压缩的vmlinux,然后使用gzip之类算法将它压缩后,添加自解压头和引导代码,生成一个可直接由系统引导加载器(如uboot)加载的镜像文件。生成的压缩镜像位于arch/xxx/boot/下。对于嵌入式设备,如果对启动时间不太敏感,但是关心存储介质大小,想尽可能用小的存储介质(省钱),那么压缩内核镜像是一个好的方案。 -
bear -- make zImage -j12
如果不是用CLion这类支持编译数据库的IDE,则不须要这样执行编译,这一步是借助bear(Build Ear)这个工具生成编译数据库文件compile_commands.json。 -
make dtbs
生成设备树文件,这里由于目标是dbts,它会将环境变量ARCH(上面一节export的)对应架构的所有设备树文件.dts编译为与之对应的.dtb。设备树文件通常位于arch/xxx/boot/dts目录下。
编译,安装内核模块
make modules -j12
make INSTALL_MOD_PATH=/mnt/2Thdd/wds/staging_dir modules_install
这一步是编译内核模块,并且将生成的内核模块.ko文件安装在指定的目录,方便统一传输到开发板上进行测试。如果不安装,内核模块会分散存储在各个模块源码目录里面,不方便查看和管理。

浙公网安备 33010602011771号