
介绍 硬件:正点原子MP157开发板 烧录了出厂系统以后按照正点原子的文档测试一下基本的硬件功能是否正常以后就需要自己动手开发一些小东西,比如说添加其他硬件驱动、更换非正点原子的配件或者测试自己的QT小程序等等操作,而这些就需要修改到我们的代码部分了,常改的包括kernel内核 dts配置 或者QT根文件系统等等。因为正点原子出厂的系统相应的驱动支持还比较全面,所以本章节来编译正点原子提供的出厂uboot kernel代码,原子的出厂源码中给了linux5.4.31 uboot tfa三个部分的源码,但是tfa基本不会有修改,所以这个镜像直接使用出厂提供的镜像就好。然后烧录到开发板观察运行是否正常,同时用nfs来挂载根文件系统,为后续开发开一个头。 编译uboot 原子提供的uboot出厂源码路径为:STM32资料\【正点原子】STM32MP157开发板(A盘)-基础资料\01、程序源码\01、正点原子Linux出厂系统源码。将u-boot-stm32mp-2020.01-g00f14581-v1.4.tar.bz2 拷贝到Ubuntu虚拟机,然后解压文件: tar -vxf u-boot-stm32mp-2020.01-gdb8d2374-v1.0.tar.bz2 ![]() 解压后源码目录下有一个build.sh,直接执行即可编译,build.sh其实主要就是配置编译uboot,详细内容如下: ![]() uboot编译成功以后在uboot代码目录下得到u-boot.stm32,可以使用这个文件替换出厂镜像刷机包里面的uboot镜像,测试能否正常启动。 编译kernel dtb 原子提供的内核出厂源码路径为:STM32资料\【正点原子】STM32MP157开发板(A盘)-基础资料\01、程序源码\01、正点原子Linux出厂系统源码。将linux-5.4.31-g732ac575a-v1.6.tar.bz2 拷贝到Ubuntu虚拟机,然后解压文件: tar -vxjf linux-5.4.31-gb8d3ec3ac-v1.1.tar.bz2 ![]() 源码路径下也有一个build.sh,直接执行编译以后会报错导致编译中断,看build.sh使用的是Yocto SDK里的GCC 9.3.0交叉编译器,怀疑是交叉编译器版本不匹配,不清楚原子他们是怎么编过的,修改build.sh使用arm的交叉编译工具链,然后make后面都添加ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- ,测试能够正常编译并且在kernel根路径下生成tmp文件夹包含我们所需的镜像,下面是修改后的build.sh ![]() 生成的文件在tmp文件夹下: ![]() NFS挂载根文件系统 在正点原子的出厂镜像里面放置的有QT5.12.9的根文件系统,路径是:E:\STM32资料\【正点原子】STM32MP157开发板(A盘)-基础资料\08、系统镜像\02、出厂系统镜像\06、Qt5.12.9文件系统 ,把atk-image-qt5.12.9-rootfs.tar.bz2这个文件系统拷贝到Ubuntu的nfs挂载路径下,然后接压: tar -vxjf qt5.12.9-rootfs.tar.bz2 解压以后需要将上面内核编译出来的模块放到根文件系统的lib/modules路径下,这样开机的时候才会自动加载kenrel module。 cp modules.tar.bz2 ~/work/nfs/rootfs/lib/modules tar -vxjf modules.tar.bz2 如下图: ![]() 这样uboot 内核 根文件系统都有了,下面先将我们的uboot烧进开发板,将我们编译的u-boot.stm32替换掉出厂镜像里面的u-boot.stm32,重新使用STM32CubeProgrammer来烧录固件。使用我的uboot能够成功启动内核,且串口输出的时间也为我编译的时间,2021.11.2晚上21.53。 ![]() 下面就需要配置uboot的相关参数 为tftp 下载内核 dtb然后nfs挂载根文件系统。 主要配置如下:
注意上述配置中的ip和路径都需要更改为自己的路径,不能直接复用的路径,不然肯定会启动失败。 如果想重新从emmc启动的话只需要修改bootargs 和bootcmd 的配置即可:
遗留问题: 1.为什么直接使用原子提供的根文件系统? 方便,有现成的就先用,等开发结束了以后可以使用buildroot来制作我们的根文件系统,而且原子的这个文件系统比较大,太占内存,很多模块我们开发产品过程中根本用不到,先用这个验证,最后再说。 2.我的uImage和dtb文件现在是用tftp下载来调试的,怎么刷到emmc中从开发板启动验证呢? 可以将uImage和dtb打包成ext4文件,原子出厂镜像中的atk-image-bootfs.ext4这个其实就是uImage和dtb打包制作完成的,大致步骤如下: 将stm32mp157d-atk.dtb和uimage放入bootfs文件夹并进入文件夹执行如下指令
即可得到my-bootfs.ext4,根文件系统同理,打包生成即可。 ———————————————— 版权声明:TNT_TT |
基于STM32MP1和STM32MP2在嵌入式Linux平台上部署有效的安全保护机制
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
STM32MP1 WiFi连接
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记之optee 如何加载CORTEX-M核和使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU 安全启动》课程学习心得+开启一扇通往嵌入式系统安全领域深处的大门。
《STM32MPU安全启动》 课程学习心得