在OrangePi Zero 2W上运行LVGL示例
本文介绍了在amd64架构的Ubuntu主机上交叉编译适用于arm64架构Ubuntu设备的LVGL应用程序的方法。主要内容包括:开发环境配置、LVGL源码获取、交叉编译环境搭建(解决arm64库依赖问题)、编写CMake交叉编译脚本,以及针对桌面版和服务器的两种编译方式。最后通过SCP将生成的二进制文件传输到目标设备运行验证。该方法实现了跨架构开发,无需在目标设备上编译即可直接运行程序。
文章目录
前言
本文主题:如何在amd64的ubuntu主机上交叉编译可在arm64的ubuntu主机上运行的应用(把这句话给豆包,豆包就会给出手把手教程了)。
下文基于豆包给出的解决方案修改。
一、开发环境说明
-
开发平台:华硕飞行堡垒,amd64(x86_64),Ubuntu22.04
-
目标设备:
- 主机:OrangePi Zero 2W,arm64(aarch64),Ubuntu22.04
- 显示屏:雕塑家MF133LR,Mini HDMI -
交叉编译:在 amd64 上生成直接能在 arm64运行的程序
二、下载LVGL源码
在amd64 Ubuntu开发平台中下载LVGL源码
git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux/
git submodule update --init --recursive
三、安装交叉编译环境
安装 arm64 编译器 + 所有依赖
在amd64 Ubuntu开发平台中安装 arm64 编译器 + 所有依赖
sudo apt update
# 安装交叉编译器
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
# 安装 arm64 版本的 SDL2 ,EVDEV开发库
sudo apt install libsdl2-dev:arm64 libsdl2-image-dev:arm64 libevdev-dev:arm64
:arm64 意思是:安装 arm64 架构的库,给交叉编译使用。
常见问题
如果出现报错:
E: Unable to locate package libsdl2-dev:arm64
E: Unable to locate package libsdl2-image-dev:arm64
E: Unable to locate package libevdev-dev:arm64
则是因为amd64 Ubuntu 没有启用 arm64 架构支持,所以系统找不到 arm64 版本的库。可按如下步骤解决:
第一步:添加 arm64 架构到系统(必须)
sudo dpkg --add-architecture arm64
sudo apt update
第二步:修复 apt 源(关键!否则依然找不到包)
Ubuntu 默认源不支持跨架构下载,必须修改 sources.list。
自动修复命令(直接复制运行)
sudo sed -i 's/^deb http/deb [arch=amd64,i386] http/g' /etc/apt/sources.list
sudo sed -i 's/^deb http/deb [arch=amd64,i386] http/g' /etc/apt/sources.list.d/*.list
然后添加 arm64 专用源
echo "deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports $(lsb_release -cs) main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports $(lsb_release -cs)-updates main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports $(lsb_release -cs)-security main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports $(lsb_release -cs)-backports main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/arm64.list
第三步:再次更新并安装
sudo apt update
sudo apt install libsdl2-dev:arm64 libsdl2-image-dev:arm64 libevdev-dev:arm64
第四步:安装交叉编译器
sudo apt install gcc-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 -DCONFIG=sdl -DCMAKE_TOOLCHAIN_FILE=./toolchain-arm64.cmake
# cmake --build build_arm64_sdl -j$(nproc)
#--Build for server_linux
# cmake -B build_arm64_fb -DCONFIG=fbdev -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 -B build_arm64_sdl -DCONFIG=sdl -DCMAKE_TOOLCHAIN_FILE=./toolchain-arm64.cmake
cmake --build build_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 -B build_arm64_fb -DCONFIG=fbdev -DCMAKE_TOOLCHAIN_FILE=./toolchain-arm64.cmake
cmake --build build_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源码根目录,运行:
scp build_arm64_sdl/bin/lvglsim orangepi@192.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源码根目录,运行:
scp build_arm64_fb/bin/lvglsim orangepi@192.168.xxx.xxx:/home/orangepi/Downloads
便可将二进制文件拷贝至目标OrangePi Zero 2W。
运行示例
首先,通过 ssh 命令远程登录目标平台:
成功登入目标终端后,运行:
./Downloads/lvglsim
运行效果
lvgl_ubuntu_arm64_fbdev
总结
豆包真香!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)