返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[活动专区] 【AT-START-F457测评】zephyr rtos移植思路与实操

[复制链接]
269|0
xhackerustc 发表于 2026-1-31 12:34 | 显示全部楼层 |阅读模式
#申请原创#


@21小跑堂


如上篇文章所述,Artery官方对开源支持得非常好,除openocd、tinyusb外,Artery官方还支持了zephyr rtos。不过测评活动开始时,Artery官方的github仓库还没有AT32F457的支持,事实上笔者做完第一篇环境搭建以后还没有,所以笔者这段时间一直顺着Artery官方的思路做着AT32F457的移植,笔者独立把uart、gpio、flash等都移植好并测试好了,直到前两天查询Artery的github仓库,发现Artery工程师已经把AT32F457的支持推送到github了,除了笔者已经弄好的uart、gpio、flash外,其他如adc、dmac、usb、spi、i2s等等也支持好了,从这也可以看出Artery官方对热门开源项目的支持速度特别快。那笔者的测评怎么办?虽然>现在我也切到Artery官方的代码上来了,但还是写一写这篇文章笔者记录一些移植经验吧,还是有些参考意义的,比如万一哪天有需求芯片暂时还没zephyr rtos支持,可以顺这个这个移植思路和步骤自己实现。

首先相似性原则
笔者观察以往Artery对他自家新芯片的支持发现,他家的IP在基本上是通用的,可能有些不同,比如新芯片中的IP可能提升某个>地方性能等,而不同芯片之间更多的不同可能只在于不同base基地址、不同中断号、不同pinmux等等,这其实也符合芯片设计的>规律。这样一来,对新芯片的zephyr rtos移植就比较自然,大部分只要复用Artery对已有芯片的支持即可。

其次Artery官方对zephyr支持的框架结构
笔者个人理解,Artery也遵循了zephyr rtos的基本大框架,即有一个单独hal仓库作为芯片的抽象层提供一致的hal API和zephyr rtos自身仓库中加入芯片dtsi、板级dts、芯片配置等等。

先看hal
在zephyrproject/moudles/hal目录下有个at32目录,这个目录下有各芯片的目录,比如
  1. at32f402_405   at32f423

除此以外还有common_source common_include include zephyr等各芯片公用的目录,整体目录结构如图所示,笔者只截取一部分:
at6.jpg

其中移植新芯片时我们只要关心common_include和include两个目录,至于如何改动下文会再说。

再看zephyr本身
在zephyrproject/zephyr本身源码中又涉及如下目录结构:


  1. boards    dts    soc

其中soc目录放各家厂商的相关目录,Artery在此目录下也有一个名为at的目录,其目录结构大概如图所示,笔者只截取了一部分:

at2.jpg


其中dts目录先以cpu体系结构分类,然后再是各大厂商目录,然后在厂商目录下有芯片级别的目录。比如Artery就在dts/arm/at/目录下放置了各MCU芯片的目录,其目录结构大概如图所示,笔者只截取了一部分:
at3.jpg

其中boards目录是各板级厂商目录,然后在下一层是板级厂商各板子的支持目录,其目录结构大概如图所示,笔者只截取一部分:

at5.jpg


AT32F457移植实操
理论框架已经描述完毕,可以实际移植AT32F457了。

先说hal的移植动作
在zephyproject/modules/hal/at32/目录下新建at32f45x目录,并将从Artery官网下载的AT32F45x_Firmware_Library支持包中的libraries目录下的cmsis和drivers两个目录复制到新建的at32f45x目录下来。然后修改zephyrproject/modules/hal/at32/common_include目录下的所有.h文件,加入类似下面这样的内容:

  1. #if defined(CONFIG_SOC_SERIES_AT32F45X)
  2. #include <at32f45x_acc.h>
  3. #endif


在zephyrproject/modules/hal/at32/include/dt-bindings/pinctrl/目录下新建芯片的pinctrl相关的.h文件,比如at32f457z(e-c)xx-pinctrl.h这样的
其内容可以抄现有的.h文件比如at32f437z(m)xx-pinctrl.h,然后对着datasheet的pinmux表格一个一个改,这个是整个移植过程中最枯燥也最耗时的步骤,需要细致一些。

至此hal移植动作完毕



看看zephyr本身目录下的修改
soc目录的移植动作
在zephyrproject/zephyr/soc/at/at32/目录下新建at32f45x/目录,其中所有文件大部分可以从现有的at32f435_437/复制过来,然后改动at32f45x相关的不同的地方,比如at32_regs.h可能寄存器偏移有些不一样,这种改动非常简单,只要查阅Artery官方芯片文档就会改了,这里不再赘述。

dts目录的移植动作
在dts/arm/at/目录下新建at32f45x/目录,然后写一份芯片的dtsi文件,可以以已有的dtsi文件为模板,把芯片的各模块一个一>个加进来,比如cpu、sram、flash、clk、uart等等,这里比较耗时间的就是基地址和中断号,需要查询Artery官方芯片文档,算是耗时排第二的动作,但是难度并不大,这里不再赘述。

boards目录的移植动作
在boards/at/目录下新建at_start_f457/目录,这个目录名最好和板子名字一致,比如笔者是at_start_f457开发板,所以这里以at_start_f457为名。其目录中的内容基本可以照抄已有的板级目录下的内容,比如at_start_f423。然后修改文件名,比如板级dts文件名可以是at_start_f457.dts等。最后第三耗时的事情来了,这里需要根据板级原理图修改板级dts和pinctrl.dtsi文件,比如笔者要修改at_start_f457.dts和at_start_f457-pinctrl.dtsi,难度不高就是体力活,这里不再赘述。

至此移植初步完成,已经像模像样了,然后编译一个zephyr基本测试用力比如可以点个灯测一测了。后续移植动作就是不断在芯片dtsi文件和板级dts文件中添加各硬件模块,然后测试,如此循环迭代直到所需硬件全部添加并测试完毕。

总结:
由于zephyr rtos的完美的模块化架构和Artery现有的清晰zephyr移植框架,笔者照葫芦画瓢顺利zephyr rtos移植到AT32F457芯片和AT-Start-F457开发板上。

打赏榜单

ArteryMCU 打赏了 50.00 元 2026-03-03
理由:[F457开发板评测活动]内容优质

您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

216

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部
0