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

打印 上一主题 下一主题

主题 641|帖子 641|积分 1923

前言

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

打开wsl2,输入如下命令:
  1. # 克隆lv_port_linux仓库并安装lvgl子模块
  2. git clone https://github.com/lvgl/lv_port_linux.git
  3. cd lv_port_linux_frame_buffer/
  4. git submodule update --init --recursive
复制代码
网络不可的同学,可以克隆我这个堆栈(配置已改好),效果是一样的:
  1. git clone https://e.coding.net/g-fgva2961/personal/lv_port_linux.git
复制代码
进入lv_port_linux目录,结构如下:

可以看到,相比v8版本,v9版本少了lvgl_driver目录,这是由于lvgl内里已经内置了相关驱动。
我们打开根目录的CMakeLists.txt文件,进行修改:
  1. cmake_minimum_required(VERSION 3.10)
  2. # 设置交叉编译
  3. set(CMAKE_SYSTEM_NAME Linux)
  4. set(CMAKE_SYSTEM_PROCESSOR arm)
  5. # 这里指定的路径必须是绝对路径
  6. set(CMAKE_C_COMPILER /root/Tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
  7. set(CMAKE_CXX_COMPILER /root/Tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)
  8. project(lvgl)
  9. set(CMAKE_C_STANDARD 99)#C99 # lvgl officially support C99 and above
  10. set(CMAKE_CXX_STANDARD 17)#C17
  11. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  12. set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
  13. add_subdirectory(lvgl)
  14. target_include_directories(lvgl PUBLIC ${PROJECT_SOURCE_DIR})
  15. add_executable(main main.c mouse_cursor_icon.c)
  16. # 注释掉这行,如果要使用DRM驱动,则需要放开这行
  17. # include(${CMAKE_CURRENT_LIST_DIR}/lvgl/tests/FindLibDRM.cmake)
  18. # include_directories(${Libdrm_INCLUDE_DIRS})
  19. # 注释掉下面三个,这个是在PC端使用的
  20. # find_package(SDL2)
  21. # find_package(SDL2_image)
  22. # include_directories(${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS})
  23. target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
  24. add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)
复制代码
Cmake的作用是天生Makefile文件,接下来我们对lvgl的配置文件进行修改,v9版本的lv_conf.h新增了许多配置项,我把配置项做成了一个表格,点击这篇文章可以看到,新版lv_conf配置项速查表 ,有须要的同学自取~
下面我针对我的IMX6ull开发板为例,列出须要修改的项:
  1. // 根据你屏幕的选择合适的色深
  2. #define LV_COLOR_DEPTH 32
  3. // 14毫秒刷新一次
  4. #define LV_DEF_REFR_PERIOD  14
  5. // 下面这三项是检测项,开了之后很卡,建议关闭
  6. #define LV_USE_ASSERT_STYLE         0
  7. #define LV_USE_ASSERT_MEM_INTEGRITY 0
  8. #define LV_USE_ASSERT_OBJ           0
  9. // 对象样式缓存默认0,这里设置20
  10. #define LV_OBJ_STYLE_CACHE      20
  11. // 下面这两个显示帧率和cpu使用情况,根据个人需要是否开启
  12. #define LV_USE_PERF_MONITOR 1
  13. #define LV_USE_MEM_MONITOR 1
  14. // 开启framebuffer,确保这一项是开启的,如果要使用DRM驱动,请配置LV_USE_LINUX_DRM 1
  15. #define LV_USE_LINUX_FBDEV      1
  16. // 开启输入设备驱动,这项默认是关闭的
  17. #define LV_USE_EVDEV    1
复制代码
修改了lv_conf.h后,打开main.c文件,将main函数替换成如下内容
  1. int main(void)
  2. {
  3.     lv_init();
  4.     /*Linux display device init*/
  5.     lv_linux_disp_init();
  6.     // 这行默认是没有的,因此我们无法使用input驱动,也就无法点击触摸屏
  7.     lv_indev_t * indev = lv_evdev_create(LV_INDEV_TYPE_POINTER, "/dev/input/event1");
  8.    
  9.     /*Create a Demo*/
  10.     lv_demo_widgets();
  11.     // 关闭自动滑动功能
  12.     // lv_demo_widgets_start_slideshow();
  13.     // lv_demo_multilang();
  14.     /*Handle LVGL tasks*/
  15.     while(1) {
  16.         lv_timer_handler();
  17.         usleep(5000);
  18.     }
  19.     return 0;
  20. }
复制代码
/dev/input/event1是我的触摸屏驱动,要确认自己的触摸屏是哪个装备文件,可以使用hexdump /dev/input/eventx命令查抄每个event,滑动触摸屏如果有数据,就是谁人event。哦对了,fb默认使用的是/dev/fb0,如果你的fb不是这个,在main.c文件内里修改。
预备就绪就可以进行编译了,确保你的Cmake版本在3.12.4以上,之后运行如下命令:
  1. mkdir build
  2. cd build
  3. cmake ..
  4. make -j
复制代码
编译成功后,可以看到根目录的bin目录下有个main二进制可运行文件。

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

总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表