如果您正在开发的板子或平台尚未得到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_ROOTwest build -b <board name> -- -DBOARD_ROOT=<path to boards>
# 通过cmake编译时设置BOARD_ROOTcmake -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_ROOTwest build -b <board name> -- -DSOC_ROOT=<path to soc> -DBOARD_ROOT=<path to boards>
# 通过cmake编译时设置SOC_ROOTcmake -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_ROOTwest build -b <board name> -- -DDTS_ROOT=<path to dts root
# 通过cmake设置DTS_ROOTcmake -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
