移植LVGL到Linux

前言

最近在板子上调试的时候用到Lvgl,这里记录一下把Lvgl V8.1移植到linux上的过程

一、准备工作

  • 准备好所用板子的交叉编译环境
  • 带LCD的linux开发板,调通LCD驱动
  • Lvgl源码
    在github上搜索Lvgl https://github.com/lvgl ,找到以下仓库并下载:
  • Lvgl (下载lvgl-release-v8.1 )
  • lv_demos (下载lv_demos-release-v8.1)
  • lv_drivers (下载lv_drivers-release-v8.1)
  • lv_port_linux_frame_buffer (下载lv_port_linux_frame_buffer-release-v8.2)

(需要说明的是,一开始下的是master分支的最新代码,但是编译的时候发现lv_disp_drv_t没有定义(error: unknown type name ‘lv_disp_drv_t’),看了下其他版本的源码,是在lvgl\src\hal\lv_hal_disp.h下定义的,但是下载的lvgl源码里并没有找到相关的文件和定义,于是就下载最新的release版本 lvgl-release-v8.1)

二、开始移植

1.在Ubuntu下创建目录lvgl_demo_test并移入相应的文件

  • 把lvgl-release-v8.1复制进文件夹lvgl_demo_test,重命名为lvgl;
  • 把lv_drivers-release-v8.1复制进文件夹lvgl_demo_test,重命名为lv_drivers;
  • 把lv_demos-release-v8.1复制进文件夹lvgl_demo_test,重命名为lv_demo;
  • 从lvgl中复制lv_conf_template.hlvgl_demo_test,并重命名为lv_conf.h
  • 从lv_drivers中复制lv_drv_conf_template.h到lvgl_demo_test,并重命名为lv_drv_conf.h
  • 从lv_demo中复制lv_demo_conf_template.h到lvgl_demo_test,并重命名为lv_demo_conf.h
  • 从lv_port_linux_frame_buffer-release-v8.2中复制main.cMakefile到lvgl_demo_test下

2.修改配置文件

修改lv_conf.h

改成#if 1使能头文件的内容
在这里插入图片描述
根据驱动(可在设备树中查看)选择像素点对应像素格式的大小,否则显示可能乱码
在这里插入图片描述
修改显存大小
在这里插入图片描述
修改刷新周期,根据所用处理器的性能调整
在这里插入图片描述
设置Tick定时器配置函数
在这里插入图片描述
使能用到的字体,不然编译会提示未定义
在这里插入图片描述
如果需要查看log,使能LV_USE_LOG,设置打印的log等级并选择打印Log的接口
在这里插入图片描述

修改lv_drv_conf.h

改成#if 1 使能头文件的内容:
在这里插入图片描述
使能LCD显示:使能USE_FBDEV,路径设置成/dev/fb0,根据板子LCD的实际情况设置
在这里插入图片描述
使能触摸屏输入:
在这里插入图片描述
在这里插入图片描述

修改lv_demo_conf.h

改成#if 1 使能头文件的内容
在这里插入图片描述
使能要移植的demo,这里使能的是LV_USE_DEMO_WIDGETS
在这里插入图片描述

2.修改main.c

设置正确的lv_demo.h头文件路径
在这里插入图片描述
设置DISP_BUF_SIZE
在这里插入图片描述
根据LCD像素尺寸修改驱动参数,我使用的屏幕是800*480像素的
在这里插入图片描述
当前没有使用到鼠标,注释掉相关代码
在这里插入图片描述
lv_demo_widgets()是所移植的demo的入口
在这里插入图片描述

3.修改Makefile

配置交叉编译器
在这里插入图片描述
编入lv_demo
mouse没用到,注释掉
在这里插入图片描述
我用的编译器版本不支持 -Wshift-negative-value这个参数,在Makefle里去掉了

三、编译运行

  • 编译
    在lv_demo_test目录下,输入make即可编译,编译后在当前目录下生成可执行文件demo
  • 运行
    把demo复制到开发板上,输入./demo即可运行
    在这里插入图片描述
LVGL v8移植Linux上需要一些步骤来进行配置和集成。以下是详细介绍: ### 准备工作 首先,确保您已经安装了必要的依赖项: - 安装图形库如Freetype用于字体渲染 - 如果需要显示图片,则需安装libjpeg、libpng等图像处理库。 ```bash sudo apt-get install freetype-dev libjpeg-dev libpng-dev ``` ### 获取源码 从GitHub下载最新的Lvgl版本并解压至合适位置: ```bash git clone https://github.com/lvgl/lvgl.git cd lvgl git checkout v8.3.5 # 或者你需要的具体标签版本 ``` ### 配置环境变量 设置`LVGL_DIR`指向您的lvgl目录,并将其添加进PATH中以便命令行工具能够找到它。 ```bash export LVGL_DIR=/path/to/your/lvgl/ export PATH=$PATH:$LVGL_DIR/tools/cmd_line ``` ### 编写示例程序 创建一个新的C文件作为入口点,在其中包含lvgl头文件,并初始化相关的硬件资源。 ```c #include "lvgl.h" // ...其他必要的导入... int main(void) { // 初始化显示器驱动和其他外设... static lv_disp_draw_buf_t draw_buf; static lv_color_t buf[LV_HOR_RES_MAX * 10]; /*缓冲区*/ lv_disp_drv_t disp_drv; /* 显示屏驱动 */ lv_disp_drv_init(&disp_drv); disp_drv.draw_buf = &draw_buf; // 根据实际情况修改以下函数调用 disp_drv.flush_cb = my_display_flush; lv_disp_drv_register(&disp_drv); while(1){ lv_task_handler(); usleep(5 * 1000); /*休眠一段时间*/ } } ``` 注意这里提到的 `my_display_flush()` ,这应该是你自己实现的一个回调函数,负责向实际屏幕发送数据更新画面内容。 对于模拟环境下运行测试目的来说,可以考虑采用xwin系统窗口作为“虚拟显示屏”。 ### 构建项目 编写Makefile或使用IDE完成对项目的编译链接过程,确保所有路径都正确无误地指向所需静态库及动态共享对象(.so). 如果遇到问题,请查阅官方文档以及论坛寻求帮助!
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值