Zephyr 之添加 Custom Board

Zephyr 之添加 Custom Board

Intro

做产品的时候,一般使用的都是芯片原厂提供的芯片,而不是开发板,虽然 Zephyr 支持四百多块开发板,但用户在用的时候,都是在自定义的板子上进行开发,因此 Zephyr 也必须提供自定义板子的功能。

Create Custom Board

创建板子

在 app 目录下创建文件夹 boards

mkdir boards

进入到 boards 目录,创建 arm 文件夹(由于本文采用的微控制器为 arm 内核,因此按照 Zephyr 的格式,需要创建 arm 文件夹)

cd boards
mkdir arm

在arm 文件夹下,用板子名称创建一个文件夹,本文采用 “custom_board” 作为板子名称,下同

cd arm
mkdir custom_board
cd custom_board

在 custom_board 文件夹下,需要放置如下文件:

custom_board
├── board.cmake
├── Kconfig.board
├── Kconfig.defconfig
├── custom_board_defconfig
├── custom_board.dts
├── custom_board.yaml
└── support
    └── openocd.cfg

这些文件中的内容该怎么填写呢,为了省事,我们可以直接从 Zephyr 中提取:

打开 ~/zephyrproject/zephyr/boards/arm 文件夹,在里面找到一个熟悉的开发板,复制这个开发板文件夹下所有的文件,到custom_board 文件夹下,然后将文件名中带有开发板名称的字样,修改为 custom_board 即可,至于 doc 文件夹,里面放置的是开发板的相关说明,如果有需要,则可以在这个文件夹中写上详细的 custom_board 信息,如果不需要,删掉即可,最后文件结构就如上述的那样。

但这样只是把文件填充好了,里面的内容还需要修改,逐个打开每个文件,将里面所有的已板子命名的字段全部替换为 custom_board,以 Kconfig.board 为例:

# Custom board configuration

# Copyright (c) 2023 UnsicentificLaLaLaLa
# SPDX-License-Identifier: Apache-2.0

config BOARD_CUSTOM_BOARD
	bool "Custom Board"
	depends on SOC_<SoC name>

以 Kconfig.defconfig 为例:

# Custom board configuration

# Copyright (c) 2023 UnsicentificLaLaLaLa
# SPDX-License-Identifier: Apache-2.0

if BOARD_CUSTOM_BOARD

config BOARD
	default "custom_board"

config MEMC
	default y if DISPLAY

endif # BOARD_CUSTOM_BOARD

由此,custom_board 相关配置已经完成。

编译

由于 app 中使用的板子是自定义的板子,其路径不是默认的 ../Zephyr 中,因此需要加入特殊的指令来指定 boards 目录所在的路径:

west build -b custom_board -DBOARD_ROOT=.

由于 boards 目录就在 CMakeLists.txt 同级位置,因此一个 “.” 即可表示 boards 的路径。

执行上述的指令,即可完成对 custom_board 的编译,生成 elf 文件:

[155/155] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       14898 B         2 MB      0.71%
             RAM:        4416 B       192 KB      2.25%
             CCM:          0 GB        64 KB      0.00%
          SDRAM2:          0 GB         8 MB      0.00%
        IDT_LIST:          0 GB         2 KB      0.00%

在 CMakeLists.txt 中指定 BOARD_ROOT 和 BOARD

每次编译的时候,都需要指定板子的根路径,相当麻烦,有什么解法吗?当然,在 app 的 CMakeLists.txt 中指定就行了,打开 CMakeLists.txt,修改内容:

cmake_minimum_required(VERSION 3.20.0)

list(APPEND BOARD_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/) # new add, set BOARD_ROOT.

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})

project(app LANGUAGES C)

target_sources(app PRIVATE src/main.c)

保存,然后清掉原来的 build 文件夹,用下面的方式编译工程即可生成 elf 文件:

west build -b custom_board

如果实在是太懒,连板子都不想指定了,也是能够实现的,修改 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.20.0)

set(BOARD custom_board) # new add, set BOARD

list(APPEND BOARD_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})

project(app LANGUAGES C)

target_sources(app PRIVATE src/main.c)

保存,然后用下面的方式编译工程:

west build

十分方便。

Summary

本文根据 Zephyr 官网的文档,实现了自定义板子,其主要过程就是添加板子所需的相应配置文件,然后在编译的时候使用相应的配置语句,如果嫌指令过长不容易记忆,也可以修改 app 的 CMakeLists.txt 文件,来自定相应的配置。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值