从GUI Guider到RK3568:LVGL项目跨平台编译与部署实战

张开发
2026/4/17 6:00:15 15 分钟阅读

分享文章

从GUI Guider到RK3568:LVGL项目跨平台编译与部署实战
1. 为什么需要从GUI Guider到RK3568的移植第一次接触嵌入式GUI开发时很多人会疑惑为什么不能直接在开发板上设计界面这个问题我也纠结了很久。直到真正上手做项目才发现像RK3568这样的嵌入式平台资源有限直接在板子上开发调试效率极低。GUI Guider作为NXP官方推出的可视化设计工具能让我们在PC上快速完成界面原型设计这才是现代开发的正确姿势。但设计好的界面最终还是要跑在硬件上这就涉及到三个关键环节代码生成、交叉编译和部署调试。我去年接手的一个智能家居中控项目就用了这套方案从原型到量产只用了6周时间。当时用GUI Guider设计的温控面板最终要部署到基于RK3568的工业级HMI设备上整个过程踩了不少坑也积累了些实战经验。2. 环境搭建从零开始的准备工作2.1 硬件装备清单先说说我的工作台配置这套组合经过多个项目验证比较稳定开发主机Ubuntu 22.04 LTS物理机或VMware虚拟机均可内存建议8G开发板Firefly ROC-RK3568-PC带7寸电容触摸屏调试工具USB转串口模块CH340芯片、网线存储设备至少50GB可用空间的SSD注意虚拟机记得安装VMware Tools或VirtualBox增强功能方便主机与虚拟机文件共享2.2 软件工具链安装交叉编译环境搭建是个精细活推荐按这个顺序操作安装基础依赖包sudo apt update sudo apt install -y git cmake build-essential libsdl2-dev下载ARM交叉编译器以Linaro 7.5为例wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz sudo mv gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf /opt/配置环境变量添加到~/.bashrcexport PATH/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin:$PATH验证安装是否成功arm-linux-gnueabihf-gcc --version应该能看到类似这样的输出arm-linux-gnueabihf-gcc (Linaro GCC 7.5-2019.12) 7.5.03. GUI Guider项目导出与处理3.1 项目设计要点在GUI Guider里设计界面时有几点特别容易踩坑颜色深度必须与lv_conf.h中的设置一致通常选RGB565字体处理嵌入式系统建议使用内置字体或精简的ttf字体图片资源尽量用PNG格式压缩率比BMP高很多设计完成后点击Generate Code按钮工具会自动生成两个关键目录generated包含自动生成的UI布局和事件代码custom存放用户自定义的业务逻辑代码3.2 项目目录重构我习惯这样组织工程目录my_lvgl_project/ ├── lvgl/ # 从Gitee下载的LVGL源码 ├── generated/ # GUI Guider生成的文件 ├── custom/ # 用户自定义代码 ├── drivers/ # 硬件驱动适配层 ├── build/ # 编译输出目录 ├── CMakeLists.txt # 构建配置文件 └── main.c # 程序入口文件关键操作步骤从Gitee下载对应版本的LVGL源码必须与GUI Guider使用的版本一致重命名lvgl-release-v9.2为lvgl复制lv_conf_template.h为lv_conf.h并移到项目根目录4. 编写CMake构建脚本4.1 基础配置模块这个CMakeLists.txt模板经过多个项目验证可以直接复用cmake_minimum_required(VERSION 3.10) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) # 编译器路径配置根据实际安装位置调整 set(CMAKE_C_COMPILER /opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER /opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g) project(LVGL_DEMO) set(CMAKE_C_STANDARD 99) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)4.2 源码与驱动集成处理源码文件有个小技巧——使用GLOB_RECURSE自动收集.c文件# 递归收集所有源文件 file(GLOB_RECURSE CUSTOM_SOURCES custom/*.c) file(GLOB_RECURSE GENERATED_SOURCES generated/*.c) # 添加硬件驱动 set(DRIVER_SOURCES lvgl/src/drivers/display/fb/lv_linux_fbdev.c lvgl/src/drivers/evdev/lv_evdev.c ) add_executable(demo main.c ${CUSTOM_SOURCES} ${GENERATED_SOURCES} ${DRIVER_SOURCES} )5. 硬件适配与驱动调试5.1 显示驱动配置RK3568的帧缓冲设备通常是/dev/fb0但在某些定制内核中可能是fb1。可以通过这个命令确认ls /sys/class/graphics/fb*/mode在main.c中的关键配置lv_display_t *disp lv_linux_fbdev_create(); lv_linux_fbdev_set_file(disp, /dev/fb0); // 根据实际情况调整5.2 触摸屏校准电容屏虽然不用像电阻屏那样手动校准但事件设备号经常变。查找正确设备号的方法ls /dev/input/by-path/ | grep touch对应的代码配置lv_indev_t *indev lv_evdev_create(LV_INDEV_TYPE_POINTER, /dev/input/event2); // 根据实际情况调整6. 编译与部署实战6.1 交叉编译流程在build目录下执行cmake .. -DCMAKE_BUILD_TYPERelease make -j$(nproc)常见编译错误处理头文件找不到检查include_directories是否包含所有必要路径函数未定义确认lv_conf.h中相关功能宏已开启链接错误检查target_link_libraries是否包含所有依赖库6.2 部署到开发板我习惯用scp传输文件scp bin/demo user192.168.1.100:/home/user然后在开发板上运行chmod x demo ./demo如果出现段错误可能是以下原因文件系统权限问题尝试sudo运行动态链接库缺失用ldd检查依赖内存不足调整lv_conf.h中的内存池大小7. 项目迭代与优化技巧7.1 快速迭代方案当GUI设计需要更新时只需在GUI Guider中修改并重新生成代码替换工程中的generated和custom目录重新执行cmake和make7.2 性能优化建议根据RK3568的特性这些优化很有效双缓冲在lv_conf.h中开启LV_USE_DOUBLE_BUFFER硬件加速启用RK3568的RGA2D加速需要定制驱动内存优化调整LV_MEM_SIZE到8MB左右记得第一次成功点亮界面时那种成就感至今难忘。移植过程中最深的体会是嵌入式开发就像拼乐高既要了解每个模块的特性又要掌握它们之间的配合方式。建议新手从最简单的按钮交互开始逐步增加复杂功能这样排错会更轻松。

更多文章