欢迎来到LVGL嵌入式GUI教程的第一篇!本文将手把手教你如何在Linux环境下,使用CMake构建工具,从零开始搭建一个LVGL工程。无论你是嵌入式初学者还是希望迁移到LVGL的开发者,本文都将为你提供清晰的步骤。
LVGL(Light and Versatile Graphics Library)是一个开源的嵌入式GUI库,专为微控制器和嵌入式系统设计。它提供了丰富的图形元素(如按钮、标签、滑块等),并支持多种显示驱动和输入设备。使用LVGL,你可以轻松创建现代化的用户界面。
本教程聚焦在Linux平台上使用CMake构建LVGL工程,为后续移植到嵌入式硬件打下基础。
确保你的Linux系统(例如Ubuntu 20.04/22.04)已安装以下工具:
安装命令:sudo apt update && sudo apt install git cmake gcc make libsdl2-dev
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。
在lvgl_workspace下创建我们自己的工程文件夹,例如my_lvgl_app:
mkdir my_lvgl_appcd my_lvgl_appmkdir build 工程结构建议:
my_lvgl_app/├── CMakeLists.txt├── main.c└── build/ 这是关键步骤。我们将编写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驱动。
下面是一个简单的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桌面模拟运行。实际嵌入式项目需要换成对应硬件的驱动。
进入build目录,运行CMake配置和编译:
cd buildcmake ..make 编译成功后,在build目录下会生成可执行文件my_lvgl_app,运行它:
./my_lvgl_app 如果一切顺利,你应该看到一个SDL窗口,中间有一个写着“Click me!”的按钮。
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)。
通过本教程,你已经学会了如何在Linux+CMake环境中搭建一个基础的LVGL工程。下一步可以尝试修改UI、添加更多部件,或者将工程移植到具体的嵌入式硬件上。LVGL的学习曲线平缓,官方文档详细,非常适合开发嵌入式GUI。希望本文对你有帮助!
(本文关键词:LVGL, CMake, Linux, 嵌入式GUI)
本文由主机测评网于2026-02-13发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20260225083.html