这里的标识分别是 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 开始使用的新的硬件模型描述方式

详情见: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.yml
开发板详细定义 boards/sifli/sf32lb58_devkit/sf32lb58_devkit_sf32lb586_hcpu.yaml
使用前面的构建命令,报如下错误。意思是board 指定的 SoC 没有定义。
配置 SoC: soc/sifli/soc.yml
再构建:
新建文件:soc/sifli/sf32lb58/Kconfig
soc/sifli/sf32lb58/Kconfig.soc
定义了 SoC,但是需要在板级的定义里去选中 SoC。boards/sifli/sf32lb58_devkit/Kconfig.board:
boards/sifli/sf32lb58_devkit/Kconfig.sf32lb58_devkit
boards/sifli/sf32lb58_devkit/sf32lb58_devkit_sf32lb586_hcpu_defconfig

(这里的 1000000是我现在随便写的)
下面开始定义设备树。
编辑 dts/arm/sifli/sf32lb58.dtsi

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

构建,报错:

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

再构建,再报错:

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

再来

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

缺少一个必须有的属性:
在 dts/arm/sifli/sf32lb58.dtsi 中添加:

再执行构建:

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

创建文件 soc/sifli/sf32lb58

创建文件 Kconfig.defconfig.sf32lb58_hcpu

再构建

那就放一个空的 CMakeLists.txt
再来

这个问题不大好查,原因是我需要在
sifli_zephyr/soc/sifli/CMakeLists.txt 里添加:

再来:

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

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

修改 刚才创建的 soc.h

再来

这个原因是没有定义 CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC
在soc/sifli/sf32lb58/Kconfig.defconfig.sf32lb58_hcpu 中添加

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

编译成功了。虽然不能引导,但是可以用于测试添加的文件语法是否正确了。
全部0条评论
快来发表一下你的评论吧 !