xx-准备工作

通过repo把imx6ull的sdk拉下来,主要包含kerneltoolchainubootbuildroot几个东西。

环境配置

在~/.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),保留其他编译文件。
  • 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文件安装在指定的目录,方便统一传输到开发板上进行测试。如果不安装,内核模块会分散存储在各个模块源码目录里面,不方便查看和管理。

posted @ 2025-08-12 16:19  thammer  阅读(17)  评论(0)    收藏  举报