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

[复制链接]
发表于 2026-10-4 16:30:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

LVGL v9 相对 v8 改动不小:内置了显示与触摸驱动、换了并行渲染架构、内置支持 LVGL 的 C 库与部分 stdlib,结果是 v9 工程里不再有独立的 lvgl_driver 目录。网路上 v9 的移植教程还很少,这篇把在 IMX6ULL(Linux 4.9 内核)上跑通 v9 的全过程写下来,开发主机是 Windows 11 + WSL2。

一、环境准备

  • 目标板:IMX6ULL,烧的是 Linux 4.9 内核,屏幕接 framebuffer、触摸接 evdev 设备;
  • 主机:Windows 11,WSL2 作为编译环境(Ubuntu 发行版);
  • 交叉编译链:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf,路径写成绝对路径;
  • CMake 版本需在 3.12.4 以上。

二、拉取工程与子模块

# 克隆 lv_port_linux 仓库并安装 lvgl 子模块
git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux_frame_buffer/
git submodule update --init --recursive

网络不通的,可以克隆一份已经改好配置的版本,效果一致。

三、目录结构的变化

v9 里 lvgl_driver 目录没了——显示和触摸驱动已经内置进 LVGL。打开根目录的 CMakeLists.txt,做这几处改动:

cmake_minimum_required(VERSION 3.10)

# 设置交叉编译
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
# 这里指定的路径必须是绝对路径
set(CMAKE_C_COMPILER /root/Tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER /root/Tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

project(lvgl)

set(CMAKE_C_STANDARD 99)    # C99,lvgl officially support C99 and above
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

add_subdirectory(lvgl)
target_include_directories(lvgl PUBLIC ${PROJECT_SOURCE_DIR})

add_executable(main main.c mouse_cursor_icon.c)

# 注释掉这行;如果要使用 DRM 驱动,则需要放开这行
#include(${CMAKE_CURRENT_LIST_DIR}/lvgl/tests/FindLibDRM.cmake)
#include_directories(${Libdrm_INCLUDE_DIRS})

# 注释掉下面三个,这个是在 PC 端使用的
#find_package(SDL2)
#find_package(SDL2_image)
#include_directories(${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS})

target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg
                      ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES}
                      ${Libdrm_LIBRARIES} m pthread)

add_custom_target(run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)

四、lv_conf.h 的关键配置项

v9 的 lv_conf.h 新增了不少选项,按 IMX6ULL 这块屏的场景,以下几项值得改:

配置项取值说明
LV_COLOR_DEPTH32按屏幕实际色深选,RGB888/RGB565 对应不同取值
LV_DEF_REFR_PERIOD14刷新周期,单位毫秒
LV_USE_ASSERT_STYLE0断言项,开启很卡,建议关
LV_USE_ASSERT_MEM_INTEGRITY0同上
LV_USE_ASSERT_OBJ0同上
LV_OBJ_STYLE_CACHE20样式缓存,默认 0,这里设 20
LV_USE_PERF_MONITOR1帧率显示,按需
LV_USE_MEM_MONITOR1内存占用显示,按需
LV_USE_LINUX_FBDEV1用 framebuffer 就保持开启;用 DRM 则配 LV_USE_LINUX_DRM
LV_USE_EVDEV1输入设备驱动,默认是关闭的,要手开

五、main.c 的入口

int main(void)
{
    lv_init();

    /* Linux display device init */
    lv_linux_disp_init();

    // 这行默认是没有的,因此无法使用 input 驱动,也就无法点击触摸屏
    lv_indev_t *indev = lv_evdev_create(LV_INDEV_TYPE_POINTER, "/dev/input/event1");

    /* Create a Demo */
    lv_demo_widgets();
    // 关闭自动滑动功能
    //lv_demo_widgets_start_slideshow();

    /* Handle LVGL tasks */
    while (1) {
        lv_timer_handler();
        usleep(5000);
    }

    return 0;
}

两点要自己核对:

  • /dev/input/event1 是示例的触摸屏节点。确认自己板子上是哪个 event,可以用 hexdump /dev/input/eventX 逐个看,手指滑动触摸屏有数据输出的那个就是它;
  • framebuffer 默认用 /dev/fb0,如果自己的屏不是这个,就在 main.c 里改。

六、编译与运行

mkdir build
cd build
cmake ..
make -j

编译通过后,工程根目录的 bin/ 下会有 main 这个可执行文件。把它拷到开发板上运行(有些板子需要先把交叉编译出来的动态库依赖一起带上),就能看到 demo 界面,触摸也生效。

七、踩坑小结

  • v9 不再有 lvgl_driver,别再照 v8 的教程往那个目录里塞驱动,直接改 lv_conf.h 开关;
  • EVDEV 输入设备默认是关的,不打开就点不动屏,这是很多人「demo 显示出来但没反应」的根因;
  • 三个 ASSERT 项开着会明显卡,先关掉验证功能,再逐个打开定位问题;
  • 交叉编译器的 C/CXX 路径必须是绝对路径,相对路径在 CMake 交叉编译场景里容易静默失败;
  • v9 编出来的二进制比 v8 大不少,因为集成了更多模块,靠 lv_conf.h 逐项裁剪能压回去,配置项的取舍可以单独整理成一张速查表。

整轮移植大约花了三小时,中间翻了不少官方 issue。v9 的配置项比 v8 多,一次改太多容易分不清是谁的锅,建议按「显示 → 触摸 → 性能开关」三段分批改、每段编一次验证。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表