You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Zephyr的自定义板卡与树外驱动/模块整合方案咨询

树外驱动与Zephyr自定义板卡的整合方案

我基于Nordic nRF和Zephyr开发自定义板卡时,需要引入独立的树外驱动模块,但不想用应用层overlay方案,希望直接整合到板卡文件中。当前目录结构如下:

nrf/
├── apps/
│   └── monkey
│   └── sandpit
│       └── test-display
│           ├── CMakeLists.txt (原用于应用层设置ZEPHYR_EXTRA_MODULES)
│           ├── prj.conf
│           └── src/
│               └── main.c
│
├── board-files/
│   └── boards/
│       └── monkey/
│           └── myboard/
│               ├── myboard_nrf9151.dts
│               ├── myboard_nrf9151_common.dtsi ← 使用 "myvendor,mydriver" 节点
│               ├── pre_dt_board.cmake
│               └── CMakeLists.txt (需配置DTS_ROOT)
│
└── drivers/
    └── my-display
        ├── zephyr/
        │   └── module.yml (已设置dts_root: .)
        ├── CMakeLists.txt
        ├── Kconfig
        ├── dts/
        │   └── bindings/
        │       └── display/
        │           └── vendor,driveric.yaml ← DTS绑定文件
        └── drivers/
                ├── CMakeLists.txt
                ├── Kconfig
                └── driveric/
                        ├── CMakeLists.txt
                        ├── Kconfig
                        ├── driveric.c
                        └── driveric.h

以下是无需应用层overlay的整合步骤:

1. 完善驱动模块的module.yml配置

确保drivers/my-display/zephyr/module.yml包含完整的模块声明,让Zephyr正确识别驱动:

name: MY_DISPLAY_DRIVER
build:
  cmake: .
  kconfig: Kconfig
dts_root: .

这个配置会告诉Zephyr:模块的构建入口是当前目录的CMakeLists.txt,Kconfig配置文件在根目录,DTS相关文件的根路径是当前目录。

2. 在板卡预加载阶段引入驱动模块

编辑板卡目录下的pre_dt_board.cmake(board-files/boards/monkey/myboard/pre_dt_board.cmake),添加驱动模块路径:

# 相对路径指向树外驱动目录
list(APPEND ZEPHYR_EXTRA_MODULES ${CMAKE_CURRENT_LIST_DIR}/../../../drivers/my-display)

这样Zephyr在处理板卡DTS之前就会加载驱动模块,确保DTS绑定能被解析。

3. 配置板卡的DTS_ROOT(可选但推荐)

在板卡的CMakeLists.txt(board-files/boards/monkey/myboard/CMakeLists.txt)中指定DTS绑定的根路径,避免解析错误:

set(DTS_ROOT ${CMAKE_CURRENT_LIST_DIR}/../../../drivers/my-display/dts)

如果驱动的module.yml已经设置了dts_root: .,Zephyr会自动扫描驱动目录下的dts文件夹,但手动指定可以确保优先级。

4. 启用驱动的Kconfig选项

在板卡的默认配置文件(比如新增myboard_nrf9151_defconfig)或者应用的prj.conf中添加驱动启用配置:

CONFIG_MY_DISPLAY_DRIVER=y

这个选项需要在驱动的Kconfig文件中预先定义,比如:

config MY_DISPLAY_DRIVER
    bool "My Custom Display Driver"
    default n
    help
      Enable support for the custom display driver.

5. 移除应用层的驱动配置

删除应用目录test-display/CMakeLists.txt中关于ZEPHYR_EXTRA_MODULES的设置,因为现在驱动由板卡自动加载。

完成以上步骤后,编译应用时Zephyr会自动从板卡配置中加载树外驱动,DTS节点能正确绑定到驱动实现,无需依赖应用层overlay。

内容的提问来源于stack exchange,提问作者monkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 23:43:15