模拟器介绍
LVGL · GitHub 官网的网站
可以看到LVGL是核心代码,其他平台的移植代码都要基于这个LVGL核心代码,下面介绍一下这几种的区别
1> lvgl
lvgl/lvgl Github链接
- 主库:这是 LVGL 的核心库。
- 用途:
- 包含所有核心功能和控件的实现,例如绘图引擎、动画、样式系统、多语言支持等。
- 仅提供与硬件无关的通用代码(例如控件逻辑和 API)。
- 没有内置任何硬件相关的驱动,也没有具体的移植代码。
- 这是 LVGL 开发的基础,几乎所有 LVGL 项目都会依赖它。
2> lv_port_linux
lvgl/lv_port_linux Github链接
- 移植项目:LVGL 在 Linux 平台(如 PC 或嵌入式 Linux 设备)上的移植代码。
- 用途:
- 提供 LVGL 在 Linux 系统上运行的移植示例。
- 包括显示设备(framebuffer、SDL 等)和输入设备(鼠标、触摸屏等)的驱动代码。
- 方便在 Linux 系统上快速运行和调试 LVGL 项目。
- 包含内容:
- 显示驱动:支持通过 Linux framebuffer 或 SDL 渲染。
- 输入驱动:支持鼠标和键盘输入模拟触摸操作。
- 配置文件:提供了 LVGL 的移植配置和示例代码。
3> lv_port_eclipse
lvgl/lv_port_pc_eclipse Github链接
- 开发环境模板:这是 LVGL 官方提供的一个 基于 Eclipse IDE 的移植模板。
- 用途:
- 提供在 PC 模拟器中运行 LVGL 项目的示例。
- 使用 Eclipse 和 MinGW/SDL2 作为开发环境。
- 包含内容:
- 模拟器代码:通过 SDL2 库在 Windows 或 Linux 的模拟器中运行 LVGL 项目。
- Eclipse 项目模板:已经配置好 LVGL 和 SDL2 的开发环境,开箱即用。
- 示例代码:包含简单的 LVGL 示例代码,帮助快速上手。
lv_port_eclipse 8.3 搭建
下载 lv_port_eclipse
下载lvgl
下载lvgl_driver
新建工程
将下载来的压缩包全部解压,注意 注意 注意解压路径下千万不能有中文。
lv_port_pc_eclipse
在该目录下会有两个空文件夹分别为lvgl
和lv_drivers
,将解压后的另外两个文件夹 里面的内容(ctrl + a全选复制就好放对应的放到这两个文件夹中。
MinGW安装
1> 压缩包下载
将该压缩包解压缩到自己对应的开发环境文件夹,例如我是习惯将开发工具及相关环境放在E:\Environment
下,同时还是 注意 路径不能有中文和空格。
2> 配置环境变量
3> 验证环境
CMake安装
验证安装成功:cmake --version
有些电脑添加环境变量后需要重启才能生效
VScode编译运行
安装插件
打开项目
打开后,默认会编译一次
点击Build对源码进行编译,编译完成后,会多出bin
和build
目录,将mingw64\x86_64-w64-mingw32\bin里的SDL2.dll拷贝到bin这个目录中。
然后点击下方栏目三角形的运行按钮,运行结果如下:
没有GCC状态栏解决办法
打开CMake tool设置
添加 status
过滤,并将hidden
选项改成visible
lv_port_linux搭建9.2版本(推荐)
https://github.com/lvgl/lv_port_linux/tree/release/v9.2
https://github.com/lvgl/lvgl/tree/72dfc1d75198a126dd495483d9cbc5b27c6c882b
- 首先解压这两个文件,然后解压出来的
lv_linux
目录下的lvgl
是空的,这时候再把解压后的lvgl
里面的所有东西复制到lv_linux
目录下的lvgl
目录下。
ubuntu配置SDL
1. 进入纯命令行,不然会和原先的图形界面起冲突,下面的F1~F6取决于你的ubuntu系统版本
Ctrl + alt + F1 ~ F6
2. 安装图形界面库
由于纯命令行无法复制,所以下面的代码只能 手敲 ,注意不要敲错了
sudo apt-get update #更新软件源
sudo apt-get install libsdl2-2.0-0 libsdl2-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-gfx-dev -y #安装SDL图形库
3. 解压源码到家目录
- 不在家目录也行,但是 千万 不要放在中文路径下,指不定就报些奇奇怪怪的错误
tar -xzvf lv_port_linux_ubuntu_sdl.tar.bz -C ~/ #解压到家目录
cd ~/lv_port_linux/ #进入源码目录
我是下的9.0版本,然后在把里面默认的lvgl下过来了,发现在lvgl下的src下没有driver这个文件夹,也就是没有相关的sdl驱动,很坑。所以我重新选了个lvgl9.0版本下载过来替换掉。至于Makefile不知道为什么死活make不了,已放弃改用cmake了。
!!!改用9.2版本
后续:!!!
第二天早上过去github一看,发现9.0版本的Lv_port_linux里面的核心依赖lvgl里的src文件夹下面又有drviers这个驱动文件夹了,天塌了,我只能说 RNM,退钱。搞了我半天。*
还有就是为什么 Makefile 用不了,这时候我去看了一下github 9.0版本的最下面的说明
😂😅😅这件事告诉我们移植别人代码前一定要好好看说明文档,不然真的会吐血
修改LVGL配置
首先我们使用的是SDL2驱动,而LVGL9.2
默认配置是使用THORVG
所以我们要修改 lv_conf.h
里面的三个宏,启用SDL,禁用THORVG
温馨提示😁😁ctrl+f
搜索修改
#define LV_USE_LINUX_FBDEV 0
#define LV_USE_LINUX_DRM 0
#define LV_USE_VG_LITE_THORVG 0
#define LV_USE_THORVG_INTERNAL 0
#define LV_USE_SDL 1
还有这个不禁用的话可能也会报错,我的就报错了,但不一定每个工程都这样。
修改CMakeLists.txt
检查有没有链接SDL库的代码不然编译找不到SDL库可能会报错。
如过没有装g++
编译器下面设置C++标准会报错,但是设置主要是为了方便移植到c++环境。
可以选择注释或者安装,下面给出安装代码:
sudo apt-get update
sudo apt—get install g++
cmake_minimum_required(VERSION 3.10)
project(lvgl)
# 设置 C 和 C++ 标准
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置可执行文件的输出路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# 添加子目录(lvgl)
add_subdirectory(lvgl)
target_include_directories(lvgl PUBLIC ${PROJECT_SOURCE_DIR})
# 找到 SDL2 库
find_package(SDL2 REQUIRED)
if (SDL2_FOUND)
include_directories(${SDL2_INCLUDE_DIRS})
else()
message(FATAL_ERROR "SDL2 not found. Please install SDL2 development files.")
endif()
# 可执行文件
add_executable(main main.c mouse_cursor_icon.c)
# 链接库
target_link_libraries(main
lvgl
lvgl::examples
lvgl::demos
lvgl::thorvg
${SDL2_LIBRARIES}
m
pthread
)
修改main函数
main函数可以精简成这个版本,直接使用SDL作为显示输出,保留默认的main函数也可以
#include "lvgl/lvgl.h"
#include "lvgl/demos/lv_demos.h"
#include <unistd.h>
#include <pthread.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
//获取默认环境变量的值
static const char * getenv_default(const char * name, const char * dflt)
{
return getenv(name) ?: dflt;
}
//初始化LVGL的显示框架
static void lv_linux_disp_init(void)
{
const int width = atoi(getenv("LV_SDL_VIDEO_WIDTH") ?: "800");
const int height = atoi(getenv("LV_SDL_VIDEO_HEIGHT") ?: "480");
lv_sdl_window_create(width, height);
}
int main(void)
{
//初始化LVGL库
lv_init();
/*Linux display device init 初始化显示设备 */
lv_linux_disp_init();
// init input device 初始化输入设备
lv_sdl_mouse_create(); //鼠标
lv_sdl_keyboard_create(); //键盘
lv_sdl_mousewheel_create(); //滚轮
/*Create a Demo 创建一个示例程序*/
// lv_example_button_1();
// lv_demo_widgets();
// lv_demo_widgets_start_slideshow();
// lv_example_ime_pinyin_2();
/*Handle LVGL tasks 循环处理LVGL的任务*/
while(1) {
lv_timer_handler();
usleep(5000);
}
return 0;
}
编译
确保自己在ubuntu装了cmake。如果没有就安装一下
sudo apt update //更新软件源
sudo apt install cmake //安装cmake
cmake --version //安装完验证是否能输出版本号,如果可以的话表示安装成功
编译
mkdir build
cd build
cmake ..
make -j12 //开启12条线程编译
若果
运行
在当前项目根目录下会有一个bin,里面存放了可执行文件main
./bin/main