认识一些目录,以cc6ul为例: 通常,搭建好环境后,我们会先编译一下镜像,比如:

bitbake core-image-base

编译完成后,记录一下这些目录内容: Linux总目录是这个tmp/work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0,注意,它是总目录,而非内核源码目录,事实上,它下面有一个git目录就是指向内核源码的链接。

Linux内核源码目录位于:tmp/work-shared/ccimx6ulsbc/kernel-source ,这个目录和https://github.com/digi-embedded/linux.git是一样的。

Linux内核编译的结果主要是在,在编译时自动生成的.config就是位于这里: tmp/work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0/build

注意,你需要先编译过镜像,再进入devshell进行内核或设备树修改等操作。进入devshell方法是: bitbake -c devshell virtual/kernel

它会打开一个devshell,默认路径在内核源目录上:tmp/work-shared/ccimx6ulsbc/kernel-source#

如果我们进行make操作,实际上它会进入tmp/work/ccimx6ulsbc-dey-linux-gnueabi/linux-dey/5.4-r0/build 目录来编译,编译的结果也在这个目录下。

  1. 编译设备树

要修改和编译的设备树都在内核源码树下,我们需要在tmp/work-shared/ccimx6ulsbc/kernel-source/arch/arm/boot/dts/Makefile添加新建的设备树 一般插在原来的位置上,比如

        imx6ul-ccimx6ulsbc-id136.dtb \
        imx6ul-ccimx6ulsbc-lvg.dtb \   //这里新添加一个设备树
        imx6ul-ccimx6ulsbc-wb.dtb \
        imx6ul-ccimx6ulsbc-wb-mfg.dtb \ 

然后就可以直接make dtbs

** 如果我们在进入devshell之前没有先编译好镜像,也是可以进行开发的, 为了能正常编译设备树,需要指定平台架构,这实际上也是有好处的,毕竟我们只要自己要开发的平台,让编译器把所有x86和其它厂家相关的东西都编译一遍也是一种浪费。

正常开发流程:

进入devshell
bitbake -c devshell virtual/kernel     
做一些修改 (下面是android,dey可能不一样或是更简)
make ARCH=arm64 CC=clang-10 LD=ld.lld-10 CROSS_COMPILE=aarch64-linux-gnu- ccimx8_android_defconfig
make ARCH=arm64 CC=clang-10 LD=ld.lld-10 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
make ARCH=arm64 CC=clang-10 LD=ld.lld-10 CROSS_COMPILE=aarch64-linux-gnu- savedefconfig
或是cc6ul用
make ARCH=arm ccimx6ul_defconfig
make ARCH=arm menuconfig

如果要编译整个linux内核zImage,直接make, 对cc6要用的uImage则要make LOADADDR=0x10800000 uImage ,\ 生成的内核在arch/arm/boot/zImage

编译设备树只需 make dtbs

生成的设备树:\ arch/arm/boot/dts/imx6ul-ccimx6ulsbc-id135.dtb \ arch/arm/boot/dts/imx6ul-ccimx6ulsbc-wb.dtb \

要清空git区变化,用git clean -dfx

更多参考:https://onedigi.atlassian.net/wiki/spaces/~descalon/pages/22461909723/Kernel+development