【MCU】U-boot2020移植到stm32F4,效果杠杠的!
1、聊一聊
该文主要分享的是把最新的U-Boot2020移植到stm32F429单片机上,这样一些喜欢单片机平台的小伙伴可以用来研究学习U-boot。
2、情景再现
1
准备资源
1 )当然首先你应该有一个Linux编译环境,最方便的做法就是去目前比较热门的几家Linux开发板商白嫖虚拟机,bug菌使用的是VMware虚拟出来的Ubuntu16.04_X64的环境。
2 )准备好U-boot源码和对应的工具链
U-boot源码路径 : https://ftp.denx.de/pub/u-boot/,并且在该路径中找到最新的u-boot2020,如下图所示并点击下载。
工具链路径 :
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
这里使用最新发布的arm-eabi工具链,如下图所示。
2
修改代码匹配单板
1 ) 首先解压U-boot源码和工具链,在终端对应的压缩包路径中执行"tar -xjvf 文件名"即可完成解压。
2 ) 下面我们看看Uboot目前支持哪些stm32单板,定位到U-boot解压路径: Linux/u-boot-2020.10/configs文件夹中可以找到如下配置文件:
ST官方会发布一些测试单板,那么Uboot便根据这些单板进行相应的开发,如果你使用的是对应的单板,不出意外编译通过即可看到效果。
然而,目前bug菌手上并没有对应的单板,但有一块stm32429IGT6并且扩展了16M的SDRAM,对比了代码stm32F429discovery相对比较接近,于是需要修改源码里面相应参数来进行适配。
其他外设暂时不管,先把时钟和SDRAM移植一下,由于stm32F429discovery采用的是8M晶振,bug菌手上这块是25M晶振,然而目前最新的Uboot也是采用的设备树文件配置,所以这里找到对应的如下图所示dts文,并修改为25M(对应路径为:Linux/u-boot-2020.10/arch/arm/dts)
由于我手头上的板子与stm32F429discovery的SDRAM的引脚封装和硬件接法有所不区别,这里需要修改一下引脚,同样是对应的设备树文件,不过这里是u-boot的设备树(在之前的设备树下方)。
由于SDRAM挂载429的FMC外设上,所以只需要修改对应的引脚即可,其他配置均相同,这样Uboot就具备了运行的条件。
3
编译
1 ) 首先进入Uboot目录,在不安装工具链的情况下,执行命令 : make ARCH=arm CROSS_COMPILE=工具链路径/bin/arm-none-eabi- stm32f429-discovery_defconfig,并且得到如下结果:
当然如果你安装了工具链,就不需要指定中间的工具链路径了,这样就完成了编译配置,下面再执行编译过程,直接make。
执行命令:make ARCH=arm CROSS_COMPILE=工具链路径/bin/arm-none-eabi-,并等待编译完成,并生成最后的bin文件:
4
烧录并运行
最后我们使用JFlash工具通过Jlink烧录到Flash的0x08000000位置处,来看看最后的效果 :
移植初步完成,当然里面的其他驱动就慢慢学习移植了,enjoy!!!
3、结束语
今天的内容就跟大家分享这里,Uboot本质上就是一个优秀的单片机程序,同时最新的U-Boot借鉴了非常多Linux内核的的框架,大家学习一波源码应该会非常有收获。
好了,这里是公众号:“最后一个bug”,一个为大家打造的技术知识提升基地,如果你喜欢交流可以添加下方bug菌微信,我拉你加入公众号技术交流群。
推荐好文 点击蓝色字体即可跳转
☞ 【进阶】同事用#include"xxx.c"把我给惊呆了!!