imx6ull lvgl 移植

1 前言

学习基于 I.MX6ULL 平台的 LVGL GUI 移植。

2 开发环境

  • 系统: arch linux
  • 工具: nxp-uuu-qt-tool
  • 硬件: 正点原子 I.MX6ULL 开发板、LCD 800*480
  • 软件: linux 内核 5.4.21、lvgl 和 lvgl drivers release/v8.3 以及 LVGL for frame buffer device
  • JFlash

3 准备

下述演示都是基于 win11 wsl2 debian 系统

首先,克隆 lv_port_linux_frame_buffer 仓库,命令如下:

1
2
3
git clone https://github.com/lvgl/lv_port_linux_frame_buffer.git
cd lv_port_linux_frame_buffer/
git submodule update --init --recursive

00.png

上述命令,克隆了 lvgl 的 lv_port_linux_frame_buffer 仓库,完成后进入该文件夹,git clone 并没有将子模块 lvgllv_drivers 一起克隆,所以我们使用 git submodule update 将子模块一起拉取下来。

01.png

然后输入下述命令,先编译一下:

1
make

编译完成后,会在当前路径下,生成 build 文件夹,里面分别有 bin 和 obj 文件夹,用于存放输出的 bin 文件,和 obj 编译文件。

原先编译是没有对编译文件和输出文件做整理,后面我给该仓库提交了 PR 请求,没想到很快就被合并了,好评拉满。

02.png

到这一步,编译没问题后,基本准备工作就完成了,接下来开始移植。

4 移植

4.1 Makefile 修改

首先,更改我们的编译工具,因为 I.MX6ULL 是 arm 架构的,所以我们要更改使用的工具链。

打开 Makefile 修改两个点,

  • cc 的值由 ?= gcc 更改为 = arm-linux-gnueabihf-gcc
  • 注释掉 CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c,这里没有用到鼠标,所以我注释掉了

03.png

更改完,还不需要 make 重编译,因为还没修改完,这个时候编译会报错。

4.2 main.c 修改

接下来更改 main.c,注释掉鼠标相关代码,

04.png

修改完成后,我们就可以重新输入 make cleanmake 指令重新编译下,附上修改编译链的对比图:

05.png

使用 `file`` 确定文件类型是否是 32 位 arm 的可执行文件,这才是我们最终要执行的文件。

别着急,还没修改完,接下来我们修改对应的配置文件。

4.3 lv_conf.h 和 lv_drv_conf.h 修改

lv_conf.h 该文件无需修改,如果有需要定制修改的,可以对照注释修改。

lv_drv_conf.h 这个需要修改,这里的变动会直接影响到显示和触摸,

  • 定位到 USE_EVDEV 中,修改为当前 linux 设备对应的触摸驱动,这里我是 /dev/input/event1,这里默认用的 event10,要结合自己的设备修改。
  • 定位到 USE_FBDEV 中,修改为当前 linux 设备对应的显示驱动,这里我是 /dev/fb0,这里默认用的 fb0,要结合自己的设备进行修改,这里我默认即刻。

修改完成后,重新编译一下工程。

到这里基本就完成了,整个过程基本没有什么难点。

4.4 烧录

将重新编译完的可执行文件,路径是 ./build/bin/demo,拷贝到 imx6ull 中执行,这里我用自己的做的工具,由于这里我没用我的主力设备 archlinux,用的 wsl2 debian,所以我先复制到 win11,再通过工具烧录到设备中,

06.png

4.5 效果

07.gif

5 结

简单记录下 imx6ull 对 lvgl 的移植,过程中有什么不能理解的,可以留言告知我!有什么错误,也可以指出来告诉我~