当前位置:首页 > 系统教程 > 正文

LVGL入门教程:从零搭建LVGL工程(Linux+CMake)

LVGL入门教程:从零搭建LVGL工程(Linux+CMake)

欢迎来到LVGL嵌入式GUI教程的第一篇!本文将手把手教你如何在Linux环境下,使用CMake构建工具,从零开始搭建一个LVGL工程。无论你是嵌入式初学者还是希望迁移到LVGL的开发者,本文都将为你提供清晰的步骤。

1. 什么是LVGL?

LVGL(Light and Versatile Graphics Library)是一个开源的嵌入式GUI库,专为微控制器和嵌入式系统设计。它提供了丰富的图形元素(如按钮、标签、滑块等),并支持多种显示驱动和输入设备。使用LVGL,你可以轻松创建现代化的用户界面。

本教程聚焦在Linux平台上使用CMake构建LVGL工程,为后续移植到嵌入式硬件打下基础。

2. 准备工作

确保你的Linux系统(例如Ubuntu 20.04/22.04)已安装以下工具:

  • Git:用于克隆源码
  • CMake(版本≥3.10):构建工具
  • GCC和Make:编译工具链
  • (可选)SDL2:用于在Linux桌面模拟LVGL

安装命令:sudo apt update && sudo apt install git cmake gcc make libsdl2-dev

3. 获取LVGL源码

LVGL官方在GitHub上有多个仓库,我们需要克隆lvgl主库以及lv_drivers驱动库(用于输入和显示)。建议在home目录下创建lvgl_workspace文件夹:

mkdir ~/lvgl_workspacecd ~/lvgl_workspacegit clone https://github.com/lvgl/lvgl.gitgit clone https://github.com/lvgl/lv_drivers.git

也可以使用特定版本,例如v8.3,本教程基于LVGL v8.3。

4. 创建工程目录

lvgl_workspace下创建我们自己的工程文件夹,例如my_lvgl_app

mkdir my_lvgl_appcd my_lvgl_appmkdir build

工程结构建议:

my_lvgl_app/├── CMakeLists.txt├── main.c└── build/

5. 编写CMakeLists.txt

这是关键步骤。我们将编写CMakeLists.txt来包含LVGL和lv_drivers,并链接必要的库。

cmake_minimum_required(VERSION 3.10)project(my_lvgl_app)set(CMAKE_C_STANDARD 99)# 添加LVGL和lv_drivers子目录add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../lvgl ${CMAKE_CURRENT_BINARY_DIR}/lvgl)add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../lv_drivers ${CMAKE_CURRENT_BINARY_DIR}/lv_drivers)# 包含头文件目录include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../lvgl)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../lv_drivers)# 定义LVGL配置头文件路径(可选)add_definitions(-DLV_CONF_INCLUDE_SIMPLE)add_definitions(-DLV_LVGL_H_INCLUDE_SIMPLE)# 生成可执行文件add_executable(my_lvgl_app main.c)# 链接库target_link_libraries(my_lvgl_app lvgl lv_drivers m)

注意:上面的路径假设lvgl和lv_drivers与工程目录平级。如果你的布局不同,请相应调整路径。

如果需要使用SDL模拟器,还需要链接SDL2库,并在lv_drivers中启用SDL驱动。

6. 编写主程序main.c

下面是一个简单的LVGL程序,初始化并创建一个带按钮的界面。

#include "lvgl.h"#include "lv_drivers/display/sdl.h"#include "lv_drivers/indev/sdl_mouse.h"int main(void){    /* 初始化LVGL /    lv_init();    / 初始化SDL显示驱动 /    sdl_init();    / 注册显示驱动 /    lv_disp_drv_t disp_drv;    lv_disp_drv_init(&disp_drv);    disp_drv.draw_buf = NULL; / 使用默认缓冲区 /    disp_drv.flush_cb = sdl_display_flush;    lv_disp_drv_register(&disp_drv);    / 注册输入驱动 /    lv_indev_drv_t indev_drv;    lv_indev_drv_init(&indev_drv);    indev_drv.type = LV_INDEV_TYPE_POINTER;    indev_drv.read_cb = sdl_mouse_read;    lv_indev_drv_register(&indev_drv);    / 创建简单UI:一个按钮 */    lv_obj_t *btn = lv_btn_create(lv_scr_act());    lv_obj_set_size(btn, 100, 50);    lv_obj_center(btn);    lv_obj_t label = lv_label_create(btn);    lv_label_set_text(label, "Click me!");    / 主循环 */    while(1) {        lv_timer_handler();        lv_tick_inc(5); /* 模拟5ms tick */        usleep(5000);    }    return 0;}

这里使用了SDL驱动以便在Linux桌面模拟运行。实际嵌入式项目需要换成对应硬件的驱动。

LVGL入门教程:从零搭建LVGL工程(Linux+CMake) LVGL  CMake Linux 嵌入式GUI 第1张

7. 编译与运行

进入build目录,运行CMake配置和编译:

cd buildcmake ..make

编译成功后,在build目录下会生成可执行文件my_lvgl_app,运行它:

./my_lvgl_app

如果一切顺利,你应该看到一个SDL窗口,中间有一个写着“Click me!”的按钮。

8. 常见问题

Q: 编译时找不到lvgl头文件? A: 检查CMakeLists.txt中的路径是否正确,确保lvgl和lv_drivers目录存在。

Q: 链接错误:undefined reference to lv_btn_create? A: 可能需要链接m库(数学库),已包含在target_link_libraries中。另外确认LVGL配置中是否启用了按钮部件(默认全开)。

Q: 没有SDL窗口? A: 确保安装了SDL2库,并在CMake中正确链接。可以在CMakeLists.txt中添加:find_package(SDL2 REQUIRED)target_link_libraries(my_lvgl_app SDL2)

9. 总结

通过本教程,你已经学会了如何在Linux+CMake环境中搭建一个基础的LVGL工程。下一步可以尝试修改UI、添加更多部件,或者将工程移植到具体的嵌入式硬件上。LVGL的学习曲线平缓,官方文档详细,非常适合开发嵌入式GUI。希望本文对你有帮助!

(本文关键词:LVGL, CMake, Linux, 嵌入式GUI)