LVGL开发指南
以下是将您上述 LVGL 相关文档内容整理为 Markdown (.md
) 格式,方便阅读和归档。
LVGL Tina Linux 移植文档
简介
LVGL 是一个免费的开源图形库,提供创建嵌入式 GUI 所需的一切,具有易用的图形元素、美观的视觉效果和低内存占用,采用 MIT 许可协议。详细资料可访问 LittlevGL 官网。
特性
- 强大的构建块:按钮、图表、列表、滑块、图像等。
- 高级图形引擎:动画、抗锯齿、不透明度、平滑滚动、混合模式等。
- 多输入设备支持:触摸屏、鼠标、键盘、编码器、按钮等。
- 支持多显示器。
- 硬件无关性:可与任何微控制器和显示器搭配使用。
- 高扩展性:最低支持 64 kB 闪存、16 kB RAM。
- 多语言支持:UTF-8、CJK、双向/阿拉伯语处理。
- 可定制样式:类 CSS 样式。
- 强大布局:Flexbox 与 Grid。
- 支持操作系统、外部内存、硬件 GPU(但不是必要前置条件)。
- 高效单帧缓冲平滑渲染。
- C 语言编写,同时兼容 C++。
- Micropython 支持。
- 可在 PC 模拟器开发。
- 100+ 简单例子。
- 完整文档与 API 参考(在线及 PDF 格式)。
Tina Linux 移植
Tina Linux 已移植 LVGL 8.1.0 核心组件及 Demo。相关库说明如下:
包名 | 说明 |
---|---|
lv_demos | lvgl 的官方 demo |
lv_drivers | lvgl 官方设备驱动,集成 sunxifb、sunxig2d、sunximem |
lv_examples | lvgl 测试用例,最终调用 lv_demos 中的函数 |
lvgl | lvgl 核心库 |
lv_g2d_test | g2d 测试用例,测试已对接的 g2d 接口 |
lv_monitor | 压力测试与状态监测软件 |
sunxifb.mk | 公共配置,写应用 Makefile 时需要包含 |
LVGL 配置
编译选项(make menuconfig
)如下:
Gui --->
Littlevgl --->
<*> lv_examples (lvgl 官方 demo)
-*- lvgl-8.1.0 use sunxifb double buffer (双缓冲,防止撕裂)
[*] lvgl-8.1.0 use sunxifb cache (使能 fb cache)
-*- lvgl-8.1.0 use sunxifb g2d (G2D 硬件加速)
[*] lvgl-8.1.0 use sunxifb g2d rotate (G2D 硬件旋转)
[ ] lvgl-8.1.0 use freetype (链接 FreeType 字体库)
<*> lv_g2d_test (g2d 接口测试用例)
<*> lv_monitor (压力与监测软件)
LVGL 源码框架
LVGL 源码目录位于:
platform/thirdparty/gui/lvgl-8
结构如图:
lvgl-8/
├─ lv_demos/
├─ lv_drivers/
│ ├─ display/
│ │ ├─ sunxifb.c
│ │ ├─ sunxig2d.c
│ │ ├─ sunxigmem.c
│ ├─ indev/
│ │ └─ evdev.c
├─ lv_examples/
├─ lv_monitor/
├─ sunxifb.mk
└─ ...
主要驱动与接口说明
sunxifb
显示接口文件:
platform/thirdparty/gui/lvgl-8/lv_drivers/display/sunxifb.c
接口 | 说明 |
---|---|
sunxifb_init | 初始化显示引擎;带旋转参数,可指定旋转方向(如 LV_DISP_ROT_NONE , LV_DISP_ROT_90 等)。 |
sunxifb_exit | 关闭 cache、g2d、释放 buffer、关闭 fb0。 |
sunxifb_flush | 将 draw buffer 拷贝到 back buffer,并交换前后台 buffer。无需应用调用。 |
sunxifb_get_sizes | 获取屏幕分辨率,应用不用写死。 |
sunxifb_alloc | 申请系统绘图内存,使能 g2d 后申请连续物理内存。 |
sunxifb_free | 释放 sunxifb_alloc 申请的内存。 |
旋转参数参考:
LV_DISP_ROT_NONE
、LV_DISP_ROT_90
、LV_DISP_ROT_180
、LV_DISP_ROT_270
disp_drv.rotated = rotated
无 g2d 旋转可指定 disp_drv.sw_rotate = 1
使用软件旋转。
sunxig2d
G2D 硬件加速接口文件:
platform/thirdparty/gui/lvgl-8/lv_drivers/display/sunxig2d.c
接口 | 说明 |
---|---|
sunxifb_g2d_init | 初始化 g2d,打开 /dev/g2d 节点,设置格式。 |
sunxifb_g2d_deinit | 关闭 g2d 设备。 |
sunxifb_g2d_get_limit | 获取 g2d 使用阈值。 |
sunxifb_g2d_blit_to_fb | 拷贝 fb0 的 front/back buffer,可旋转。 |
sunxifb_g2d_fill | g2d 填充颜色矩形,支持透明度。 |
sunxifb_g2d_blit | 拷贝图像。 |
sunxifb_g2d_blend | 图像混合。 |
sunxifb_g2d_scale | 图像缩放。 |
以上函数已对接 LVGL 绘图框架,直接使用 lv_draw_map
、lv_img_set_zoom
、lv_canvas_draw_img
等 LVGL API 调用对应功能。
完整示例见 lv_g2d_test
应用。
sunximem
物理内存管理接口文件:
platform/thirdparty/gui/lvgl-8/lv_drivers/display/sunxigmem.c
接口 | 说明 |
---|---|
sunxifb_mem_init | 初始化物理内存申请接口(用 libuapi)。 |
sunxifb_mem_deinit | 释放接口资源。 |
sunxifb_mem_alloc | 申请物理连续内存(图像/画布等)。需要字节数及用途说明。 |
sunxifb_mem_free | 释放内存。 |
sunxifb_mem_get_phyaddr | 虚拟地址转换物理地址。g2d 只接受物理地址。 |
sunxifb_mem_flush_cache | 刷新申请 buffer 的 cache。 |
注意: g2d 驱动仅支持物理连续内存。图片解码时需使用
sunxifb_mem_alloc
。 已实现 bmp、png、gif 的物理内存申请,jpeg 暂未支持。 画布的 buffer(LVGL canvas)需用sunxifb_alloc
申请。 目前 lv_canvas 未对接 g2d 缩放功能。
evdev
触摸输入驱动,采用 LVGL 官方实现:
platform/thirdparty/gui/lvgl-8/lv_drivers/indev/evdev.c
- 配置触摸 event 节点:在
lv_drv_conf.h
修改EVDEV_NAME
如/dev/input/eventX
。 - 示例配置文件位置:
platform/thirdparty/gui/lvgl-8/lv_examples/src/lv_drv_conf.h
- 调试可用软链接指定触摸节点:
shell
ln -s /dev/input/eventX /dev/input/touchscreen
LVGL 运行与常用命令
提供的可执行测试用例如下:
lv_examples 0 # lv_demo_widgets
lv_examples 1 # lv_demo_music
lv_examples 2 # lv_demo_benchmark
lv_examples 3 # lv_demo_keypad_encoder
lv_examples 4 # lv_demo_stress
lv_g2d_test 0 5 0 1
# 参数说明:
# one num: 旋转 (0~3)
# two num: gif (0~11, 11 不显示 gif)
# three num: bmp (0~2, 2 不显示 bmp)
# four num: png (0~3, 3 不显示 png)
lv_monitor
在初始化时,会根据配置项打印如下内容,表示已启用相关功能:
wh=1280x800, vwh=1280x1600, bpp=32, rotated=0
Turn on double buffering.
Turn on 2d hardware acceleration.
Turn on 2d hardware acceleration fill.
Turn on 2d hardware acceleration blit.
Turn on 2d hardware acceleration blend.
Turn on 2d hardware acceleration scale.
Turn on 2d hardware acceleration rotate.
文档与参考
- LVGL 官方文档
- LVGL 示例代码
- LVGL GitHub
- Tina Linux 官方 (假设有相关页面)
如需更详细的接口说明或开发指导,请查阅项目源码及官方 Wiki。
参考资料:Tina Linux 与 LVGL