海思Hi3861L开发二-SDK编译与下载

一、简介

        上篇文章,我们介绍了海思Hi3861L的环境搭建,那这篇文章,我们就开始SDK的编译与下载吧。

        准备:

        SDK:https://download.csdn.net/download/qq_26226375/88245580

        开发环境:海思Hi3861L开发一-环境搭建_t_guest的博客-CSDN博客 

二、SDK介绍

         将SDK解压后,会出现如下目录:

         这里介绍一下SDK目录

目录       说明
app应用层代码(其中包含demo程序,即参考实例)
bootFlash bootloader代码
build SDK构建所需的库文件、链接文件、配置文件
componentsSDK组件目录
configSDK系统配置文件
documents文档目录(包括:SDK说明文档)
inclludeAPI头文件存放目录
output编译时生成的目标文件与中间文件(包括:库文件、打印LOG、生成的二进制文件等)
platformSDK平台相关的文件(包括:镜像、内核驱动模块等)
third_party开源第三方软件目录
toolsSDK提供的Linux系统和windows系统上使用的工具(包括:NV制作工具、签名工具、Menuconfig等)
SConstructSCons编译脚本
build.sh启动编译脚本,同时支持“sh build.sh menuconfig”进行客制化配置
build_patch.sh解压开源源码包和patch文件编译脚本
Makefile支持makefile编译,使用“make”或“make all”启动编译
non_factory.mk非厂测版本编译脚本
factory.mk厂测版本编译脚本

三、编译SDK(SCONS)

        1.编译方法

        Hi3861原生SDK支持带参数的编译,以此来满足各方面的需求。其中最简单的就是在SDK根目录下执行“./build.sh”来进行编译。参数编译以表格形式展示。

参数实例说明
./build,sh启动增量编译,默认编译app工程是demo
all./build.sh all启动全量编译,默认编译app工程是demo
app工程目录名称./build.sh demo参数输入app工程目录名称,启动增量编译,编译app工程是所输入的工程目录名称。默认是demo工程
clean./build.sh clean清理编译过程中生成的中间文件和烧写文件,不清除path打包后生成的文件
all_clean./build.sh all_clean清理所有编译过程中生成的中间文件和烧写文件,包括path打包生成的文件
menuconfig./build.sh menuconfig启动menuconfig图形配置界面

        注: 如果执行“./build.sh”提示无权限,可执行命令“chmod +x build.sh”添加执行权限,或执行“sh ./build.sh

        2.编译结果

         编译结果输出到“output\bin”目录下,以编译demo结果为例:

文件名说明
Hi3861_boot_signed.bin带签名的bootloader文件
Hi3861_boot_signed_B.bin带签名的bootloader备份文件
Hi3861_demo.asmKernel asm文件
Hi3861_demo.map工程map文件
Hi3861_demo.outKernel输出文件
Hi3861_demo_allinone.bin产线工装烧写文件(已经包含独立烧写程序和loader程序)
Hi3861_demo_burn.bin烧写文件,烧写程序建议使用“Hi3861_demo_allinone.bin”
Hi3861_demo_flash_boot_ota.binFlash Boot升级文件
Hi3861_demo_ota.binOTA升级文件
Hi3861_demo_vercfg.binKernel和Boot的版本号文件
Hi3861_loader_signed.bin烧写工具使用的加载文件,烧写程序建议使用“Hi3861_demo_allinone.bin”

          平时烧录使用“Hi3861_demo_allinone.bin”文件。

        3.Menuconfig配置

        运行“sh build.sh menuconfig”,脚本会启动Menuconfig程序,用户可以通过Menuconfig对编译和系统功能进行配置。SDK集成了默认配置,但建议用户首次运行时进行相应配置,从而减少因为配置原因引起的问题。

         Menuconfig操作说明如下图:

快捷键说明
空格,回车选中,反选
ESC返回上级菜单,退出界面
S保存配置
/跳转到搜索
F显示帮助菜单
Q退出界面

        Menuconfig菜单说明

菜单配置项说明
Target ChipHi3861芯片类型
Hi3861L
Security
Settings
Signature Algorithm for bootloader and upgrade fileBoot以及升级文件签名方式。支持RSA V15、RSA PSS、ESS、SHA256签名方式
boot ver(value form 0
to 16
支持Boot版本号设置
kernel ver(value form 0
to 48)
支持Kernel版本号设置。
TEE HUKS support支持TEE HUKS接口。
TEE HUKS demo
support
支持TEE HUKS DEMO AT命令,详见
《Hi3861V100/Hi3861LV100 AT命令 使用
指南》安全存储相关AT指令章节。
FLASH ENCRPT suppot支持Flash安全加密
Factory
Test
Settings
factory test enable使能工厂产测,使能产测功能需要配置
UART串口方式产测
SDIO SDIO方式产测(SDIO模组+产测底板3518:
选择SDIO方式产测)
BSP
Settings
i2c driver support 支持I2C驱动。
i2s driver support支持I2S驱动
SPI driver support支持SPI驱动
DMA driver support支持DMA驱动
SDIO driver support 支持SDIO驱动
SPI support DMASPI驱动支持DMA传输模式
UART support DMAUART驱动支持DMA传输模式
PWM driver support支持PWM驱动
PWM hold after reboot支持软复位后维持PWM状态
Enable AT command 支持AT命令
Enable file system支持文件系统
Enable uart0 IO mux
config
支持UART0
Enable uart1 IO mux
config
支持UART1
Enable uart2 IO mux
config
支持UART2
WiFi
Settings
Enable WPS WPA支持WPS(WIFI Protected Setup)。
支持通过pin码和PBC连接网络。
Authentication Option
of Radio Parameters
选择验证方式,支持CE版本、FCC版本配置版本验证。
Enable MESH支持MESH功能。
Enable WPA3 WPA支持WPA3
Enable quick send
mode
开启快速发包模式(仅Hi3861支持)。开启
后,将导致其它部分功能默认不可用,包
括:
● 不支持mesh、wps功能;
● 不支持升级功能;
● APP中默认不初始化文件系统、系统低功
耗;
● 安全启动仅校验boot,不校验kernel,不
支持FLASH加密。
注意:如果需要达到50ms快速发包的要求,
需要配置efuse项uart_halt_interval的值为
2,以缩短启动时间。请参见《Hi3861V100
/Hi3861LV100 EFUSE 使用指南》结构章节
对该Efuse项的描述。
Enable mgmt frame
size 1500
支持管理帧长度1500配置。
Third
Party
library
cJson support支持CJSON库编译
COAP support支持libcoap库编译
MQTT support支持MQTT库编译
iperf support支持iperf库编译
Lwip
Settings
Enable Option Router
(Option3)
支持设置网关地址选项。
Enable DHCP
Hostname (Option12)
支持设置/获取netif主机名
Enable DHCP
Vendorname
(Option60)
支持设置/获取供应商类别标识符信息
Lwip Support
Lowpower Mode
配置LwIP支持低功耗模式(低功耗模式需要配置)。
OTA
Settings
compression ota
support
支持压缩升级
dual-partition ota
support
支持双分区升级
Link
Settings
Hilink support支持Hilink连接
Debug
Log
Settings
Enable debug log支持debug日志模式

        注:OTA settings建议优先选择压缩升级模式,其相比双分区升级,镜像可以空间更大,默认多250KB+。如果选择双分区升级,需要考虑后续功能扩展情况,为后续的升级镜像预留足够空间,升级镜像不支持压缩升级和双分区升级混用

四、编译SDK(Makefile)

         1.编译命令

指令说明
make或make all编译整个工程
make clean清空工程的编译文件(不清楚patch打包后生成的文件)
make factory;make clean_factory编译产测程序
make all_clean清除整个工程的编译文件(包括patch打包后生成的文件)

        2.makefile编译结构

 

         3.文件说明

文件文件说明
顶层Makefile编译入口
factory.mk编译产测程序的makefile
non_factory.mk编译正常程序的makefile
模块路径/Makefile模块编译脚本
模块路径/
module_config.mk
模块编译配置
build\make_scripts
\config.mk
公共编译配置,主要包含:
1.编译模块配置
2.各模块路径配置
3.公共头文件配置
4.公共编译宏配置
5.公共编译选项
6.链接库
7.链接库路径
8.中间文件输出路径
build\make_scripts
\usr.mk
公共编译配置,一般由用户配置:
1.app名称
2.芯片配置
3.编译器配置
4.编译结果输出路径
5.用户库
6.用户库路径
build\make_scripts
\config_lib_factory.m
k
build\make_scripts
\config_lib_non_fact
ory.mk
产测和正常程序链接的库及库路径
build\make_scripts
\lib.mk
目标文件、库文件的生成
build\make_scripts
\module.mk
各个模块的Makefile的原始备份(新增模块时可直接拷
贝至新模块下作为Makefile)

         4.新增组件makefile配置说明

        以组件名XXX为例进行说明,一下说明为了通用性,做了一些约束说明,以下方法若不适用,可以通过调整组件结构适应方法,也可以自行修改makefile以适应组件编译方式:

  1.         修改build\make_scripts\config.mk,可参照其他组件。
  2.         增加变量说明新增组件相对路径:XXX_dir := 相对路径。
  3.         增加变量说明新增组件需要编译生成的库文件:XXX_libs := 库文件名1 库文件名2 (允许生成1个及1个以上的库文件)。
  4.         拷贝build\make_scripts\module.mk至新组件根目录下,重命名为Makefile。
  5.         新组件根目录下新增文件module_config.mk,添加内容可参见其他组件,其主要修改内容如下:
  •                 添加编译库文件所需要的源文件路径,若有多个库文件,则添加多个(注:此处只支持添加目录,不允许添加文件形式,所有被增加的目录下的源文件和汇编文件都会被编译)。
  •                 库文件名_srcs := 组件所在目录的相对路径。
  •                 添加组件编译需要的头文件路径、编译宏、编译选项等(根据需要进行添加,可参见其他组件)。

五、烧录

        这部分跟之前文章没描述是相同的,这里直接引用:鸿蒙Hi3861学习二-程序烧录与日志输出_t_guest的博客-CSDN博客

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HI3861L是华为公司推出的一款低功耗Wi-Fi芯片,支持CoAP协议。下面是一个使用CoAP协议的示例: 1. 配置CoAP客户端 ```c #include "coap.h" #include "lwip/sockets.h" // 定义CoAP客户端结构体 static coap_client_t client; // 定义接收缓冲区和发送缓冲区 static uint8_t recv_buf[1024]; static uint8_t send_buf[1024]; // CoAP客户端初始化函数 void coap_client_init(void) { memset(&client, 0, sizeof(coap_client_t)); client.fd = -1; client.port = COAP_DEFAULT_PORT; client.buf = recv_buf; client.buf_len = sizeof(recv_buf); client.version = COAP_VERSION; client.block_size = COAP_BLOCK_1024; client.timeout = COAP_DEFAULT_TIMEOUT_MS; client.is_used = false; } // CoAP客户端发送请求函数 int coap_client_send(coap_method_t method, const char *url, const uint8_t *payload, uint16_t payload_len) { struct sockaddr_in6 addr = {0}; coap_pdu_t pdu = {0}; int ret; // 解析URL ret = coap_parse_url(url, &client.uri); if (ret != 0) { return ret; } // 打开套接字 client.fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); if (client.fd < 0) { return -1; } // 配置目标地址 memset(&addr, 0, sizeof(addr)); addr.sin6_family = AF_INET6; addr.sin6_port = htons(client.port); memcpy(&addr.sin6_addr, &client.uri.host, sizeof(addr.sin6_addr)); // 构造CoAP PDU coap_pdu_init(&pdu); pdu.type = COAP_MESSAGE_CON; pdu.code = method; pdu.mid = coap_get_mid(); pdu.token_len = 0; pdu.uri_path = client.uri.path; pdu.uri_path_len = client.uri.path_len; pdu.payload = payload; pdu.payload_len = payload_len; pdu.block_size = client.block_size; // 序列化CoAP PDU coap_serialize(&client, &pdu, send_buf, sizeof(send_buf)); // 发送CoAP请求 ret = sendto(client.fd, send_buf, pdu.buf_len, 0, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { close(client.fd); return -1; } // 等待CoAP响应 ret = coap_wait_response(&client, &pdu); if (ret != 0) { close(client.fd); return ret; } // 解析CoAP响应 coap_parse(&pdu, recv_buf, pdu.buf_len); // 关闭套接字 close(client.fd); return 0; } ``` 2. 使用CoAP客户端发送请求 ```c coap_client_init(); // 发送GET请求 coap_client_send(COAP_GET, "coap://example.com/resource", NULL, 0); // 发送POST请求 const char *payload = "hello"; coap_client_send(COAP_POST, "coap://example.com/resource", (uint8_t *)payload, strlen(payload)); ``` 以上示例代码仅供参考,具体实现需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值