news 2026/5/13 19:13:53

在OrangePi Zero 2W上运行LVGL示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在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主机上运行的应用(把这句话给豆包,豆包就会给出手把手教程了)。

下文基于豆包给出的解决方案修改。

一、开发环境说明

  • 开发平台:华硕飞行堡垒,amd64(x86_64),Ubuntu22.04

  • 目标设备:
    - 主机:OrangePi Zero 2W,arm64(aarch64),Ubuntu22.04
    - 显示屏:雕塑家MF133LR,Mini 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:arm64
E: Unable to locate package libsdl2-image-dev:arm64
E: Unable to locate package libevdev-dev:arm64

则是因为amd64 Ubuntu 没有启用 arm64 架构支持,所以系统找不到 arm64 版本的库。可按如下步骤解决:

第一步:添加 arm64 架构到系统(必须)

sudodpkg --add-architecture arm64sudoaptupdate

第二步:修复 apt 源(关键!否则依然找不到包)

Ubuntu默认源不支持跨架构下载,必须修改sources.list

自动修复命令(直接复制运行)

sudosed-i's/^deb http/deb [arch=amd64,i386] http/g'/etc/apt/sources.listsudosed-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"|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 -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-Bbuild_arm64_sdl-DCONFIG=sdl-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-DCONFIG=fbdev-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 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源码根目录,运行:

scpbuild_arm64_fb/bin/lvglsim orangepi@192.168.xxx.xxx:/home/orangepi/Downloads

便可将二进制文件拷贝至目标OrangePi Zero 2W

运行示例

首先,通过 ssh 命令远程登录目标平台:

成功登入目标终端后,运行:

./Downloads/lvglsim

运行效果

lvgl_ubuntu_arm64_fbdev

总结

豆包真香!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 19:13:08

Exception Error

Exception 分为两类:运行时异常(非受检异常)继承自 RuntimeException, 编译器不强制处理,多为代码逻辑错误导致。常见例子: NullPointerException(空指针异常) ArrayIndexOutOfBound…

作者头像 李华
网站建设 2026/5/13 19:11:24

Python大厂常见面试题

1、python中属性的可见性在类中定义的属性、方法都是有一定的可见性的,也就是在哪里可以看到、可以访问。在Python中,可见性分为三种: 公共的、保护的、私有的。主要靠命名方式来区分:公共的在任何的位置都可以访问,默认默认创建的…

作者头像 李华
网站建设 2026/5/13 19:06:45

第四:BurpSuite功能使用-BurpSuite·Web站点扫描功能

一.被动扫描:是指Burp Suite在拦截代理模式下,作为中间人角色拦截和分析客户端和服务器之间的通信流量 二.主动扫描:是指Burp Suite通过主动发送请求来主动探测目标应用程序的漏洞 三.扫描主要使用到【 仪表盘-Dashboard】、【 目标-Target】…

作者头像 李华