前言¶
本文档介绍BS2X系列芯片SDK开发环境(包括:SDK编译、应用程序的开发等),用于帮助用户在快速了解开发环境后编译出可执行文件进行二次开发。
与本文档相对应的产品版本如下。
本文档主要适用于以下工程师:
技术支持工程师
软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
更新“打包添加其他bin文件”小节内容。 |
||
更新“flash分区表配置”小节内容。 |
||
|
||
开发环境搭建¶
SDK开发环境简介¶
典型的SDK开发环境主要包括:
Linux服务器
Linux服务器主要用于建立交叉编译环境,实现在Linux服务器上编译出可以在目标板上运行的可执行代码。
工作台
工作台主要用于目标板烧录和调试,通过串口与目标板连接,开发人员可以在工作台中烧录目标板的镜像、调试程序。工作台通常需要安装终端工具,用于登录Linux服务器和目标板,查看目标板的打印输出信息。工作台一般为Windows或Linux操作系统,在Windows或Linux工作台运行的终端工具通常有SecureCRT、Putty、miniCom等,这些软件需要从其官网下载。
目标板
本文的目标板以DEMO板为例,DEMO板与工作台通过USB转串口连接。工作台将交叉编译出来的DEMO板镜像通过串口烧录到DEMO板。如图1所示。

搭建Windows开发环境¶
BS2X解决方案提供了Windows下IDE开发工具,支持一键构建版本,基于IDE的编译环境搭建,请参考《BS2XV100 IDE工具使用指南》,本文档不再赘述。
搭建Linux开发环境¶
Linux系统推荐使用Ubuntu 20.04及以上版本,Shell使用bash ,SDK使用Cmake编译(3.14.1以上),编译工具还包括Python(3.8.0以上)等。
配置Shell¶
配置默认使用 bash。打开Linux终端,执行命令“sudo dpkg-reconfigure dash”,选择 no。
安装Cmake¶
打开Linux终端,执行命令“sudo apt install cmake”,完成Cmake的安装。
安装Python环境¶
打开Linux终端,输入命令“python3 -V”,查看Python版本号,推荐python3.8.0以上版本。
如果Python版本太低,请使用命令“sudo apt-get update”更新系统到最新,或通过命令“sudo apt-get install python3 -y”安装Python3(需root/sudo权限安装),安装后再次确认Python版本。
如果仍不能满足版本要求,请从“https://www.python.org/downloads/source/ ”下载对应版本源码包,下载与安装方法请阅读 https://wiki.python.org/moin/BeginnersGuide/Download 和源码包内README内容。
安装Python包管理工具,运行命令“sudo apt-get install python3-setuptools python3-pip -y”(需root/sudo权限安装)。
安装Kconfiglib 14.1.0+,使用命令“sudo pip3 install kconfiglib”(需root/sudo权限安装),或从“https://pypi.org/project/kconfiglib”下载.whl文件(例如:kconfiglib-14.1.0-py2.py3-none-any.whl)后,使用“pip3 install kconfiglib-xxx.whl”进行安装(需root/sudo权限安装),或者下载源码包到本地并解压,使用“python setup.py install”进行安装(需root/sudo权限安装)。安装完成界面如图1所示。
安装升级文件签名依赖的Python组件包。
安装pycparser:
从“https://pypi.org/project/pycparser/”下载.whl文件(例如:pycparser-2.21-py2.py3-none-any.whl)后,使用“pip3 install pycparser-xxx.whl”进行安装(需root/sudo权限安装),或者下载源码包到本地并解压,使用“python setup.py install”进行安装(需root/sudo权限安装)。安装完成后界面会提示“Successfully intalled pycparser-2.21”。
说明: 如果构建环境中包含多个python,特别是多个同版本的python,而用户无法辨认正在使用的是其中的哪个版本,此情况下,在安装python组件包时,推荐使用组件包源码进行安装。
编译SDK¶
SDK目录结构介绍¶
SDK根目录结构如表1所示。
表 1 SDK根目录
注:上表所述的output目录是编译后生成的。解压缩SDK后的根目录,如图1所示。

编译SDK(Cmake)¶
编译方法¶
根目录下执行“python3 build.py”指令运行脚本编译,即可编译出对应的SDK程序。编译命令列表如表1所示。此处以standard-bs21-n1100为例说明,根据BS2X项目不同编译目标可能不一致。
表 1 build.sh参数列表
表 2 编译目标介绍
编译得到的烧录镜像在“output/bs21/fwpkg/standard-bs21-n1100”目录下(如表3所示)。
表 3 烧录镜像
注:编译得到的中间文件在“output/bs21/acore/standard-bs21-n1100”目录下。
编译参数详解¶
编译命令接收参数及解释如表1所示。
表 1 编译参数信息表
编译选项详解¶
bs2x在不同目录下的.py文件下配置编译选项,如表1所示。
表 1 BS2X通用组件编译选项
其中,编译选项的详细说明如表2所示。
表 2 编译选项详细说明
可以把静态库中的没有初始化的全局变量从弱符号变成强符号,当所有静态库链接成可执行文件,如果同时有两个以上“重名强符号”,链接器会报错。 |
|
CodeSize优化,将无符号扩展字节和无符号扩展半字优化为uxtb、uxth(16字节)。组合仅在-O1以上的选项中。 |
|
打包添加其他bin文件¶
当前bs21编译bs21_all_in_one.fwpkg时,默认会编译bs21_all_nv.bin、application_sign.bin文件,在打包时则会添加loaderboot_sign.bin、flashboot_sign_a.bin、flashboot_sign_b.bin文件,文件介绍如表3所示。
如果需要打包其他bin文件,可按如下步骤添加:
在根路径下打开/tools/pkg/chip_packet/bs2x/packet.py文件。
在make_all_in_one_packet函数中添加代码,如图1所示。
在函数中添加bin文件路径,以partition.bin为例。
其中每个拼接字符串代表一层目录(文件夹名和文件名)
最终拼接完成的partition.bin实际路径:sdk\interim_binary\bs21\bin\boot_bin\loaderboot_sign.bin。
设置打包参数,参数之间用"|"分割,如图3所示。
烧录位置,单板剩余地址可在sdk\build\config\target_config\bs2x\flash_sector_config\bs2x-xxx.json文件中查看。
占用空间大小。
文件类型。
0:loader。
1:代表普通烧写文件,烧写到flash。
3:eFuse。
4:OTP。
在函数末尾,将设置好编译参数和路径的变量添加到编译列表,如图3所示。
编译结果展示如图5所示。
说明: 如果新增的bin文件有通过OTA升级的需求,请参见《BS2XV100 升级方案 使用指南》中对应内容,适配新增bin文件的OTA升级支持。
flash分区表配置¶
分区表配置文件路径“sdk\build\config\target_config\bs21\flash_sector_config\xxx.json”。

表 1 分区表说明
说明: 分区表Id[0x0, 0x26]为镜像加载启动、OTA升级使用的分区信息,请谨慎修改,分区表信息可通过uapi_partition_get_info接口传入分区Id获取对应地址和长度。 Partition_defines为分区表宏定义传参,当使能Use_defines时,会将对应ID的分区表偏移以及大小按照指定的宏定义传入到后续构建阶段,在代码中可以直接引用。
注意事项¶
如果执行“./build.py”提示无权限,可执行命令“chmod +x build.py”添加执行权限或执行“python3./build.py”。
编译过程中,报错找不到某个包,请检查环境中的python是否已经安装了相应组件。如果构建环境中包含多个python,特别是多个同版本的python,而用户无法辨认正在使用的是其中的哪个版本,此情况下,在安装python组件包时,推荐使用组件包源码进行安装。
系统优先使用用户通过Menuconfig所做的配置,如果用户未配置,系统将使用默认配置进行编译。
新建APP¶
建立源码目录¶
说明: 用户可在“application/bs21”同级目录下参考“standard-bs21-n1100”目录建立app,以下均以建立“my_demo”为例。
步骤如下:
新建“application/bs21/my_demo”目录,用来存放“my_demo”的源文件。
复制“application/bs21/standard/CMakeLists.txt”到“application/bs21/my_demo/CmakeLists.txt”,并将源文件放在“application/bs21/my_demo”目录下。
修改“application/bs21/my_demo/CmakeLists.txt”文件。其中各个变量的含义如表1所示。
表 1 组件的CmakeLists.txt中的变量含义
当前组件的C文件列表,其中CMAKE_CURRENT_SOURCE_DIR变量标识当前CMakeLists.txt所在的路径。
修改“application/bs21/CMakeLists.txt”,将my_demo目录加入编译。
修改“build/config/target_config/bs21/config.py”,在ram_component字段中加入‘my_demo’,向编译系统中注册my_demo组件。
开发代码¶
目录结构建立完成后开始启动开发代码(用户可参考“application/samples”进行移植),代码开发完成后即可使用“python3 build.py -c standard-bs21-n1100”编译my_demo进行代码编译调试。
镜像烧录¶
镜像烧录方法,请参见《BS2XV100 BurnTool工具 使用指南》中“操作指南”章节。












