03_imx6ulx移植lvgl

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加速宏配置,所以按需使用

nxp lvgl例程链接: GitHub - nxp-imx-support/imx-LVGL-G2D-enablement: G2D enablement for LVGL. It can help to use Graphics resource to get better performance and reduce CPU loading for i.MX MPU.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值