自定义板子和SOC定义
<p><a href="https://docs.zephyrproject.org/latest/application/index.html#custom-board-devicetree-and-soc-definitions">https://docs.zephyrproject.org/latest/application/index.html#custom-board-devicetree-and-soc-definitions</a></p>
<p>对于<code>Zephyr</code>还不支持的板子和平台,你需要在应用中增加板子和<code>SOC</code>定义,而不需要将他们加到<code>Zephyr</code>树中。这个结构类似于<code>Zephyr</code>树中的板子和<code>SOCs</code>结构.使用这个结构可以更加容易的将自己的平台加入到<code>Zephyr</code>树中.
自定义板子使用下面的结构
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/a6d814d628ad8d0c2543af9bc6a0927f?showdoc=.jpg" alt="" /></p>
<ul>
<li><code>boards</code>目录结构</li>
</ul>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c52a1587290ad3b3181ea55a6d827688?showdoc=.jpg" alt="" /></p>
<ul>
<li><code>soc</code>目录放所有<code>soc</code>相关的代码,你仍可以使用<code>Zephyr</code>树中支持的<code>SOC</code></li>
</ul>
<h3>板子</h3>
<p>使用合适的芯片架构目录名字<code>e.g., x86, arm</code>,<a href="https://docs.zephyrproject.org/latest/boards/boards.html#boards" title="板子架构">板子架构</a>
<code>doc</code>和<code>support/</code>是可选的,但提交到<code>Zephyr</code>则需要这些文件
<code>my_custom_board</code>的内容需要有下面的文件</p>
<pre><code>my_custom_board_defconfig
my_custom_board.dts
my_custom_board.yaml
board.cmake
board.h
CMakeLists.txt
doc/
dts_fixup.h
Kconfig.board
Kconfig.defconfig
pinmux.c
support/</code></pre>
<p>你可以在构建时指定自定义板子</p>
<pre><code> cmake -DBOARD=<board name> -DBOARD_ROOT=<path to boards> ..</code></pre>
<blockquote>
<p><code>BOARD_ROOT</code>可以在<code>CMakeLists.txt</code>定义</p>
<pre><code>set(BOARD_ROOT ${CMAKE_CURRENT_LIST_DIR})
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)</code></pre>
</blockquote>
<p>将自定义board的board_defconfig文件命名为自定义board名称,更改Kconfig.board中board名,kconfig_defconfig改为board名,dts文件改成board名,yaml文件改成board名</p>
<ul>
<li>kconfig_defconfig
<pre><code>
if BOARD_customboard</code></pre></li>
</ul>
<p>config BOARD
default "f407"</p>
<p>endif</p>
<pre><code>- Kconfig.board</code></pre>
<p>config BOARD_customboard
bool "NUCLEO-144 F412ZG Development Board"
depends on SOC_STM32F412ZG</p>
<pre><code>
- customboard_defconfig</code></pre>
<p>ONFIG_ARM=y
CONFIG_BOARD_CUSTOMBOARD=y
CONFIG_SOC_SERIES_STM32F4X=y</p>
<pre><code>
### `SOC`定义

所有`Kconfig`文件的目录需要通过`$(SOC_DIR)`指定,在`soc`目录中需要顶级`Kconfig`文件指定自定的`SOC`</code></pre>
<pre><code>choice
prompt "SoC/CPU/Configuration Selection"
source "$(SOC_DIR)/$(ARCH)/\*/Kconfig.soc"
endchoice
menu "Hardware Configuration"
osource "$(SOC_DIR)/$(ARCH)/\*/Kconfig"
endmenu
```</code></pre>
<p>应用程序的目标平台可通过<code>cmake</code>构建系统的参数<code>-DSOC_ROOT</code>指定自定义平台的位置</p>
<pre><code>cmake -DBOARD=<board name> -DSOC_ROOT=<path to soc> -DBOARD_ROOT=<path to boards> ..</code></pre>
<p>你也可以在<code>CMakeLists.txt</code>定义<code>SOC_ROOT</code></p>