移植 ZephyrRTOS 到思澈 SF32LB58 过程笔记之二 建立板级定义

描述

ZephyrRTOS 的编译,是从指定板子 (board) 标识符开始的。所以为了编译测试我们的定义和代码,就必须先定义对应的板子。目前我这里使用的是 SF32LB58 devkit开发板,所以我们的板子名称是 sf32lb58_devkit,所以在 sifli_zephyr 下建立目录结构以及空文件RTOS这里的标识分别是 BOARD(sf32lb58_devkit), SoC (sf32lb586), cpu cluster (hcpu, acpu, lcpu)。MCU 结构复杂了,这些定义也开始繁琐起来。这里以 hcpu 为例来编写。构建命令使用:
  •  
west build -p always -b sf32lb58_devkit/sf32lb586/hcpu zephyr/samples/hello_world/

注意,这里使用了 Zephyr 3.7 开始使用的新的硬件模型描述方式

RTOS

详情见:https://docs.zephyrproject.org/latest/hardware/porting/board_porting.html。

另外要注意,自己定义的 module,如果是通过 west 管理的,west build 会自动关联;如果是我现在使用的不是通过 west 管理的,那么需要

  •  
export ZEPHYR_EXTRA_MODULES="FULL_PATH_TO_MODULE1;FULL_PATH_TO_MODULE2"

否则,west build 无法正确找到自定义的 module 。

板子定义描述文件 board.ymlRTOS

开发板详细定义            boards/sifli/sf32lb58_devkit/sf32lb58_devkit_sf32lb586_hcpu.yaml

RTOS使用前面的构建命令,报如下错误。意思是board 指定的 SoC 没有定义。RTOS  配置 SoC: soc/sifli/soc.ymlRTOS再构建:RTOS新建文件:soc/sifli/sf32lb58/KconfigRTOSsoc/sifli/sf32lb58/Kconfig.socRTOS定义了 SoC,但是需要在板级的定义里去选中 SoC。boards/sifli/sf32lb58_devkit/Kconfig.board:RTOSboards/sifli/sf32lb58_devkit/Kconfig.sf32lb58_devkitRTOS

boards/sifli/sf32lb58_devkit/sf32lb58_devkit_sf32lb586_hcpu_defconfig

RTOS

 

(这里的 1000000是我现在随便写的)

下面开始定义设备树。

编辑 dts/arm/sifli/sf32lb58.dtsi

RTOS

创建文件:boards/sifli/sf32lb58_devkit/sf32lb58_devkit_sf32lb586_hcpu.dts

RTOS

构建,报错:

RTOS

 

是因为在 dts/arm/sifli/sf32lb58.dtsi 忘记添加

RTOS

再构建,再报错:

RTOS

是因为过早定义了 cpu-power-states,先注释掉

RTOS

再来

RTOS

这是因为我有两处定义了 sram_retention,我选择在我的 dts/arm/sifli/sf32lb58_hpsys.dtsi 中移除重复的定义。

再来

RTOS

缺少一个必须有的属性:

在 dts/arm/sifli/sf32lb58.dtsi 中添加:

RTOS

 

再执行构建:

RTOS

 

错误提示是表达式不完整。查看错误日志 linker.cmake 的 155行,所以是因为没有定义 NUM_IRQ:

RTOS

 

创建文件 soc/sifli/sf32lb58

RTOS

 

创建文件 Kconfig.defconfig.sf32lb58_hcpu

RTOS

再构建

RTOS

 

那就放一个空的 CMakeLists.txt

再来

RTOS

 

这个问题不大好查,原因是我需要在

sifli_zephyr/soc/sifli/CMakeLists.txt 里添加:

RTOS

再来:

RTOS

这个比较简单,就是没有在 CMakeLists.txt 添加对应的头文件路径

在 soc/sifli/sf32lb58/CMakeLists.txt 中添加:

RTOS

并且创建空文件 soc/sifli/sf32lb58/soc.h

再来

RTOS

 

修改 刚才创建的 soc.h

RTOS

 

再来

RTOS

 

这个原因是没有定义 CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC

在soc/sifli/sf32lb58/Kconfig.defconfig.sf32lb58_hcpu 中添加

RTOS

 

这里 1000000 这个数是我随便写的,后面需要查数据手册填写正确的数值。

再来

RTOS

编译成功了。虽然不能引导,但是可以用于测试添加的文件语法是否正确了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分