在 RK3576 上部署基于 Wayland 的 Flutter 应用
本文将详细介绍如何在基于 Rockchip RK3576 芯片的开发板(以野火 SDK 为例)上,部署并运行一个基于 Wayland 的 Flutter 应用程序。流程涵盖了 GPU 驱动的替换、Weston 合成器的安装与配置,以及 Flutter eLinux 环境的搭建和应用的自启动设置。
一、环境准备与 GPU 驱动替换
正确的 GPU 驱动是 Wayland 正常运行并启用硬件加速的关键。根据实践,特定版本的 libmali 驱动在此环境中表现最佳。
-
上传 GPU 驱动包
将 GPU 驱动文件libmali-bifrost-g52-g13p0-wayland-gbm_1.9-1_arm64.deb上传到 RK3576 开发板的任意目录。注意: 请务必确认系统后端是 Wayland 而非 X11。此驱动包是针对 Wayland 环境的。
-
卸载现有驱动并强制安装新驱动
在板子上执行以下命令,首先移除系统中所有已安装的libmali相关包,然后强制覆盖安装新的驱动包。# 移除旧的 Mali 驱动 sudo apt remove -y 'libmali-*' # 强制覆盖安装新的 Wayland 驱动 sudo dpkg -i --force-overwrite libmali-bifrost-g52-g13p0-wayland-gbm_1.9-1_arm64.deb
二、安装并配置 Weston (Wayland Compositor)
Weston 是 Wayland 的参考合成器,它将为我们的 Flutter 应用提供显示服务。
-
安装 Weston
通过apt包管理器安装 Weston。sudo apt update sudo apt install weston -
测试运行 Weston
安装完成后,可以尝试在前台终端(TTY)上启动 Weston,以验证其是否正常工作。# Weston 将会接管 TTY1 weston --tty=1此时屏幕应显示 Weston 的桌面环境。按下
Ctrl+C可退出。 -
自定义 Weston 配置
为了让 Flutter 应用全屏显示,我们需要修改 Weston 的配置文件,去掉顶部的面板(状态栏)并可以设置自定义背景。编辑
/etc/xdg/weston/weston.ini文件,确保其内容如下:[core] # 使用 DRM 后端,直接与内核显示驱动交互 backend=drm-backend.so # 在没有输入设备时也允许运行 require-input=false # 关闭闲置超时 idle-time=0 [shell] # 设置背景图片路径 background-image=/usr/share/backgrounds/background_linux.jpg background-color=0x000000 # 禁用顶部面板 panel-position=none # 关闭锁屏和动画效果,以获得更快的启动速度 locking=false animation=none startup-animation=none [keyboard] # 禁用 VT 切换 (Ctrl+Alt+F1/F2) vt-switching=false [output] # 针对 HDMI-A-1 输出的配置 name=HDMI-A-1 # 设置分辨率为 720p mode=1280x720 # 如果需要,可以旋转屏幕 (可选值: normal, rotate-90, rotate-180, rotate-270) transform=rotate-90
三、搭建 Flutter eLinux 环境
我们需要使用 Sony 维护的 flutter-elinux 工具链来构建和运行嵌入式 Linux 平台的 Flutter 应用。
-
安装编译依赖
安装构建 Flutter eLinux 应用所必需的工具。sudo apt install build-essential cmake clang -
下载 flutter-elinux 工具包
从 GitHub 克隆flutter-elinux的代码仓库。git clone https://github.com/sony/flutter-elinux.git
四、构建并运行 Flutter 应用
-
上传 Flutter 应用源码
将您的 Flutter 应用项目代码上传到开发板。 -
设置环境变量并运行
进入您的 Flutter 应用根目录,执行以下命令来构建并运行它。# 指定 Wayland 运行所需的环境变量 export XDG_RUNTIME_DIR=/run/user/0 export WAYLAND_DISPLAY=wayland-0 # 将 flutter-elinux 工具添加到临时环境变量 export PATH=$PATH:/home/flutter-elinux/bin/ # 在应用根目录执行,指定使用 elinux-wayland 设备运行 flutter-elinux run -d elinux-wayland
五、设置开机自启动
为了让 Weston 和 Flutter 应用在设备启动后自动运行,使用 systemd 来创建服务。
-
创建启动脚本
创建一个脚本来启动 Weston。文件路径:
/usr/local/bin/start_weston_ui.sh
文件内容:#!/bin/bash # 设置 Wayland 运行所需的环境变量 export XDG_RUNTIME_DIR=/run/user/0 export WAYLAND_DISPLAY=wayland-0 # 使用 exec 确保 weston 成为此脚本的主进程 exec weston --tty=1添加执行权限:
sudo chmod +x /usr/local/bin/start_weston_ui.sh -
创建 systemd 服务文件
创建一个服务单元文件来管理start_weston_ui.sh脚本。文件路径:
/etc/systemd/system/weston-ui.service
文件内容:[Unit] Description=Weston UI Service After=graphical.target [Service] User=root Type=simple ExecStart=/usr/local/bin/start_weston_ui.sh Restart=always RestartSec=5 [Install] WantedBy=graphical.target -
启用并管理服务
执行以下命令来重新加载systemd配置,并启用、启动我们的新服务。# 重新加载 systemd 管理器配置 sudo systemctl daemon-reload # 启用服务,使其开机自启 sudo systemctl enable weston-ui.service # 立即启动服务进行测试 sudo systemctl start weston-ui.service # 查看服务运行状态 sudo systemctl status weston-ui.service
设备将在每次启动后自动加载 Weston,为运行基于 Wayland 的 Flutter 应用提供基础环境。可以通过类似的方式创建另一个 systemd 服务来自动启动您的 Flutter 应用程序。
更多推荐



所有评论(0)