STMCU小助手
发布时间:2022-9-21 14:46
|
介绍 硬件:正点原子MP157开发板' G- E, t7 I% m 烧录了出厂系统以后按照正点原子的文档测试一下基本的硬件功能是否正常以后就需要自己动手开发一些小东西,比如说添加其他硬件驱动、更换非正点原子的配件或者测试自己的QT小程序等等操作,而这些就需要修改到我们的代码部分了,常改的包括kernel内核 dts配置 或者QT根文件系统等等。因为正点原子出厂的系统相应的驱动支持还比较全面,所以本章节来编译正点原子提供的出厂uboot kernel代码,原子的出厂源码中给了linux5.4.31 uboot tfa三个部分的源码,但是tfa基本不会有修改,所以这个镜像直接使用出厂提供的镜像就好。然后烧录到开发板观察运行是否正常,同时用nfs来挂载根文件系统,为后续开发开一个头。# Z S8 q$ a# `& t: @) P 9 [0 y+ M& K; B$ Q 编译uboot' I% n4 V* @4 _4 y, E: J- | 原子提供的uboot出厂源码路径为:STM32资料\【正点原子】STM32MP157开发板(A盘)-基础资料\01、程序源码\01、正点原子Linux出厂系统源码。将u-boot-stm32mp-2020.01-g00f14581-v1.4.tar.bz2 拷贝到Ubuntu虚拟机,然后解压文件:0 s( a$ g$ e4 a# U8 ] tar -vxf u-boot-stm32mp-2020.01-gdb8d2374-v1.0.tar.bz2
! B! r! O6 ^' q; D 解压后源码目录下有一个build.sh,直接执行即可编译,build.sh其实主要就是配置编译uboot,详细内容如下:- s; ~# R: B1 ^4 r) d9 f% d5 M 3 j! Y+ b( D% Z. r. Y1 r
uboot编译成功以后在uboot代码目录下得到u-boot.stm32,可以使用这个文件替换出厂镜像刷机包里面的uboot镜像,测试能否正常启动。' m$ b# G" a0 X3 z3 P/ ~& u % Z" t: N6 A r0 h1 [ 编译kernel dtb; y! X1 \. J" ^, ~% p/ U- K+ m3 C 原子提供的内核出厂源码路径为: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 4 k/ v$ D7 N8 }$ c( W& o6 |% G% @
源码路径下也有一个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挂载根文件系统) U2 B( n& k$ R3 u4 S' F 在正点原子的出厂镜像里面放置的有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 ) P3 t6 ?. F0 Q+ Z7 w! m: R8 }- s 解压以后需要将上面内核编译出来的模块放到根文件系统的lib/modules路径下,这样开机的时候才会自动加载kenrel module。 cp modules.tar.bz2 ~/work/nfs/rootfs/lib/modules3 D3 F4 h" W% ~$ Z! x2 c" n1 c! y tar -vxjf modules.tar.bz2: v6 @& Q. y5 Y7 L2 |+ y7 t 如下图: : f: Y% O+ ~8 q0 N9 l1 W
! ?% r8 g( b1 Y* H: h# Y 这样uboot 内核 根文件系统都有了,下面先将我们的uboot烧进开发板,将我们编译的u-boot.stm32替换掉出厂镜像里面的u-boot.stm32,重新使用STM32CubeProgrammer来烧录固件。使用我的uboot能够成功启动内核,且串口输出的时间也为我编译的时间,2021.11.2晚上21.53。1 R( y3 G1 ^/ m! ~ 6 _' g8 ~ |& ^, Z, s
. q4 N2 j% _9 E e: n# a$ g6 h 下面就需要配置uboot的相关参数 为tftp 下载内核 dtb然后nfs挂载根文件系统。 主要配置如下:4 F( f1 W6 T: ]6 p5 G- ?/ N7 X 4 Y) b: `8 C) k* Z
注意上述配置中的ip和路径都需要更改为自己的路径,不能直接复用的路径,不然肯定会启动失败。. G0 ~# q* |; R 如果想重新从emmc启动的话只需要修改bootargs 和bootcmd 的配置即可:& ]3 W. F2 E: m3 h2 \# U1 Y - j9 D; u! \6 z3 T. q
遗留问题: 1.为什么直接使用原子提供的根文件系统? 方便,有现成的就先用,等开发结束了以后可以使用buildroot来制作我们的根文件系统,而且原子的这个文件系统比较大,太占内存,很多模块我们开发产品过程中根本用不到,先用这个验证,最后再说。 2.我的uImage和dtb文件现在是用tftp下载来调试的,怎么刷到emmc中从开发板启动验证呢? 可以将uImage和dtb打包成ext4文件,原子出厂镜像中的atk-image-bootfs.ext4这个其实就是uImage和dtb打包制作完成的,大致步骤如下: 将stm32mp157d-atk.dtb和uimage放入bootfs文件夹并进入文件夹执行如下指令: J; f. F5 z$ P$ u) H7 M
即可得到my-bootfs.ext4,根文件系统同理,打包生成即可。 ———————————————— 版权声明:TNT_TT6 i; G/ Q$ B; n \. `' v / O4 V! Z4 D1 H * {' |4 F9 d* c0 r/ a |
STM32MP157双A核Linux + 自研RTOS双系统镜像免费下载
扩展STM32微处理器,实现高性价比、低功耗和灵活性能
STM32MP1 自举程序编程:USB DFU/USART 协议全解析
兔哥心中的ST中文论坛
我心中的ST中文论坛
STM32 开发者指南:ST.com 全新 MCU 产品阵容视觉布局深度解析
深度拆解 STM32MP1 Boot 链路
STM32串口自动识别波特率的原理
STM32MP135 MP157 MP257 CoreMark移植&&跑分对比&&多核心负载不均衡问题排查与解决
STM32--STM32 微控制器详解
微信公众号
手机版