当前位置: 首页 > news >正文

zephyr邪修笔记(9)最简化自定义板子-定制化第一步

作为板佬搞项目的时候必须遇到第一个问题就是将开发板转为产品板之后的适配debug过程。对于zephyr这种逻辑代码和硬件描述高度解耦的RTOS来说,最大的难点就在其有复杂逻辑且有点啰嗦的硬件描述了。一旦掌握以后,就进入到定制化的新坑了。

对于如何定制自己的生产板,可以采用邪修最简化的方式来入门。因为作原型的时候已经是基于某个开发板来做设计的,只是说引脚、IOMUX需要重新自己配置而已,这个时候是用overlay不就可以了么?显示情况不是的。因为,实际生产的时候选用的芯片有可能用同一个系列不同参数不同型号的不同封装的芯片,IOMUX就会需要自己在overlaoy重新配置了。其实zephyr对于支持的芯片已经预先整理好了dtsi,没有必要在overlay里面大费周章。另外,对于已经固定的引脚配置,写在自定义板子里面的dts/dtsi里面,这样既可以简化overlay的编写工作,又可以减少代码的复杂程度,所以说,对于实际项目来说,是有必要按照zephyr的逻辑来自定义自己项目板子的硬件描述的。

按照官方的概念板佬们日常用的接触的最多的是蓝色这里的Board这里。


接下来设定自定板总共分三步:

一、建立文件结构

二、准备硬件描述的文件

三、如何调用自定义的板描述文件

一、建立文件结构

按照官方文档的的说法:

https://docs.zephyrproject.org/latest/hardware/porting/board_porting.html#board-porting-guide

文件结构应当如下:

boards/<VENDOR>/plank
├── board.yml
├── board.cmake
├── CMakeLists.txt
├── doc
│ ├── plank.webp
│ └── index.rst
├── Kconfig.plank
├── Kconfig.defconfig
├── plank_<qualifiers>_defconfig
├── plank_<qualifiers>.dts
└── plank_<qualifiers>.yaml

plank就是你自己给板子起的名字,VENDOR统一用custom这个方便区分。vendor这个只是用来作为区分使用的,到了程序、驱动、内核等环节是没有任何影响的。如果你不喜欢用custom这个名字,可以随意换成自己习惯的名字,如:companyboard 等等。

文件结构里面核心不可缺少的文件只有3个

board.yml:描述你的板的核心信息,方便编译器和内核去调用资源和编译

plank_<qualifiers>.dts:设备树文件。当然你也可以在这里自己编写板级的dtsi文件。

Kconfig.plank:用来确定在Kconfig中调用具体那个Soc的基本驱动用的。

剩下的的文件

board.cmake:用来配置烧录和debug的设置的,这个可以直接用开发板的,直接copy

Kconfig,kconfig.defconfig:在Kconfig中,用来设置对应的外设功能,比如启动I2C驱动等,在menuconfig中会用到。

plank_defconfig , plank_<qualifiers>_defconfig:给具体的项目中的prj.conf添加一些预设的设定,一般是外设驱动等,这个常用。

CMakeLists.txt:用来引用其他额外的源文件的。

plank_<qualifiers>.yaml:这是用在TestRunner(twister)中的yaml文件

doc文件夹里面的你的板的一些描述,如果不想发布在主线项目中的话,可以不用管。

二、准备硬件描述的文件

这里其实主要的是写dts文件,dts文件主要是注意引用不同型号的dtsi和具体的引脚的自己修改。

比如:我用ch32v006的一个mcu做个小项目,为了体积和手工焊接的方便,选用了ch32v006f8p这个芯片型号,和其他的E8(QFN24)K8(QFN32)有差异。因此需要自己做一个板子描述。

其实在zephyr里面已经对这些不同封装的mcu做了dtsi,只需要我们自行引用就行。

原厂的开发板ch32v006evt用的型号是k8u,所以在zephyr/boards里面引用的就是ch32v006k8u.dtsi

那我用的是 F8P,所以自然我的板子也就引用对应的dtsi

其他的文件,可以参考zephyr/boards里面对应开发板的来写就OK了。

三、如何调用自定义的板描述文件

默认情况下,west build -b 这个命令指向的是zephyr/boards里面的板级文件的。你可以选择把自定义的板级文件放在里面,不过考虑到zephyr仍在一个高速迭代的时段,所以放在工作区另外一个地方会是一个更好的选择。

如果直接用:west build -b ch32v006nano(我给自己板命名为ch32v006nano),那肯定是报错的,必须是提示找不到板子的。

这个时候其实只要将你自己的boards的路径传递进去给cmake 就ok了,具体参数为 -DBOARD_ROOT = 绝对路径或者相对路径。关键是文件结构要跟规范的来设置 /boards/custom/ch32v006nano 。我这里用的是相对路径。这样你把路径告诉给zephyr的编译器。那就可以顺利的编译成功了。

(完)

http://www.cnnetsun.cn/news/2001017.html

相关文章:

  • 告别VS2022!在VSCode里搞定.NET Framework 4.6项目的编译与调试(保姆级教程)
  • 别再只盯着压差了!手把手教你从PSRR、噪声到环路补偿,全面评估一颗LDO芯片
  • 深入理解传输中二层PW和三层BFD之间的关系
  • 从Cortex-M4/M7寄存器入手,聊聊中断嵌套与栈切换那些容易踩的坑
  • 3步破解百度网盘SVIP:macOS逆向工程实战指南
  • 强化学习1——初步理解PPO
  • 编码规范基础:业界通用代码风格总结
  • 别再手动改模型了!用timm库的create_model函数,5分钟搞定PyTorch迁移学习
  • 山东大学软件学院项目实训-创新实训-计科智伴(二)——个人博客(MinIO配置)
  • ST7735S Datasheet里的‘黑话’:SPI时序、0x36寄存器与Gamma曲线,一次搞懂驱动屏的那些关键配置
  • Win11Debloat终极指南:3步轻松清理Windows系统,提升50%性能
  • 终极指南:3分钟快速检测微信单向好友,轻松清理“僵尸“好友
  • K210人脸识别项目实战:如何用SD卡实现人脸特征值的断电保存与加载?
  • C# 14 AOT编译Dify客户端:为什么你的AOT二进制仍加载慢?6个被忽略的IL trimming陷阱曝光
  • 重装系统后,Android Studio老项目报CMake版本错误?三步搞定NDK路径配置(附local.properties详解)
  • 5个步骤快速掌握KMS_VL_ALL_AIO:Windows与Office批量激活终极指南
  • 【硬件知识】光模块学习
  • LeetCode 1855.下标对中的最大距离:双指针
  • Python的__getattr__在属性访问链中的递归调用问题
  • 【2026年最新600套毕设项目分享】微信小程序的电影院订票选座系统(30118)
  • 从流体力学到临床:一文搞懂FFR(血流储备分数)的计算原理与核心价值
  • 避坑指南:在Cesium中构建清晰三维管道网络,如何解决实体重叠与视觉混乱问题?
  • 汽修厂最怕你发现的秘密武器!只输个车型,汽车毛病怎么修全都有
  • MCU逐波保护( CBC)技术
  • 3分钟快速安装TrollStore:TrollInstallerX终极指南
  • 保姆级教程:在Ubuntu 20.04上搞定GAMIT/GLOBK 10.7安装(含gfortran版本避坑指南)
  • 开源移动端性能测试测试工具推荐-perfara
  • “方向盘没松开就答错”?Dify注意力掩码机制深度解析:如何用3行配置实现驾驶专注度感知式应答降频(实测降低误唤醒率76%)
  • 抖音去水印批量下载终极指南:如何3分钟搞定无水印视频批量下载
  • VideoSrt:如何为视频创作者解决字幕制作难题的智能语音识别解决方案