板型使用指南

本文档说明如何在项目中使用板型支持系统。

板型支持系统简介

板型支持系统负责管理不同硬件板卡的配置和初始化。系统采用模块化设计,将引脚复用(pinmux)配置与板级初始化逻辑分离,便于维护和扩展。

主要特性

  • 模块化设计:板级代码(board.c/h)与引脚配置(pinmux.c/h)分离

  • 外部板型支持:支持在 SDK 外部添加自定义板型,无需修改 SDK 源码

  • 两级搜索机制:优先搜索自定义路径,然后搜索 SDK 内置板型

  • 简单易用:通过 build.sh 命令行参数即可切换板型

  • 配置管理:通过 Kconfig 管理板型配置选项

快速开始

使用 SDK 内置板型

必须使用 -DBOARD 参数指定板型:

cd arcs-sdk

# 使用 arcs_mini 板型
./build.sh -S samples/helloworld -DBOARD=arcs_mini

# 使用 arcs_evb 板型
./build.sh -S samples/helloworld -DBOARD=arcs_evb

查看可用的 SDK 内置板型

ls boards/

查看各板型的详细说明,请参考对应板型目录下的 README.md 文件。

使用外部自定义板型

基本用法

使用 -DBOARD-DBOARD_SEARCH_PATH 参数:

./build.sh -S samples/helloworld \
    -DBOARD=my_custom_board \
    -DBOARD_SEARCH_PATH=/path/to/my_boards

说明:

  • BOARD_SEARCH_PATH 必须使用绝对路径,例如 /home/user/my_boards~/my_boards,避免相对路径带来的解析问题

  • 例如:如果自定义板型目录为 /path/to/my_boards/AAA_EVB,则:

    • -DBOARD=AAA_EVB

    • -DBOARD_SEARCH_PATH=/path/to/my_boards

  • 外部板型文件无需自行添加构建

创建外部自定义板型

关于如何创建自定义板型的详细指南,请参考 BOARD_TEMPLATE.md

该指南包含:

  • 完整的文件结构说明

  • 接口规范和实现要求

  • 详细的开发步骤

  • 文件模板和示例

板型搜索机制

构建系统按以下优先级搜索板型:

  1. 板型名称(必需)

    • 必须通过 -DBOARD=<board_name> 参数指定

    • 不指定将导致构建失败

  2. 外部自定义路径(如果指定了 BOARD_SEARCH_PATH

    • 搜索路径:${BOARD_SEARCH_PATH}/${BOARD}/

    • 使用绝对路径(如 /home/user/boards~/boards),避免相对路径在不同构建环境下的解析差异

  3. SDK 内置路径(备用)

    • 搜索路径:${ARCS_SDK_BASE}/boards/${BOARD}/

  4. 验证要求

    • 板型目录必须存在

    • 板型目录下必须包含 CMakeLists.txt 文件

如果搜索失败,构建系统会给出详细的错误提示,说明搜索路径和解决方案。

板型文件结构

每个板型目录必须包含以下文件:

board_name/
├── CMakeLists.txt    # 板型构建脚本(必需)
├── board.h           # 板级接口声明(必需)
├── board.c           # 板级初始化实现(必需)
├── pinmux.h          # 引脚配置声明(必需)
├── pinmux.c          # 引脚配置实现(必需)
├── Kconfig           # 板型配置选项(必需)
└── README.md         # 板型说明文档(推荐)

详细的文件说明和模板请参考 BOARD_TEMPLATE.md

故障排查

BOARD 未指定

错误信息:

BOARD is not specified!

解决方案: 必须使用 -DBOARD 参数指定板型:

./build.sh -S samples/helloworld -DBOARD=arcs_mini

板型未找到

错误信息:

Board 'xxx' not found!

解决方案:

  1. 检查板型名称拼写是否正确

  2. 确认板型目录存在:

    • SDK 内置板型:ls boards/xxx

    • 自定义板型:ls ${BOARD_SEARCH_PATH}/xxx

  3. 如使用自定义板型,检查 BOARD_SEARCH_PATH 路径是否正确

板型目标重复定义

错误信息:

add_library cannot create target "module_boards" because another target
with the same name already exists. The existing target is a static library
created in source directory

原因: 使用外部自定义板型时,SDK已通过\({BOARD_SEARCH_PATH}/\){BOARD}将板型目录添加到构建系统中,无需外部构建额外添加,否则会出现重复定义目标的错误。

解决方案: 外部工程CMakeLists.txt中无需添加板型目录。

编译错误

常见原因:

  1. 板型代码未实现必需的接口函数

  2. 头文件路径配置错误

  3. Kconfig 文件缺失或配置不正确

解决方案:

  1. 确保实现了 board_get_name() 函数

  2. 检查 CMakeLists.txt 中的头文件路径配置

  3. 确保 Kconfig 文件包含必需的配置项

常见问题

Q: 如何在不同板型之间快速切换?

只需修改 build.sh-DBOARD 参数:

# 切换到 arcs_mini
./build.sh -S samples/helloworld -DBOARD=arcs_mini

# 切换到 arcs_evb
./build.sh -S samples/helloworld -DBOARD=arcs_evb

Q: 可以为不同的项目使用不同的板型吗?

可以。每个项目的构建命令可以指定不同的板型:

# 项目 A 使用 arcs_mini
./build.sh -S samples/project_a -DBOARD=arcs_mini

# 项目 B 使用 arcs_evb
./build.sh -S samples/project_b -DBOARD=arcs_evb

Q: 自定义板型是否会被覆盖?

不会。自定义板型存储在 SDK 外部,SDK 更新不会影响自定义板型。

Q: 如何创建新的板型?

请参考 BOARD_TEMPLATE.md,其中包含完整的开发指南和步骤说明。