前言
本文档介绍WS63芯片SDK开发环境(包括:SDK编译、应用程序的开发等),用于帮助用户在快速了解开发环境后编译出可执行文件进行二次开发。
与本文档相对应的产品版本如下。
本文档主要适用于以下工程师:
技术支持工程师
软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
|
||
|
||
|
||
开发环境搭建
SDK开发环境简介
典型的SDK开发环境主要包括:
Linux服务器
Linux服务器主要用于建立交叉编译环境,实现在Linux服务器上编译出可以在目标板上运行的可执行代码。
工作台
工作台主要用于目标板烧录和调试,通过串口与目标板连接,开发人员可以在工作台中烧录目标板的镜像、调试程序。工作台通常需要安装终端工具,用于登录Linux服务器和目标板,查看目标板的打印输出信息。工作台一般为Windows或Linux操作系统,在Windows或Linux工作台运行的终端工具通常有SecureCRT、Putty、miniCom等,这些软件需要从其官网下载。
目标板
本文的目标板以DEMO板为例,DEMO板与工作台通过USB转串口连接。工作台将交叉编译出来的DEMO板镜像通过串口烧录到DEMO板。如图1所示。
搭建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根目录
解压缩SDK后的根目录,如图2所示。注:上表所述的output目录是编译后生成的。
编译SDK(Cmake)
编译方法
根目录下执行“python3 build.py”指令运行脚本编译,即可编译出对应的SDK程序。编译命令列表如表1所示。
表 1 build.sh参数列表
表 2 编译目标介绍
编译得到的烧录镜像在“output/ws63/fwpkg/ws63-liteos-app”目录下(如表3所示)。
表 3 烧录镜像
注:编译得到的中间文件在“output/ws63/acore/ws63-liteos-app”目录下。
编译参数详解
编译命令接收参数及解释如表1所示。
表 1 编译参数信息表
编译选项详解
WS63在不同目录下的.py文件下配置编译选项,如表1所示。
表 1 WS63通用组件编译选项
其中,编译选项的详细说明如表2所示。
表 2 编译选项详细说明
可以把静态库中的没有初始化的全局变量从弱符号变成强符号,当所有静态库链接成可执行文件,如果同时有两个以上“重名强符号”,链接器会报错。 |
|
CodeSize优化,将无符号扩展字节和无符号扩展半字优化为uxtb、uxth(16字节)。组合仅在 -O1 以上的选项中 |
|
新增链接外部静态库
链接外部静态库,请参考sdk\application\samples\wifi\ohos_connect\CMakeLists.txt中引用1个外部静态库文件hilinkbtsdk.a的示例:
set(COMPONENT_NAME "hilinkbtsdk")
set(LIBS ${ROOT_DIR}/application/samples/wifi/libhilink/lib${COMPONENT_NAME}.a)
set(WHOLE_LINK
true
)
build_component()
然后在sdk\build\config\target_config\ws63\config.py 中对应的编译target中添加'hilinkbtsdk'。
添加bin文件编译
当前ws63编译ws63-liteos-app_all.fwpkg时,默认编译root_loaderboot_sign.bin、root_params.bin、flashboot_sign.bin、ws63_all_nv.bin、ws63-liteos-app-sign.bin,文件介绍如表3所示。
若需编译其他bin文件,可按如下步骤添加:
在根路径下打开/tools/pkg/chip_packet/ws63/packet.py文件
在make_all_in_one_packet函数中添加代码,如图1所示
在函数中添加bin文件路径
其中每个拼接字符串代表一层目录(文件夹名和文件名)
最终拼接完成的test_add_bin实际值:sdk\interim_binary\ws63\bin\rom_bin\pke_rom.bin
设置编译参数,参数之间用"|"分割
烧录位置,单板剩余地址可在sdk\build\config\target_config\ws63\param_sector\param_sector.json文件中查看
占用空间大小
文件类型,0代表loader,1代表普通烧写文件,3是efuse,4是otp
在函数末尾,将设置好编译参数和路径的变量添加到编译列表
编译结果展示
说明: 如果新增的bin文件有通过OTA升级的需求,请参见《WS63V100 FOTA 开发指南》中对应内容,适配新增bin文件的OTA升级支持。
Flash分区表配置
分区表配置文件路径sdk\build\config\target_config\ws63\param_sector\param_sector.json
说明: 上图内容仅作文件内容说明,具体分区信息请参考《WS63V100 FOTA 开发指南》“4.2 注意事项”章节中分区信息。 分区表ID限制16个分区数量,默认Flash共4M大小,预留6个分区ID,可通过uapi_partition_get_info接口传入分区ID获取对应地址和长度。
根据当前Flash分区方案,Flash划分情况如图1所示。
调整分区时,需要遵守以下原则:
地址段0x000000~0x030000为不可调整区,任何改动都可能会导致无法启动而变砖。
地址段0x030000~0x270000为APP镜像区,地址段信息来源于分区表中ID为0x20对应的APP镜像区,该地址段仅支持调整分区大小,分区首地址不支持调整,调整分区首地址同样会导致无法启动。
地址段0x270000~0x3F3000为FOTA镜像区,地址段信息来源于分区表中ID为0x21对应的压缩分区/OTA升级分区/产测镜像分区/B面分区,该分区首地址必须为APP镜像区的结束地址;使用压缩升级方案时,该分区大小至少配置为APP镜像区大小的0.7倍及以上。
地址段0x3F3000~0x3FB000为预留分区,该分区首地址为FOTA镜像区的结束地址,支持划分为4个不同分区ID的单独分区。
地址段0x3FB000~0x400000为其他功能区,包括死机信息(0x11)以及NV分区(0x10),该分区不支持调整。
调整分区时,除不可调整区以外,其他分区的首地址以及大小均要4K对齐。
调整分区示例:
根据分区表中分区信息,想要调整分区ID为0x30的预留分区的大小。
假设在APP镜像分区有8K的空间余量,则调整APP镜像区的大小,减少8K,分区结束地址同时减少8K,同步修改文件drivers/boards/ws63/evb/memory_config/include/memory_config_common.h,将文件中宏APP_PROGRAM_LENGTH的值(默认为'(0x240000 - 0x000300)')修改为调整后分区大小(如'(0x23E000 - 0x000300)')。
FOTA分区受APP镜像区的影响,首地址前移8K,调整为0x26E000,压缩升级方案中FOTA分区大小需同步调整,4K对齐后为减少4K,最终FOTA分区结束地址为0x3F0000。
APP镜像分区以及FOTA分区总计调整出12K的余量,可合并到预留分区中,预留分区首地址前移12K,为0x3F0000,同时大小增加12K,结束地址保持为0x3FB000。
UART配置方法
WS63芯片总共有3个UART,SDK默认配置如下。
烧录功能,固定用uart0,不可更改。
debug调试打印/AT/debugkits调试口,可通过menuconfig进行配置,以便适应不同硬件板级uart连接,波特率也可以通过menuconfig进行定制。
menuconfig的配置路径为Drivers->Chips->Chip Configurations for ws63:
须知:
debugkits调试口不能与其他功能共用同一个UART口,必须独占。
UART波特率建议配置典型值,如115200/921600/1M等,考虑到兼容性,不建议配置不常用的特殊值,比如115623此类波特率值。
修改UART序号请慎重,必须要与板级硬件工程师确认uart硬件连接,确保软件配置与硬件板级的实际电路连接是对得上的,否则无法正常工作。
注意事项
如果执行“./build.py”提示无权限,可执行命令“chmod +x build.py”添加执行权限或执行“python3./build.py”。
编译过程中,报错找不到某个包,请检查环境中的python是否已经安装了相应组件。如果构建环境中包含多个python,特别是多个同版本的python,而用户无法辨认正在使用的是其中的哪个版本,此情况下,在安装python组件包时,推荐使用组件包源码进行安装。
系统优先使用用户通过Menuconfig所做的配置,如果用户未配置,系统将使用默认配置进行编译。
新建APP
建立源码目录
说明: 用户可在“application/ws63”同级目录下参考“ws63_liteos_application”目录建立app,以下均以建立“my_demo”为例。
步骤如下:
新建“application/ws63/my_demo”目录,用来存放“my_demo”的源文件。
复制“application/ws63/ws63_liteos_application/CMakeLists.txt”到“application/ws63/my_demo/CmakeLists.txt”,并将源文件放在“application/ws63/my_demo”目录下。
修改“application/ws63/my_demo/CmakeLists.txt”文件。其中各个变量的含义如表1所示。
表 1 组件的CmakeLists.txt中的变量含义
当前组件的C文件列表,其中CMAKE_CURRENT_SOURCE_DIR变量标识当前CMakeLists.txt所在的路径。
修改“application/ws63/CMakeLists.txt”,将my_demo目录加入编译。
修改“build/config/target_config/ws63/config.py”,在ram_component字段中加入‘my_demo’,向编译系统中注册my_demo组件。
开发代码
目录结构建立完成后开始启动开发代码(用户可参考“application/samples”进行移植),代码开发完成后即可使用“python3 build.py -c ws63-liteos-app -component=my_demo”编译my_demo进行代码编译调试。
镜像烧录
镜像烧录方法,请参见《WS63V100 BurnTool工具 使用指南》中“操作指南”章节。