0


IMX6ULL开发板LVGL v9移植指南,适用韦东山、正点原子、野火板子

文章目录

前言

LVGL v9版本相比v8增加了很多功能,比如内置显示和触摸驱动、更好的并行渲染架构,内置支持 LVGL 的 C 库和其他 stdlibs等等。我使用的开发板是IMX6ULL,搭载Linux 4.9内核,开发主机为Windows11,使用WSL2作为开发环境。此次在移植过程中遇到不少坑,目前网上还没搜到相关的v9移植教程,因此写一篇文章记录下,顺便把移植经验分享给有需要的人。

移植步骤

打开wsl2,输入如下命令:

# 克隆lv_port_linux仓库并安装lvgl子模块git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux_frame_buffer/
git submodule update --init--recursive

网络不行的同学,可以克隆我这个仓库(配置已改好),效果是一样的:

git clone https://e.coding.net/g-fgva2961/personal/lv_port_linux.git

进入

lv_port_linux

目录,结构如下:

image-20240605173159415

可以看到,相比v8版本,v9版本少了

lvgl_driver

目录,这是因为lvgl里面已经内置了相关驱动。

我们打开根目录的

CMakeLists.txt

文件,进行修改:

cmake_minimum_required(VERSION 3.10)

# 设置交叉编译
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
# 这里指定的路径必须是绝对路径
set(CMAKE_C_COMPILER /root/Tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER /root/Tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

project(lvgl)

set(CMAKE_C_STANDARD 99)#C99 # lvgl officially support C99 and above
set(CMAKE_CXX_STANDARD 17)#C17
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

add_subdirectory(lvgl)
target_include_directories(lvgl PUBLIC ${PROJECT_SOURCE_DIR})

add_executable(main main.c mouse_cursor_icon.c)

# 注释掉这行,如果要使用DRM驱动,则需要放开这行
# include(${CMAKE_CURRENT_LIST_DIR}/lvgl/tests/FindLibDRM.cmake)
# include_directories(${Libdrm_INCLUDE_DIRS})

# 注释掉下面三个,这个是在PC端使用的
# find_package(SDL2)
# find_package(SDL2_image)
# include_directories(${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS})

target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)
Cmake

的作用是生成

Makefile

文件,接下来我们对lvgl的配置文件进行修改,v9版本的

lv_conf.h

新增了很多配置项,我把配置项做成了一个表格,点击这篇文章可以看到,新版lv_conf配置项速查表 ,有需要的同学自取~

下面我针对我的IMX6ull开发板为例,列出需要修改的项:

// 根据你屏幕的选择合适的色深#defineLV_COLOR_DEPTH32// 14毫秒刷新一次#defineLV_DEF_REFR_PERIOD14// 下面这三项是检测项,开了之后很卡,建议关闭#defineLV_USE_ASSERT_STYLE0#defineLV_USE_ASSERT_MEM_INTEGRITY0#defineLV_USE_ASSERT_OBJ0// 对象样式缓存默认0,这里设置20#defineLV_OBJ_STYLE_CACHE20// 下面这两个显示帧率和cpu使用情况,根据个人需要是否开启#defineLV_USE_PERF_MONITOR1#defineLV_USE_MEM_MONITOR1// 开启framebuffer,确保这一项是开启的,如果要使用DRM驱动,请配置LV_USE_LINUX_DRM 1#defineLV_USE_LINUX_FBDEV1// 开启输入设备驱动,这项默认是关闭的#defineLV_USE_EVDEV1

修改了

lv_conf.h

后,打开

main.c

文件,将

main

函数替换成如下内容

intmain(void){lv_init();/*Linux display device init*/lv_linux_disp_init();// 这行默认是没有的,因此我们无法使用input驱动,也就无法点击触摸屏lv_indev_t* indev =lv_evdev_create(LV_INDEV_TYPE_POINTER,"/dev/input/event1");/*Create a Demo*/lv_demo_widgets();// 关闭自动滑动功能// lv_demo_widgets_start_slideshow();// lv_demo_multilang();/*Handle LVGL tasks*/while(1){lv_timer_handler();usleep(5000);}return0;}
/dev/input/event1

是我的触摸屏驱动,要确认自己的触摸屏是哪个设备文件,可以使用

hexdump /dev/input/eventx

命令检查每个

event

,滑动触摸屏如果有数据,就是那个

event

。哦对了,fb默认使用的是

/dev/fb0

,如果你的fb不是这个,在

main.c

文件里面修改。

准备就绪就可以进行编译了,确保你的

Cmake

版本在

3.12.4

以上,之后运行如下命令:

mkdir build
cd build 
cmake ..make-j

编译成功后,可以看到根目录的

bin

目录下有个

main

二进制可运行文件。

image-20240605212507384

将该文件放到开发板上运行,下图是运行效果:

1717594066268

总结

此次移植过程花了大概3小时左右,前后翻看了很多官方issue和文档,v9版本目前编译后的文件大小比v8版本大了许多,因为集成了很多功能,但通过配置项,我们可以裁剪掉这些功能,后续等把配置项研究透了,再出一篇如何裁剪的教程。

标签: linux lvgl 移植

本文转载自: https://blog.csdn.net/Leon_Chenl/article/details/139483262
版权归原作者 Leon_Chenl 所有, 如有侵权,请联系我们删除。

“IMX6ULL开发板LVGL v9移植指南,适用韦东山、正点原子、野火板子”的评论:

还没有评论