如果您正在开发的板子或平台尚未得到Zephyr的支持,则可以在应用程序中添加板子、设备树和SOC定义,而不必将其添加到Zephyr内核源码中。
使用以下目录结构将自定义板子添加到应用程序中。
板子的信息放在boards
目录下。
在soc
目录下放置自定的soc代码。
应用程序自定义板子
在boards
目录下创建板子的架构目录arm
、x86
等。在架构目录下创建我们自己板子的名称目录my_custom_board
。
在
my_custom_board
目录下可以没有在doc
和support
目录,但如果提交代码到zephyr
时这两个目录是必须存在的。
my_custom_board
目录下包含的文件命名如下:
当自定义了板子的目录后,需要通过设置BOARD_ROOT
变量为我们自定义的板子的目录,这样zephyr在编译的时候才可以找到我们自定义的板子。
设置BOARD_ROOT
变量的方式:
通过在编译时在命令行设置。
# 通过west编译时命令行设置BOARD_ROOT
west build -b <board name> -- -DBOARD_ROOT=<path to boards>
# 通过cmake编译时设置BOARD_ROOT
cmake -B build -GNinja -DBOARD=<board name> -DBOARD_ROOT=<path to boards> .
ninja -C build
通过
CMakeLists.txt
设置BOARD_ROOT
。在CMakeLists.txt
文件里在调用find_package(Zephyr ...)
之前设置BOARD_ROOT
变量。通过
CMakeLists.txt
设置BOARD_ROOT
时,必须提供绝对路径,例如:list(APPEND BOARD_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/<extra-board-root>)
应用程序自定义SOC
自定义SOC的目录结构如下。
在soc
目录下需要创建soc所属的架构目录,例如x86
、arm
等。在架构目录下在创建自定义的soc
目录名称。
在soc
目录下需要创建Kconfig
文件,该文件中包含soc/架构/自定义soc/Kconfig
文件。
最终自定义的soc
目录结构如下:
当自定义soc目录结构建立好了之后,可以通过SOC_ROOT
的变量来设置寻找自定义soc
的目录。
设置SOC_ROOT
的方式:
通过编译时在命令行设置。
# 通过west编译时设置SOC_ROOT
west build -b <board name> -- -DSOC_ROOT=<path to soc> -DBOARD_ROOT=<path to boards>
# 通过cmake编译时设置SOC_ROOT
cmake -B build -GNinja -DBOARD=<board name> -DSOC_ROOT=<path to soc> -DBOARD_ROOT=<path to boards> .
ninja -C build
通过在模块中设置
SOC_ROOT
的变量,这里会在后面介绍模块时介绍。- 通过设置
CMakeLists.txt
设置SOC_ROOT
变量。在CMakeLists.txt
中设置SOC_ROOT
时,必须要放在find_package(Zephyr ...)
之前。在
CMakeLists.txt
中设置SOC_ROOT
时必须使用绝对路径。例如:list(APPEND SOC_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/<extra-soc-root>)
应用程序自定义设备树
自定义设备树可以在APPLICATION_SOURCE_DIR
、BOARD_DIR
和ZEPHYR_BASE
或者DTS_ROOT
的目录下发现设备树。
设置DTS_ROOT
的方式:
在编译的通过命令行设置。
# 通过west的设置DTS_ROOT
west build -b <board name> -- -DDTS_ROOT=<path to dts root
# 通过cmake设置DTS_ROOT
cmake -B build -GNinja -DBOARD=<board name> -DDTS_ROOT=<path to dts root> .
ninja -C build
通过设置
CMakeLists.txt
设置DTS_ROOT
变量。在CMakeLists.txt
中设置DTS_ROOT
时,必须要放在find_package(Zephyr ...)
之前。在
CMakeLists.txt
中设置DTS_ROOT
时必须使用绝对路径。例如:list(APPEND DTS_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/<extra-soc-root>)
还可以通过CMake缓存变量DTS_EXTRA_CPPFLAGS
控制设备树文件的内容。
# 通过west编译设置DTS_EXTRA_CPPFLAGS变量
west build -b <board name> -- -DDTS_EXTRA_CPPFLAGS=-DTEST_ENABLE_FEATURE
# 通过cmake编译设置DTS_EXTRA_CPPFLAGS变量
cmake -B build -GNinja -DBOARD=<board name> -DDTS_EXTRA_CPPFLAGS=-DTEST_ENABLE_FEATURE .
ninja -C build