基于linux系统移植的LVGL

LVGL介绍

LVGL是一个开源的嵌入式图形库,全称为Little Video Graphics Library。它专注于为嵌入式系统提供高性能、低资源占用的图形用户界面(GUI)解决方案。 LVGL具有模块化(项目工程源码)的设计,可以在多种硬件平台上运行,包括微控制器和微处理器。 LVGL提供了丰富的图形元素和控件,如按钮、标签、列表、进度条等,以及支持动画效果和触摸屏交互。ARM、Ubuntu、windows、单片机:不同系统平台的兼容硬件驱动的源码 它还提供了灵活的主题和样式(或者样式表)机制(比较深入的控件特点),可以自定义界面的外观和行为。

移植需要下载三部分的码源:LVGL源码,LVGL linux平台总资源框架+LVGL驱动源码

LVGL的官方网址:https://lvgl.io

1.下载LVGL源码

2.下载arm linux开发板fb0的源码主框架:

3.下载VGL驱动源码

下载完之后会出现这里三个压缩包

点击这lv_port_linux_frame_buffer-release-v8.2文件中的lv_drivers和lvgl这两个文件你会发现其是空的

我们需要将其他两个压缩包里面的文件相对应复制过来就可以了

3.再ubuntu中成功编译

我们打开v_port_linux_frame_buffer-release-v8.2文件中的Makeflie文件

因为我们走的是arm开发板所以要将gcc改为arm-linux-gcc.其中?是LVGL默认的gcc的编译,所以得将其删除

再打开虚拟机的时候使用make编译会出现这个错误

-Wshift-negative-value错误没有这个指令

再makefile文件中将其删除就好了,这个指令是左移负值警告,之后再make就可以显示编译成功了

然后可以使用file命令来查看程序的文件是不是俗语ARM32位的arm平台

会发现make编译的时候会很慢,因为现在是静态编译,需要将所有的.c文件生成.o文件,再将.o文件编译成可执行的文件,这个只再第一次会这么慢,下次编译就会根据时间戳来确定那个文件修改了再编译那个文件,但是你不能保证你以后是否会使用make clear 指令,这样又得等待很久的时间编译了

建议使用改为动态编译

### 移植LVGL 9到Linux系统的指南 #### 下载并配置LVGL源码 为了在Linux系统移植LVGL 9,首先需要获取最新版本的LVGL源代码。可以通过Git命令克隆官方仓库: ```bash git clone --branch master https://github.com/lvgl/lvgl.git cd lvgl ``` 对于特定版本如V9.x系列,可以切换分支至对应标签或创建新分支基于该版本[^1]。 #### 安装依赖项 确保安装了构建GUI应用程序所需的工具链和库文件。特别是针对图形渲染的支持包,比如SDL2: ```bash sudo apt-get update && sudo apt-get install -y build-essential libsdl2-dev ``` 这一步骤同样适用于其他可能需要用到的多媒体框架或者显示服务接口。 #### 配置项目结构 建立一个新的工作空间来容纳lvgl及相关组件,并复制必要的头文件路径给编译环境变量以便于后续操作。如果打算集成额外硬件抽象层(HAL),则还需准备相应的驱动程序模块。 #### 编写初始化函数 编写一段简单的C/C++代码用于启动LVGL引擎并与选定平台适配。下面是一个基本的例子展示如何设置窗口管理器以及加载默认主题样式表: ```c #include "lvgl/lvgl.h" int main(void){ /* Initialize SDL */ if(SDL_Init(SDL_INIT_VIDEO) != 0){ printf("Unable to initialize SDL: %s\n", SDL_GetError()); return -1; } /* Create an SDL window */ SDL_Window *window = SDL_CreateWindow( "LVGL Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 480, 320, SDL_WINDOW_SHOWN); // 初始化LVGL lv_init(); // 设置显示器刷新回调 static lv_disp_buf_t disp_buf; static lv_color_t buf[LV_HOR_RES_MAX * LV_VER_RES_MAX]; lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * LV_VER_RES_MAX); lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); /* Basic initialization */ disp_drv.flush_cb = sdl_display_flush; /* Set up the flush callback */ disp_drv.buffer = &disp_buf; lv_disp_drv_register(&disp_drv); while (true) { lv_task_handler(); usleep(5 * 1000); } } ``` 上述代码片段展示了如何通过调用`lv_init()`方法完成核心对象实例化过程;定义了一个固定大小的颜色缓冲区作为屏幕帧缓存;注册了自定义实现的画面更新逻辑入口点`sdl_display_flush`负责实际绘图动作执行。 #### 实现输入设备处理机制 除了视觉呈现外,交互体验也是至关重要的组成部分之一。因此还需要考虑加入触摸屏或其他形式的人机界面控制方式支持。通常情况下会涉及到事件监听循环的设计,例如利用SDL提供的API捕获鼠标点击位置坐标映射成虚拟按键信号传递给LVGL内部状态机解析处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值