【MCU】U-boot移植到stm32F4,效果杠杠的!

时间:2024-03-17 13:31:15

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

1、聊一聊

    

    本文定在20201024520分为大家准时发出,祝"最后一个bug"的码农朋友们早日实现财富*,走上人生巅峰!

     该文主要分享的是把最新的U-Boot2020移植到stm32F429单片机上,这样一些喜欢单片机平台的小伙伴可以用来研究学习U-boot。

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

2、情景再现

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

bug菌,今天是1024," Happy Code"!

你确定在诚心诚意祝福?不是有点事想问?

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

被你猜到了 ! 【MCU】U-boot2020移植到stm32F4,效果杠杠的! bug菌,我想学习一下Linux,可以目前只对stm32单片机比较熟悉,有没有办法把Linux移植到stm32单片机上来?

可以呀,目前U-boot和Linux内核都对stm32单片有相应的支持了,只是目前大部分stm32单片机都没有MMU,所以基本上跟ucLinux差不多,不过学习研究还是可以的。

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

真的吗 ? 可是我不知道该如何下手,主要是想体验一下u_boot、Linux这些开源的东西,里面的代码都可以白嫖,虽然以后也不会从事这块的工作。

没关系的,我很多朋友都是业余玩玩Linux,bug菌也是业余选手,其实不管学什么、用什么都是源于对代码的热爱!下面我移植最新的U-Boot到stm32F429上,你参考学习一下!

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

好的,小板凳已经准备好了!

1

准备资源 

  • 1 )当然首先你应该有一个Linux编译环境,最方便的做法就是去目前比较热门的几家Linux开发板商白嫖虚拟机,bug菌使用的是VMware虚拟出来的Ubuntu16.04_X64的环境。

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

  • 2 )准备好U-boot源码和对应的工具链

  • U-boot源码路径 : https://ftp.denx.de/pub/u-boot/,并且在该路径中找到最新的u-boot2020,如下图所示并点击下载。

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

  • 工具链路径 : 

  • https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

  • 这里使用最新发布的arm-eabi工具链,如下图所示。

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

2

修改代码匹配单板 

  • 1 ) 首先解压U-boot源码和工具链,在终端对应的压缩包路径中执行"tar -xjvf 文件名"即可完成解压。

       

  • 2 ) 下面我们看看Uboot目前支持哪些stm32单板,定位到U-boot解压路径: Linux/u-boot-2020.10/configs文件夹中可以找到如下配置文件:

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

  • ST官方会发布一些测试单板,那么Uboot便根据这些单板进行相应的开发,如果你使用的是对应的单板,不出意外编译通过即可看到效果。

  • 然而,目前bug菌手上并没有对应的单板,但有一块stm32429IGT6并且扩展了16M的SDRAM,对比了代码stm32F429discovery相对比较接近,于是需要修改源码里面相应参数来进行适配。

  • 其他外设暂时不管,先把时钟和SDRAM移植一下,由于stm32F429discovery采用的是8M晶振,bug菌手上这块是25M晶振,然而目前最新的Uboot也是采用的设备树文件配置,所以这里找到对应的如下图所示dts文,并修改为25M(对应路径为:Linux/u-boot-2020.10/arch/arm/dts)

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

  • 由于我手头上的板子与stm32F429discovery的SDRAM的引脚封装和硬件接法有所不区别,这里需要修改一下引脚,同样是对应的设备树文件,不过这里是u-boot的设备树(在之前的设备树下方)。

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

  • 由于SDRAM挂载429的FMC外设上,所以只需要修改对应的引脚即可,其他配置均相同,这样Uboot就具备了运行的条件。

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

3

编译

  • 1 ) 首先进入Uboot目录,在不安装工具链的情况下,执行命令 : make ARCH=arm CROSS_COMPILE=工具链路径/bin/arm-none-eabi- stm32f429-discovery_defconfig,并且得到如下结果:

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

  • 当然如果你安装了工具链,就不需要指定中间的工具链路径了,这样就完成了编译配置,下面再执行编译过程,直接make。

  • 执行命令:make ARCH=arm CROSS_COMPILE=工具链路径/bin/arm-none-eabi-,并等待编译完成,并生成最后的bin文件:

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

4

烧录并运行

  • 最后我们使用JFlash工具通过Jlink烧录到Flash的0x08000000位置处,来看看最后的效果 : 

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

  • 移植初步完成,当然里面的其他驱动就慢慢学习移植了,enjoy!!!

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

太好了,bug菌,我已把尘封已久的开发板又找出来了,马上玩起来!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

别忘了三连再走哦!

【MCU】U-boot2020移植到stm32F4,效果杠杠的!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

3、结束语

    今天的内容就跟大家分享这里,Uboot本质上就是一个优秀的单片机程序,同时最新的U-Boot借鉴了非常多Linux内核的的框架,大家学习一波源码应该会非常有收获。

    好了,这里是公众号:“最后一个bug”,一个为大家打造的技术知识提升基地,如果你喜欢交流可以添加下方bug菌微信,我拉你加入公众号技术交流群。

【MCU】U-boot2020移植到stm32F4,效果杠杠的!

推荐好文  点击蓝色字体即可跳转

【开源】bug菌把"动态数字显示"开源了!【MCU】U-boot2020移植到stm32F4,效果杠杠的!

【C进阶】同事笑我 : 有了"宏"你还用"枚举"干嘛?【MCU】U-boot2020移植到stm32F4,效果杠杠的!

【C进阶】拿着"sizeof这些用法和坑"去吹牛吧!

☞ 【进阶】同事用#include"xxx.c"把我给惊呆了!!

【MCU】U-boot2020移植到stm32F4,效果杠杠的!