Linux的U-Boot、Kernel & DTB、Rootfs移植为传统内核裁剪的“三巨头”,这几部分的原理在之前的I.MX6Q教程中已经学过,总体没什么大变化,所以后续部分的原理都跳过,直接进行移植。这部分不太熟悉的可以参考原子哥的教程进行了解。
0.U-Boot图形化配置
上一节的U-Boot收尾。进入 uboot 根目录,使用如下命令:
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- stm32mp15_my_trusted_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- menuconfig
#如果在Makefile中定义过ARCH和CROSS_COMPILE参数,可以简化
make stm32mp15_my_trusted_defconfig
make menuconfig
进入图形化U-Boot配置工具:
按照教程使能dns,然后按照上节内容做成fip.bin,烧写到开发板中即可。
一、Kernel移植
新版本Kernel移植部分没有太大变化,可以直接按照原子哥的教程走。参考《STM32MP157嵌入式Linux驱动开发指南》第十七章 Linux内核移植 - 知乎 (zhihu.com),这里也直接简化叙述。
①解压官方Linux内核源码压缩包,并打上补丁。
②编译出.config后对此文件也打上补丁
③拷贝.config到arch/arm/configs目录下,作为自己的defconfig文件
④修改Makefile后进行编译、烧写、启动。
编译生成的文件在源码目录/arch/arm/boot目录下,有两个文件需要使用,uImage和xxxx-ed1.dtb,可以使用tftp从网络下载到内存启动,也可以打包成ext4格式,通过CubePro烧写后启动。建议等后续制作完rootfs之后一起打包烧写。
注:
1.编译时可能会提醒:"mkimage" command not found - U-Boot images will not be built
解决方法:安装mkimage工具:sudo apt-get install uboot-mkimage,如果使用的ubuntu系统较新,找不到mkinage工具,则安装u-boot-tools:sudo apt-get install u-boot-tools
2.在Linux5.15版本内核中,已经添加了YT8511的相关驱动,所以不需要再移植原子哥提供的驱动文件,直接在menuconfig中使能即可。
运行结果:
二、制作根文件系统
①下载busybox,进行解压,修改交叉编译工具链(如果不知道绝对路径,可以使用whereis arm-none-linux-gnueabihf-gcc查找),设置中文字符支持。
②按照原子哥教程创建各种文件夹,并将所需要的文件粘贴进去
运行结果:
测试正常后,将uImage、设备树和rootfs打包成ext4文件,烧写到开发板中。一个适配开发板的最小linux系统就移植完成了。
不过建议在学习完TF-A、U-Boot和Kernel的移植,以及制作ext4的方法后,将emmc中的镜像烧写回原子哥的出场镜像。因为新移植的系统主频不太正常,还需要修改;另外Kernel中只启动了一个A7核,另一个A7核以及M4核都未启动,可能会影响后续的学习。且在后续的学习中,大多数情况挂载nfs进行开发,有需要启动新镜像时,使用tftp下载到内存中启动即可,不影响emmc中的文件。