T113S4 LVGL UI 开发
本章节介绍在 T113-tina5v1.2-sdk 中快速完成 LVGL 示例应用开发闭环:新增示例代码 -> 交叉编译 -> 烧写系统 -> 启动后运行验证。
何时调用
- 需要在 T113S4 上新增一个 LVGL 界面示例程序
- 需要验证 LVGL 程序可在板端正常启动并显示
- 需要联动 OpenixCLI 完成烧写与启动回归
默认约定
- SDK 根目录:
/home/ubuntu/T113-tina5v1.2-sdk - LVGL8 代码根:
platform/thirdparty/gui/lvgl-8 - 示例名:
lv_hello_t113s4 - 显示/输入后端:
sunxifb + evdev - 镜像:
out/t113_s4_linux_100ask_uart0.img
1. 新增示例源码
建议目录结构:
platform/thirdparty/gui/lvgl-8/lv_hello_t113s4/src/main.cplatform/thirdparty/gui/lvgl-8/lv_hello_t113s4/src/Makefileopenwrt/package/thirdparty/gui/lvgl-8/lv_hello_t113s4/Makefile
关键点:
main.c使用#include "lv_drivers/display/sunxifb.h"和#include "lv_drivers/indev/evdev.h"- 初始化流程:
lv_init()->sunxifb_init()-> 注册lv_disp_drv->evdev_init()-> UI 创建 ->while(1){ lv_task_handler(); usleep(5000); } custom_tick_get()保持与 LVGL 配置一致- 字体优先使用当前配置已启用字体(如
lv_font_montserrat_16)
2. 包构建接入(OpenWrt包)
openwrt/package/thirdparty/gui/lvgl-8/lv_hello_t113s4/Makefile 需包含:
include ../sunxifb.mkBuild/Prepare拷贝源码、lvgl、lv_drivers、lv_conf.h、lv_drv_conf.hBuild/Compile使用TARGET_CC / TARGET_CFLAGS / TARGET_LDFLAGS- 安装到
/usr/bin/lv_hello_t113s4
3. 本地交叉编译快速验证
TMP=/tmp/lv_hello_t113s4_build
rm -rf "$TMP"
mkdir -p "$TMP/src"
cp platform/thirdparty/gui/lvgl-8/lv_hello_t113s4/src/main.c "$TMP/src/"
cp platform/thirdparty/gui/lvgl-8/lv_hello_t113s4/src/Makefile "$TMP/src/"
cp platform/thirdparty/gui/lvgl-8/lv_examples/src/lv_conf.h "$TMP/src/"
cp platform/thirdparty/gui/lvgl-8/lv_examples/src/lv_drv_conf.h "$TMP/src/"
cp -r platform/thirdparty/gui/lvgl-8/lvgl "$TMP/src/"
cp -r platform/thirdparty/gui/lvgl-8/lv_drivers "$TMP/src/"
make -C "$TMP/src" clean all \
CC=out/t113_s4/100ask/buildroot/buildroot/host/opt/ext-toolchain/bin/arm-linux-gnueabi-gcc
file "$TMP/src/lv_hello_t113s4"
期望输出:ELF 32-bit LSB executable, ARM。
4. 烧写并启动验证
4.1 进入烧录模式
HOME=/tmp/adbhome adb shell 'reboot efex'
cd tools/OpenixCLI
sudo ./target/release/openixcli scan -l
期望看到 Mode: FEL。
4.2 烧写镜像
sudo ./target/release/openixcli flash /home/ubuntu/T113-tina5v1.2-sdk/out/t113_s4_linux_100ask_uart0.img \
--reconnect-timeout-sec 240 \
--reconnect-interval-ms 300 \
-v
期望日志:All partitions flashed successfully。
4.3 启动回归
HOME=/tmp/adbhome adb wait-for-device
HOME=/tmp/adbhome adb shell 'uname -a'
5. 板端运行示例验证
将示例推到板端并运行:
HOME=/tmp/adbhome adb push /tmp/lv_hello_t113s4_build/src/lv_hello_t113s4 /tmp/lv_hello_t113s4
HOME=/tmp/adbhome adb shell 'chmod +x /tmp/lv_hello_t113s4'
HOME=/tmp/adbhome adb shell '/tmp/lv_hello_t113s4 > /tmp/lv_hello_run.log 2>&1 & echo $!'
HOME=/tmp/adbhome adb shell 'ps | grep lv_hello_t113s4 | grep -v grep'
有进程即表示示例已启动。停止命令:
HOME=/tmp/adbhome adb shell 'killall lv_hello_t113s4'
常见问题
| 问题 | 解决方案 |
|---|---|
openixcli scan -l 找不到设备 | 先 adb shell reboot efex,或在 U-Boot 执行 efex |
构建时报 lv_conf.h 缺失 | 在 Build/Prepare 补拷贝 lv_conf.h 与 lv_drv_conf.h |
| 字体符号未定义 | 改用配置里已启用字体(优先 lv_font_montserrat_16) |
buildroot 阶段出现 chown ... Invalid argument | 先用"本地交叉编译 + adb push运行"验证功能 |