本文说明如何将新增的开发板纳入到Zephyr应用的目录下进行管理。
在Zephyr应用的代码结构–West提货单一文中已经将zephyr和zephyr外部项目纳入到应用的管理,应用可以基于zephyr的任意开发板进行开发。不过实际的嵌入式应用场景需要对硬件进行定制,这就需要添加新的board,为了方便应用项目代码集中管理,我们希望将新增的board的代码直接纳入app下。
添加board
在app目录下添加boards,添加的方式必须遵从boards/<arch>/<board_name>
, 例如我的应用要跑在两种不同的硬件上,增加了使用rt1052和esp32两个芯片的board,那么就要新建arm和xtensa两个arch目录,并分别在其中建立新的开发板文件夹atclock和tclock,目录树如下1
2
3
4
5
6
7app
├── CMakeLists.txt
├── boards
│ ├── arm
│ │ └── atclock
│ └── xtensa
│ └── tclock
添加board一般的做法是在zephyr/boards目录下找相同soc的board然后根据硬件对dts和配置文件进行修改,具体添加board的方法可以参考Zephyr添加nrf52-moderate,例如atclock就是从mm_swiftio修改而来,文件如下1
2
3
4
5
6
7
8
9
10
11
12
13└── atclock
├── CMakeLists.txt
├── Kconfig.board
├── Kconfig.defconfig
├── atclock.dts
├── atclock.yaml
├── atclock_defconfig
├── atclock_flexspi_nor_config.c
├── atclock_flexspi_nor_config.h
├── atclock_sdram_ini_dcd.c
├── board.cmake
├── doc
└── pinmux.c
而tclock是从esp32修改而来,文件如下1
2
3
4
5
6
7
8
9
10.
└── tclock
├── CMakeLists.txt
├── Kconfig.board
├── Kconfig.defconfig
├── board.cmake
├── doc
├── tclock.dts
├── tclock.yaml
└── tclock_defconfig
如何使用
zephyr提供了两种方法使用非zephyr目录下的board
1.编译时指定
1 | west build -b atclock -- -DBOARD_ROOT=app/ app/ |
2.Cmake指定
编译时指定需要在每次编译时都指定BOARD_ROOT
路径,略显累赘,可以在app/CMakeLists.txt
中添加如下内容1
list(APPEND BOARD_ROOT ${CMAKE_SOURCE_DIR})
CMAKE_SOURCE_DIR表示app的source code目录,也就是app的目录,由于boards在该目录下,因此在编译时就无需再指定board_root,直接执行下面命令即可1
west build -b atclock app/
第二种方法是应用管理自定义board这种场景下比较推荐的方法。
参考
https://docs.zephyrproject.org/latest/application/index.html#custom-board-devicetree-and-soc-definitions
https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/application_development/out_of_tree_board