Lierda 开源介绍_Rev1.0

English

文件修订历史

版本

日期

作者

审核

修订内容

Rev1.0

2026-01-29

sxx

zlc

创建文档

1 简介

本文旨在指导开发者快速熟悉底包分离方式 SDK 开发流程,引导用户熟悉 SDK 各功能模块并开始在 SDK 上进行自己的开发工作。

github 仓库地址(国外推荐) / gitee 仓库地址(国内推荐)

SDK 在设计方面可以划分为三层:底包层、系统层和用户层。

  1. 底包层:底包层对于用户不可见,是由 Lierda 维护的,针对特定型号将库文件打包成目录后放在 components/basePkg/ 目录下,开发者在编译时根据自己手里的硬件型号选择对应型号的底包即可,具体选择方式参考下文 4.1 节。

  2. 系统层:系统层运行底包分离的核心代码,是底包分离系统加载的入口,包含 kernel、配置、驱动、开源第三方库、TTS、OTA 升级等。

  3. 用户层:用户层是开发者自己的开发代码的区域,主要集中在 examples 目录下。Lierda 为开发者预设了两个工程:app 和 demo。app 工程是一个空工程,没有实现具体功能,一般用户可以基于 app 工程上开发自己的代码。demo 工程是 Lierda 为客户提供的 API 接口示例的 demo,给用户参考调用。客户也可以参考 app 在 examples/ 目录下创建自己的工程,代码入口为 void user_main(void),会在系统层启动后自动调用。

_images/quick_start/image_1.png

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 节。

_images/quick_start/image_2.png

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.iniiodriver.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 函数,并基于此接口开发自己的代码。

_images/quick_start/image_3.png

在SDK中有两个基础工程 app 和 demo。app 工程是一个空工程,客户可以基于此工程进行开发。demo 工程是 API 示例工程,Lierda 为开发者提供了丰富的示例代码场景,客户可以参考该工程中的示例 demo 编写。

4.1 app 工程

app 工程在 user_main.c 中只实现了一个打印当前内存的功能。为了方便客户创建自己的功能,客户可以拷贝examples/app目录并更名就能直接创建自己的工程目录。

_images/quick_start/image_6.png

4.2 demo 工程

demo 工程是 API 示例工程,Lierda 为开发者提供了丰富的示例代码场景,客户可以参考该工程中的示例 demo 编写。 examples/demo 是 Lierda 提供给客户的示例代码。同样由接口 demo_main.cvoid user_main(void) 加载启动。

4.2.1 编译 demo 工程

  • 编译 demo 工程,更改根目录 Makefile 文件,PROJECT 设置为 demo。

  • examples/demo/config 文件中,将自己想要测试的 DEMO 配置成 y 后,正常进行编译即可。

_images/quick_start/image_4.png

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 文件。

_images/quick_start/image_5.png

5 用户如何添加自己的工程

examples/ 目录是 SDK 默认存放工程的目录。在 examples/ 目录下参考 app 工程创建自己的工程。推荐:复制 app 到同级目录下并更名为自己的工程名称。

更改根目录 Makefile 文件,PROJECT 设置为"自己的工程名"。

注意事项:

  1. 工程目录的入口函数必须为:void user_main(void)

  2. 工程目录的根目录下必须有 Makefile 文件,用于工程目录内部的编译规则。

_images/quick_start/image_7.png

6 如何快速跑通SDK

我们提供了一个简单的 LED 教程,帮助用户快速上手 SDK, 《30 分钟快速上手开发》

_images/quick_start/sharkled.gif

7 命令行进阶开发指导

针对linux和windows系统,我们提供了一套命令行开发指南,用于快速对接AI和命令行工具。

《AI 命令行编程指南》