在OrangePi Zero 2W上运行LVGL示例
文章目录前言一、开发环境说明二、下载LVGL源码三、安装交叉编译环境安装 arm64 编译器 所有依赖常见问题第一步添加 arm64 架构到系统必须第二步修复 apt 源关键否则依然找不到包第三步再次更新并安装第四步安装交叉编译器四、CMake 交叉编译脚本五、编译目标平台操作系统为xfce_ubuntu桌面版目标平台操作系统为server_ubuntu服务器版六、验证是否编译成功可选七、在OrangePi Zero 2W上运行LVGL示例目标平台操作系统为xfce_ubuntu桌面版准备工作拷贝二进制文件运行示例运行效果目标平台操作系统为server_ubuntu服务器版准备工作拷贝二进制文件运行示例运行效果总结前言本文主题如何在amd64的ubuntu主机上交叉编译可在arm64的ubuntu主机上运行的应用把这句话给豆包豆包就会给出手把手教程了。下文基于豆包给出的解决方案修改。一、开发环境说明开发平台华硕飞行堡垒amd64x86_64Ubuntu22.04目标设备- 主机OrangePi Zero 2Warm64aarch64Ubuntu22.04- 显示屏雕塑家MF133LRMini HDMI交叉编译在 amd64 上生成直接能在 arm64运行的程序二、下载LVGL源码在amd64 Ubuntu开发平台中下载LVGL源码gitclone https://github.com/lvgl/lv_port_linux.gitcdlv_port_linux/gitsubmodule update--init--recursive三、安装交叉编译环境安装 arm64 编译器 所有依赖在amd64 Ubuntu开发平台中安装arm64编译器 所有依赖sudoaptupdate# 安装交叉编译器sudoaptinstallgcc-aarch64-linux-gnu g-aarch64-linux-gnu# 安装 arm64 版本的 SDL2 EVDEV开发库sudoaptinstalllibsdl2-dev:arm64 libsdl2-image-dev:arm64 libevdev-dev:arm64:arm64意思是安装 arm64 架构的库给交叉编译使用。常见问题如果出现报错E: Unable to locate package libsdl2-dev:arm64E: Unable to locate package libsdl2-image-dev:arm64E: Unable to locate package libevdev-dev:arm64则是因为amd64 Ubuntu 没有启用 arm64 架构支持所以系统找不到 arm64 版本的库。可按如下步骤解决第一步添加 arm64 架构到系统必须sudodpkg --add-architecture arm64sudoaptupdate第二步修复 apt 源关键否则依然找不到包Ubuntu默认源不支持跨架构下载必须修改sources.list。自动修复命令直接复制运行sudosed-is/^deb http/deb [archamd64,i386] http/g/etc/apt/sources.listsudosed-is/^deb http/deb [archamd64,i386] http/g/etc/apt/sources.list.d/*.list然后添加 arm64 专用源echodeb [archarm64] http://ports.ubuntu.com/ubuntu-ports$(lsb_release-cs)main restricted universe multiverse deb [archarm64] http://ports.ubuntu.com/ubuntu-ports$(lsb_release-cs)-updates main restricted universe multiverse deb [archarm64] http://ports.ubuntu.com/ubuntu-ports$(lsb_release-cs)-security main restricted universe multiverse deb [archarm64] http://ports.ubuntu.com/ubuntu-ports$(lsb_release-cs)-backports main restricted universe multiverse|sudotee/etc/apt/sources.list.d/arm64.list第三步再次更新并安装sudoaptupdatesudoaptinstalllibsdl2-dev:arm64 libsdl2-image-dev:arm64 libevdev-dev:arm64第四步安装交叉编译器sudoaptinstallgcc-aarch64-linux-gnu g-aarch64-linux-gnu四、CMake 交叉编译脚本在LV_PORT_LINUX源码根目录新建一个文件命名为toolchain-arm64.cmake内容直接复制下面这段# # 交叉编译工具链x86_64 → arm64 (aarch64) # # Usage: #--Build for desktop_xfce_linux # cmake -B build_arm64_sdl -DCONFIGsdl -DCMAKE_TOOLCHAIN_FILE./toolchain-arm64.cmake # cmake --build build_arm64_sdl -j$(nproc) #--Build for server_linux # cmake -B build_arm64_fb -DCONFIGfbdev -DCMAKE_TOOLCHAIN_FILE./toolchain-arm64.cmake # cmake --build build_arm64_fb -j$(nproc) # 1. 指定 pkg-config 路径 set(PKG_CONFIG_EXECUTABLE /usr/bin/aarch64-linux-gnu-pkg-config CACHE FILEPATH Cross pkg-config) # 2. 目标系统与架构 set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) # 3. 指定交叉编译器 set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g) # 4. 核心指定 ARM64 库路径关键 set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu /usr/include/aarch64-linux-gnu ) # 5. 强制 CMake 只查找 ARM64 库不会再去 x86_64 目录找文件 set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)五、编译目标平台操作系统为xfce_ubuntu桌面版进入LV_PORT_LINUX源码根目录运行cmake-Bbuild_arm64_sdl-DCONFIGsdl-DCMAKE_TOOLCHAIN_FILE./toolchain-arm64.cmake cmake--buildbuild_arm64_sld -j$(nproc)若需全屏显示则将lv_port_linux/configs/sdl.defaults中的LV_SDL_FULLSCREEN设置为1即可编译完成后在build_arm64_sdl/bin/目录下生成的二进制文件lvglsim,可直接复制到arm64 Ubuntu 主机运行。目标平台操作系统为server_ubuntu服务器版进入LV_PORT_LINUX源码根目录运行cmake-Bbuild_arm64_fb-DCONFIGfbdev-DCMAKE_TOOLCHAIN_FILE./toolchain-arm64.cmake cmake--buildbuild_arm64_fb -j$(nproc)默认全屏显示无需额外设置编译完成后在build_arm64_fb/bin/目录下生成的二进制文件lvglsim,可直接复制到arm64 Ubuntu 主机运行。六、验证是否编译成功可选进入LV_PORT_LINUX源码根目录运行file./build_arm64_sdl/bin/lvglsim# 或者运行# file ./build_arm64_fb/bin/lvglsim如果输出包含aarch64 GNU/Linux则说明编译成功✅七、在OrangePi Zero 2W上运行LVGL示例目标平台操作系统为xfce_ubuntu桌面版准备工作将开发平台和目标平台接入同一局域网内确定开发平台可以Ping通目标平台为开发平台和目标平台均安装对应版本的NoMachine软件拷贝二进制文件通过scp命令将在开发平台编译生成的二进制文件lvglsim拷贝至目标平台。例如本例程中为安装xfce_ubuntu的目标平台生成的二进制文件路径为lv_port_linu/build_arm64_sdl/bin/lvglsim那么便进入LV_PORT_LINUX源码根目录运行scpbuild_arm64_sdl/bin/lvglsim orangepi192.168.xxx.xxx:/home/orangepi/Downloads便可将二进制文件拷贝至目标OrangePi Zero 2W。运行示例首先使用 NoMachine 远程登录目标平台然后打开终端并运行./Downloads/lvglsim运行效果lvgl_ubuntu_arm64_sdl目标平台操作系统为server_ubuntu服务器版准备工作确定开发平台可以Ping通目标平台拷贝二进制文件通过scp命令将在开发平台编译生成的二进制文件lvglsim拷贝至目标平台。例如本例程中为安装server_ubuntu的目标平台生成的二进制文件路径为lv_port_linu/build_arm64_fb/bin/lvglsim那么便进入LV_PORT_LINUX源码根目录运行scpbuild_arm64_fb/bin/lvglsim orangepi192.168.xxx.xxx:/home/orangepi/Downloads便可将二进制文件拷贝至目标OrangePi Zero 2W。运行示例首先通过 ssh 命令远程登录目标平台成功登入目标终端后运行./Downloads/lvglsim运行效果lvgl_ubuntu_arm64_fbdev总结豆包真香