IMX6ULX移植lvgl
1. 源码下载
GitHub - lvgl/lv_port_linux: LVGL configured to work with a standard Linux framebuffer
GitHub - lvgl/lvgl at 8d47460580c6e17ff800aaac2dbbb11c3520cc44
将lvgl下的所有文件拷贝到lv_port_linux-xxxxxx/lvgl下
forlinx@ubuntu:~/lvgl/lv_port_linux-master$ cp ../lvgl-8d47460580c6e17ff800aaac2dbbb11c3520cc44/* ./lvgl/ -rf
(2025/1/21基于lvgl9.2.2移植,版本不同需要修改的部分可能也有不同)
2.源码修改
2.1 lv_conf.h修改
系统监控组件和cpu使用情况,按自己需求看是否开启
#define LV_USE_SYSMON 1
#define LV_USE_PERF_MONITOR 1
#define LV_USE_MEM_MONITOR 1
显示刷新时间,采取默认的,可以按自己硬件性能进行修改
#define LV_DEF_REFR_PERIOD 33 /*[ms]*/
采用fb设备显示所以frambuffer这里必须开启
#define LV_USE_LINUX_FBDEV 1
根据自己是否需要触摸,修改相应触摸配置的宏定义
#define LV_USE_EVDEV 1
编译报错关闭相应宏定义
#define LV_USE_TINY_TTF 0
#define LV_USE_VECTOR_GRAPHIC 0
#define LV_USE_MATRIX 0
#define LV_USE_LOTTIE 0
可以关掉以下配置,开启后会比较卡
#define LV_USE_ASSERT_STYLE 0
#define LV_USE_ASSERT_MEM_INTEGRITY 0
#define LV_USE_ASSERT_OBJ 0
2.2 运行测试
执行环境变量后编译
forlinx@ubuntu:~/lvgl/lv_port_linux-master$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
forlinx@ubuntu:~/lvgl/lv_port_linux-master$ make clean
forlinx@ubuntu:~/lvgl/lv_port_linux-master$ make
将build/bin/下的main拷贝至开发板运行
root@fl-imx6ull:~# export LV_LINUX_EVDEV_POINTER_DEVICE=/dev/input/event1 //导出触摸的环境变量,触摸是event几需要改成自己的。没有改触摸宏的应该不会出现卡在环境变量而退出的问题
root@fl-imx6ull:~# /mian
可以查看一下自己触摸是否正常,我这里是x和y轴分别触摸反向
所以我这里是修改触摸驱动lv_evdev.c的lv_indev_t * lv_evdev_create(lv_indev_type_t indev_type, const char * dev_path)函数
if(indev_type == LV_INDEV_TYPE_POINTER) {
struct input_absinfo absinfo;
if(ioctl(dsc->fd, EVIOCGABS(ABS_X), &absinfo) == 0) {
dsc->min_x = (800-absinfo.minimum); //修改部分
dsc->max_x = (800-absinfo.maximum); //修改部分
}
else {
LV_LOG_ERROR("ioctl EVIOCGABS(ABS_X) failed: %s", strerror(errno));
}
if(ioctl(dsc->fd, EVIOCGABS(ABS_Y), &absinfo) == 0) {
dsc->min_y = (480-absinfo.minimum); //修改部分
dsc->max_y = (480-absinfo.maximum); //修改部分
}
else {
LV_LOG_ERROR("ioctl EVIOCGABS(ABS_Y) failed: %s", strerror(errno));
}
因为触摸我这里是反向的,所以用xy轴最大触摸范围分别减去xy轴参数。最大触摸范围可以通过evtest测试屏幕的四个角的坐标点查看
修改完之后重新编译
forlinx@ubuntu:~/lvgl/lv_port_linux-master$ make clean
forlinx@ubuntu:~/lvgl/lv_port_linux-master$ make
这时测试触摸和显示是正常的
注: imx6ul没有gpu所以cpu占用率会比较高,其中nxp官方适配了一版可以用G2D加速的例程,但是6UL用的是pxp进行的加速。该例程中并没有mpu的pxp加速宏配置,所以按需使用