Lierda 开源介绍_Rev1.0
文件修订历史
版本 |
日期 |
作者 |
审核 |
修订内容 |
|---|---|---|---|---|
Rev1.0 |
2026-01-29 |
sxx |
zlc |
创建文档 |
1 简介
本文旨在指导开发者快速熟悉底包分离方式 SDK 开发流程,引导用户熟悉 SDK 各功能模块并开始在 SDK 上进行自己的开发工作。
github 仓库地址(国外推荐) / gitee 仓库地址(国内推荐)
SDK 在设计方面可以划分为三层:底包层、系统层和用户层。
底包层:底包层对于用户不可见,是由 Lierda 维护的,针对特定型号将库文件打包成目录后放在
components/basePkg/目录下,开发者在编译时根据自己手里的硬件型号选择对应型号的底包即可,具体选择方式参考下文 4.1 节。系统层:系统层运行底包分离的核心代码,是底包分离系统加载的入口,包含 kernel、配置、驱动、开源第三方库、TTS、OTA 升级等。
用户层:用户层是开发者自己的开发代码的区域,主要集中在
examples目录下。Lierda 为开发者预设了两个工程:app 和 demo。app 工程是一个空工程,没有实现具体功能,一般用户可以基于 app 工程上开发自己的代码。demo 工程是 Lierda 为客户提供的 API 接口示例的 demo,给用户参考调用。客户也可以参考 app 在examples/目录下创建自己的工程,代码入口为void user_main(void),会在系统层启动后自动调用。
2 目录结构一览
├── components (组件库,核心代码都放在这里)
│ ├── basePkg (底包目录)
│ │ └── F6D_A、F7B_A、F6D_A、K2B_A、...
│ ├── driver(开放的底层驱动)
│ │ └── lcd、camera、...
│ ├── kernel
│ │ └── app.ld、core、ecapi、include、lierda_api
│ ├── ota (fota 相关代码)
│ ├── precfg(预设相关配置代码实现)
│ ├── secboot(安全启动校验相关代码)
│ ├── thirdparty(开源第三方的源码)
│ │ └── CJSON、freertos、websockets、lwip、mbedtls 等
│ ├── tts(tts 相关代码)
├── config
│ └── default.ini(预设相关配置)
│ └── iodriver.ini(驱动的 io 引脚配置预设)
├── docs(相关文档)
├── examples
│ └── app(默认工程)
│ └── demo(默认示例 demo 工程)
├── LICENSE、build.bat、Makefile、README.md
├── rules(Makefile 编译规则)
├── tools(脚本及工具)
3 功能介绍
3.1 底包层 basePkg
底包层由 Lierda 维护、针对不同型号的模组和不同支持功能的组合给出多个底包版本,客户根据自己的需求选择底包,底包一般放在 components/basePkg/ 目录下。
底包型号在根目录 Makefile 文件中有MODEMPKG 设置。底包作为最底层的组件,其他组件都是在底包的基础上构建的。不同底包包含的功能不同,支持的芯片型号也可能不同。针对不同的模组型号,需要选择不同的底包型号。具体原型可以参考下文 3.1.1 节。
3.1.1 版本型号对应表
目前支持的版本和型号如下, 最新可参考 rules/Makefile.modem 中的对应关系:
底包名称 |
芯片型号 |
适配模组 |
说明 |
|---|---|---|---|
F6D_A |
EC718PM |
NT26F6D0 |
D 系列通用版 |
F6D_GL |
EC718PM |
NT26F6D0_GL |
D 系列全球版 |
K2B_A |
EC716E |
NT26K2B1 |
B 系列,不支持全量 OTA |
3.1.2 底包文件介绍
lib: API 动态库,编译后内存占用在用户空间,是底包提供给上层的 API 具体实现。
ap_lierda_app.elf:用于抓到死机 dump 后,解析 dump 使用。
ap_bootloader.bin:bootloader 可执行 bin 文件。
ap_lierda_app.bin:底包 ap 侧可执行 bin 文件。
cp-demo-flash.bin:底包 cp 侧可执行 bin 文件。
comdb.txt:日志库,用于配合 EPAT 工具抓取日志使用。
hwDriveio.def:底包中驱动 IO 的默认引脚配置表,参考用不参与编译。
mem_map.txt:底包宏定义一览表,用于生成合包。
partition_info.txt:底包 FLASH 分区分布表。
3.2 预设配置 Config
预设配置 config,可以直接预设一个参数值,掉电保存,不用再额外调用 API 设置,也可以直接预设驱动外设的 IO 引脚。
default.ini 和 iodriver.ini 最终通过工具转换为宏控,最终在 components/precfg/ 中生成表格,系统加载时传给底包并生效。
备注: 仅在全擦烧录后第一次开机生效,之后的值只跟随 API 修改而变换且掉电保存。
3.2.1 default.ini
Config/default.ini 提供了配置一些默认值的方法,具体如下:
分区 |
值 |
功能 |
默认值 |
说明 |
|---|---|---|---|---|
PaltConfig |
faultAction |
死机时执行操作 |
4 |
0-dump后死循环, 1-打印后重启, 2-dump后重启, 3-dump+EPAT后重启, 4-直接重启 |
PaltConfig |
logControl |
unilog 开关 |
2 |
0-禁用, 1-仅sw log, 2-全部log |
PaltConfig |
logPortSel |
unilog 输出口 |
0 |
0-USB, 1-UART, 2-MIX(预留) |
PaltConfig |
usbCtrl |
USB 控制 |
0 |
0-启用USB+枚举RNDIS, 1-启用USB不枚举RNDIS, 2-禁用USB |
PaltConfig |
usbNet |
USB 网络模式 |
0 |
0-RNDIS, 1-ECM, 2-默认RNDIS/Win切ECM, 3-默认ECM/Win切RNDIS |
PaltConfig |
usbSlpMask |
USB 插入时是否允许休眠 |
0 |
0-禁用, 1-启用 |
PaltConfig |
usbVBUSModeEn |
USB VBUS 模式 |
0 |
0-禁用, 1-启用 |
PaltConfig |
usbVBUSWkupPad |
USB VBUS 唤醒引脚索引 |
1 |
0~5 PAD 索引 |
NetCfg |
netcid |
USB网卡绑定 cid 号 |
0 |
0-15 |
NetCfg |
AutoDial |
cid 激活时 USB 网卡自动联网 |
0 |
0-关, 1-开 |
NetCfg |
NetDevCtlUrc |
USB 网卡控制 URC 使能 |
0 |
0-关, 1-开 |
NetCfg |
NatEnable |
网络地址转换(NAT) |
0 |
0-关, 1-开 |
Mics |
cfun |
cfun 模式 |
1 |
0-关, 1-开 |
Mics |
AutoApn |
自动 APN 连接 |
0 |
0-关, 1-开 |
Mics |
dataCont |
流量统计 |
0 |
0-关, 1-开 |
Mics |
pwrKeyMode |
开机键模式 |
0 |
0-内部上拉+消抖, 1-内部上拉无消抖, 2-无上拉无消抖 |
Mics |
pwrkeyDelay |
开机键消抖延时(ms) |
50 |
0~65535,仅 pwrKeyMode=0 时有效 |
AT |
uart1At |
UART1 AT 指令开关 |
0 |
0-关, 1-开 |
AT |
uart2At |
UART2 AT 指令开关 |
0 |
0-关, 1-开 |
AT |
atEcho |
AT 回显开关 |
0 |
0-关, 1-开 |
AT |
appLogPort |
应用日志输出口 |
0 |
0-USBAT, 1-UART2(需uart2At=1), 3-系统接口(需EPAT查看) |
AT |
uartbootloader |
UART 默认波特率 |
115200 |
支持 600~3000000 |
APN |
apniptype |
IP 类型 |
1 |
1-IPv4, 2-IPv6, 3-IPv4v6, 4-UNUSED, 5-NONIP |
APN |
apn |
APN 名称 |
- |
APN 字符串,最大 99 字节 |
APN |
userName |
用户名 |
- |
用户名字符串,最大 63 字节 |
APN |
pwd |
密码 |
- |
密码字符串,最大 63 字节 |
PS |
datacount |
流量统计 |
0 |
0-关, 1-开 |
PS |
simslot |
SIM 卡槽选择 |
0 |
0-sim0, 1-sim1 |
EXTFLASH IMAGE |
efImageEn |
外部 Flash 镜像打包使能 |
0 |
0-关, 1-开 |
EXTFLASH IMAGE |
efSpiPort |
烧录用 SPI 端口 |
1 |
0-SPI0(前缀"EF_“), 1-SPI1(前缀"EFID01_”) |
EXTFLASH IMAGE |
efLfsLna |
外部 Flash LFS 分区起始地址 |
0x80000000 |
地址需从 0x80000000 起始 |
EXTFLASH IMAGE |
efLfsSize |
外部 Flash LFS 分区大小 |
0x200000 |
大小需 4KB 对齐(0x1000 的整数倍) |
3.2.2 iodriver.ini
Config/iodriver.ini 提供了配置驱动 IO 引脚的方法,支持 UART、I2C、SPI、CSPI、I2S 等外设的引脚配置。
配置规则:
*_default:是否使用默认引脚配置。1表示启用默认配置,0表示禁用默认配置使用自定义引脚。默认引脚定义在底包
hwDrivecfg.def中(芯片脚),需根据 IO 复用表转换为模组脚使用,用户不能更改此文件。自定义引脚格式:
pin,func,其中pin为模组引脚号,func为引脚复用功能编号。
分区 |
值 |
功能 |
默认值 |
说明 |
|---|---|---|---|---|
uart |
uart0_default |
UART0 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
uart |
uart1_default |
UART1 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
uart |
uart*_pin_tx |
TX 引脚 |
- |
格式: pin,func |
uart |
uart*_pin_rx |
RX 引脚 |
- |
格式: pin,func |
uart |
uart*_pin_cts |
CTS 引脚 |
- |
格式: pin,func |
uart |
uart*_pin_rts |
RTS 引脚 |
- |
格式: pin,func |
i2c |
i2c0_default |
I2C0 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
i2c |
i2c1_default |
I2C1 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
i2c |
i2c*_pin_scl |
SCL 引脚 |
- |
格式: pin,func |
i2c |
i2c*_pin_sda |
SDA 引脚 |
- |
格式: pin,func |
spi |
spi0_default |
SPI0 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
spi |
spi1_default |
SPI1 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
spi |
spi*_pin_sclk |
SCLK 时钟引脚 |
- |
格式: pin,func |
spi |
spi*_pin_ssn |
SSN 片选引脚 |
- |
格式: pin,func |
spi |
spi*_pin_mosi |
MOSI 输出引脚 |
- |
格式: pin,func |
spi |
spi*_pin_miso |
MISO 输入引脚 |
- |
格式: pin,func |
cspi |
cspi0_default |
CSPI0 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
cspi |
cspi1_default |
CSPI1 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
cspi |
cspi*_pin_mclk |
MCLK 主时钟引脚 |
- |
格式: pin,func |
cspi |
cspi*_pin_pclk |
PCLK 像素时钟引脚 |
- |
格式: pin,func |
cspi |
cspi*_pin_cs |
CS 片选引脚 |
- |
格式: pin,func |
cspi |
cspi*_pin_sdo0 |
SDO0 数据输出0引脚 |
- |
格式: pin,func |
cspi |
cspi*_pin_sdo1 |
SDO1 数据输出1引脚 |
- |
格式: pin,func |
i2s |
i2s0_default |
I2S0 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
i2s |
i2s1_default |
I2S1 默认引脚开关 |
1 |
1-启用默认, 0-使用自定义 |
i2s |
i2s*_pin_mclk |
MCLK 主时钟引脚 |
- |
格式: pin,func |
i2s |
i2s*_pin_bclk |
BCLK 位时钟引脚 |
- |
格式: pin,func |
i2s |
i2s*_pin_lrck |
LRCK 左右声道时钟引脚 |
- |
格式: pin,func |
i2s |
i2s*_pin_din |
DIN 数据输入引脚 |
- |
格式: pin,func |
i2s |
i2s*_pin_dout |
DOUT 数据输出引脚 |
- |
格式: pin,func |
自定义引脚示例(I2C0):
[i2c]
i2c0_default=0 ; 禁用I2C0默认引脚,使用自定义
i2c0_pin_scl=57,2
i2c0_pin_sda=58,2
4 examples 工程介绍
用户在 examples 中添加自己的工程。examples 目录下每一个子目录都对应一个工程。
更改根目录 Makefile 文件,PROJECT 设置为对应的工程目录名称,会在编译时自动链接到对应的 examples/$(PROJECT)/Makefile,由该 Makefile 文件管理 PROJECT 中的代码。
每一个 PROJECT 工程中的入口函数是固定的:void user_main(void),用户实现 user_main 函数,并基于此接口开发自己的代码。
在SDK中有两个基础工程 app 和 demo。app 工程是一个空工程,客户可以基于此工程进行开发。demo 工程是 API 示例工程,Lierda 为开发者提供了丰富的示例代码场景,客户可以参考该工程中的示例 demo 编写。
4.1 app 工程
app 工程在 user_main.c 中只实现了一个打印当前内存的功能。为了方便客户创建自己的功能,客户可以拷贝examples/app目录并更名就能直接创建自己的工程目录。
4.2 demo 工程
demo 工程是 API 示例工程,Lierda 为开发者提供了丰富的示例代码场景,客户可以参考该工程中的示例 demo 编写。
examples/demo 是 Lierda 提供给客户的示例代码。同样由接口 demo_main.c 中 void user_main(void) 加载启动。
4.2.1 编译 demo 工程
编译 demo 工程,更改根目录 Makefile 文件,
PROJECT设置为 demo。在
examples/demo/config文件中,将自己想要测试的 DEMO 配置成 y 后,正常进行编译即可。
4.2.2 config 是如何对应 demo 的
目前所有的 demo 都在 LSDK/examples/demo/src 目录下。
config 配置文件中的变量遵循 Makefile 规则,以 EXDEMO_FS_EN 为例,在 config 文件中设置为 y。
在 LSDK/examples/demo/Makefile 文件中,根据 EXDEMO_FS_EN 变量编译对应的 demo_fs.c 文件。
5 用户如何添加自己的工程
examples/ 目录是 SDK 默认存放工程的目录。在 examples/ 目录下参考 app 工程创建自己的工程。推荐:复制 app 到同级目录下并更名为自己的工程名称。
更改根目录 Makefile 文件,PROJECT 设置为"自己的工程名"。
注意事项:
工程目录的入口函数必须为:
void user_main(void)。工程目录的根目录下必须有 Makefile 文件,用于工程目录内部的编译规则。
6 如何快速跑通SDK
我们提供了一个简单的 LED 教程,帮助用户快速上手 SDK, 《30 分钟快速上手开发》。
7 命令行进阶开发指导
针对linux和windows系统,我们提供了一套命令行开发指南,用于快速对接AI和命令行工具。







