目录

Linux系统基于ARM平台的LVGL移植

Linux系统基于ARM平台的LVGL移植

软硬件介绍:Ubuntu 20.04 ARM 和(Cortex-A53架构)开发板

  1. 基本原理

https://i-blog.csdnimg.cn/direct/13fcb539d96f45fc9216d62c7a41fb08.png

LVGL图形库是支持使用Linux系统的Framebuffer帧缓冲设备实现的,如果想要实现在ARM开发板上运行LVGL图形库,那么就需要把LVGL图形库提供的关于帧缓冲设备的案例源码进行移植。

  1. ARM开发板搭载的Linux系统,并且开发板板载了7寸的LCD屏和电容式触摸屏,如下:

https://i-blog.csdnimg.cn/direct/f1295555015c4a8b99fb9e4006549183.png

  1. (只想了解如何使用可以不看,这里的源码可以在文章最后的百度网盘找到)阅读LVGL关于Linux帧缓冲设备的技术博客,下载要移植的源码和了解要修改的内容!

https://i-blog.csdnimg.cn/direct/13cb6ea99a8c429893cf862aa1b54a6c.png

由于git采用的分支管理,所以下载的案例源码中缺少lvgl和lvgl_drivers的分支源码,所以需要从GitHub中下载这两个分支源码,如下图:

https://i-blog.csdnimg.cn/direct/589dec81aa534384895c160da7dc7b32.png

https://i-blog.csdnimg.cn/direct/eda57e2114854ce8b4a529b18f6d5b7c.png

https://i-blog.csdnimg.cn/direct/1c37c1aad36441caad0754c4fae249c7.png

2.把两个分支源码包下载到本地之后,需要对两个源码包进行解压,再把解压之后的所有内容分别拷贝到工程中lvgl文件夹和lvgl_drivers文件夹中即可,这样就完成了源码的整合!!

https://i-blog.csdnimg.cn/direct/09b1b3f15a49471f8c8ae3edad60af63.png

(1)根据LVGL官方的提示把两个分支源码包中的配置文件替换到主源码包根目录下,如下:

https://i-blog.csdnimg.cn/direct/0648bf0ef49e43a0a9b56f0ef6e92208.png

注意:要把lvgl文件夹中的lv_conf_template.h和lv_drivers文件夹中的lv_drv_conf_template.h这两个文件拷贝到工程根目录下,并且把lv_conf_template.h改名为lv_conf.h,把lv_drv_conf_template.h改名为lv_drv_conf.h。

https://i-blog.csdnimg.cn/direct/d4b15ecae7964dbcad955309efeac75a.png

(2)根据LVGL官方的提示来修改主源码包的lv_conf.h配置文件中的部分参数,具体如下图:

https://i-blog.csdnimg.cn/direct/34d52cf6025c4b8f825c3fcce37ca0f5.png

https://i-blog.csdnimg.cn/direct/77387e39f7b44a1a8158b07afe465a50.png

https://i-blog.csdnimg.cn/direct/a73e90b416324926bb625af7c85c9fb1.png

https://i-blog.csdnimg.cn/direct/725375546d844b47a8ca03ed1bd189af.png

https://i-blog.csdnimg.cn/direct/87420b78f3f64afcb6abf73400434629.png

(3)根据LVGL官方的提示来修改主源码包的lv_drv_conf.h配置文件中的部分参数,如下图:

https://i-blog.csdnimg.cn/direct/885a3391796e416ea36d7a9f03701633.png

https://i-blog.csdnimg.cn/direct/f42db7ff94ed4f62a1d7f23503162a91.png

https://i-blog.csdnimg.cn/direct/d4349f055b44466090142bb176c51a5f.png

(4)由于开发板采用ARM平台,所以需要修改案例源码中Makefile脚本文件的编译工具链

https://i-blog.csdnimg.cn/direct/7393b080520047efb2a521fa19a30adf.png

注意:(5)把整个源码工程放入Linux系统中,并切换到源码工程中对源码进行编译,输入: make

https://i-blog.csdnimg.cn/direct/29547d98137243beb406b264044486a9.png

可以看到对工程进行编译时会提示以下错误:cc: error: unrecognized command line option ‘-Wshift-negative-value’

这个错误原因是指Linux系统中使用的arm-linux-gcc交叉编译器不支持这个选项,所以解决方案是更换更高版本的arm-linux-gcc编译器或者从Makefile脚本文件中把这句话删掉。

https://i-blog.csdnimg.cn/direct/7bfab57d931346b2bfca3bf63b17a69e.png

从Makefile脚本文件中删掉 “-Wshift-negative-value”之后,保存脚本后对工程再次编译即可。

https://i-blog.csdnimg.cn/direct/8b1d585ce6af4d8fa54d1d1b40d753f4.png

如果没有任何其他错误提示,则说明源码编译通过,此时可以把生成的可执行文件下载到ARM开发板测试。

(6)切换到项目源码的 build/bin目录下可以看到一个名称叫做demo的可执行文件,如下:

https://i-blog.csdnimg.cn/direct/2ce63c7e50024c0c838cbe739abea471.png

注意:(7)把可执行文件下载到ARM开发板中,修改可执行文件的权限,并运行可执行文件观察!

https://i-blog.csdnimg.cn/direct/62384a36f24645b8b79700d48641dcdc.png

可以看到,ARM开发板确实可以显示LVGL图形库提供的例程,但是 此时是无法通过触摸屏切换界面的 ,原因是在main.c的循环中没有调用一个名称叫做lv_tick_inc()的函数接口。

https://i-blog.csdnimg.cn/direct/cbd5fc96d5e140a5bbfe06affde2b3f1.png

整个 图形库的运转都是基于 LVGL图形库中定义的 ”Timer“ 定时器,系统需要给 LVGL 一个 ”心跳“,LVGL图形库框架才可以正常的运转起来。而lv_tick_inc()就是用于系统告知LVGL图形库时间的函数接口,该函数是以毫秒为单位的。

https://i-blog.csdnimg.cn/direct/5ec243cce6f7421a8b938ffe54f4f413.png

修改main.c之后重新对工程进行编译,再把生成的可执行文件下载到开发板验证即可!

源码百度网盘链接:通过网盘分享的文件:LVGL.rar

链接: 提取码: hfym

–来自百度网盘超级会员v2的分享