imx6ull lvgl 移植
imx6ull lvgl 移植
nixgnauhcuy1 前言
学习基于 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 | git clone https://github.com/lvgl/lv_port_linux_frame_buffer.git |
上述命令,克隆了 lvgl 的 lv_port_linux_frame_buffer
仓库,完成后进入该文件夹,git clone
并没有将子模块 lvgl
和 lv_drivers
一起克隆,所以我们使用 git submodule update
将子模块一起拉取下来。
然后输入下述命令,先编译一下:
1 | make |
编译完成后,会在当前路径下,生成 build 文件夹,里面分别有 bin 和 obj 文件夹,用于存放输出的 bin 文件,和 obj 编译文件。
原先编译是没有对编译文件和输出文件做整理,后面我给该仓库提交了 PR 请求,没想到很快就被合并了,好评拉满。
到这一步,编译没问题后,基本准备工作就完成了,接下来开始移植。
4 移植
4.1 Makefile 修改
首先,更改我们的编译工具,因为 I.MX6ULL 是 arm 架构的,所以我们要更改使用的工具链。
打开 Makefile
修改两个点,
- 将 cc 的值由
?= gcc
更改为= arm-linux-gnueabihf-gcc
- 注释掉
CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c
,这里没有用到鼠标,所以我注释掉了
更改完,还不需要 make
重编译,因为还没修改完,这个时候编译会报错。
4.2 main.c 修改
接下来更改 main.c,注释掉鼠标相关代码,
修改完成后,我们就可以重新输入 make clean
和 make
指令重新编译下,附上修改编译链的对比图:
使用 `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,再通过工具烧录到设备中,
4.5 效果
5 结
简单记录下 imx6ull 对 lvgl 的移植,过程中有什么不能理解的,可以留言告知我!有什么错误,也可以指出来告诉我~