本文将详细介绍如何在基于 Rockchip RK3576 芯片的开发板(以野火 SDK 为例)上,部署并运行一个基于 Wayland 的 Flutter 应用程序。流程涵盖了 GPU 驱动的替换、Weston 合成器的安装与配置,以及 Flutter eLinux 环境的搭建和应用的自启动设置。

一、环境准备与 GPU 驱动替换

正确的 GPU 驱动是 Wayland 正常运行并启用硬件加速的关键。根据实践,特定版本的 libmali 驱动在此环境中表现最佳。

  1. 上传 GPU 驱动包
    将 GPU 驱动文件 libmali-bifrost-g52-g13p0-wayland-gbm_1.9-1_arm64.deb 上传到 RK3576 开发板的任意目录。

    注意: 请务必确认系统后端是 Wayland 而非 X11。此驱动包是针对 Wayland 环境的。

  2. 卸载现有驱动并强制安装新驱动
    在板子上执行以下命令,首先移除系统中所有已安装的 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 应用提供显示服务。

  1. 安装 Weston
    通过 apt 包管理器安装 Weston。

    sudo apt update
    sudo apt install weston
    
  2. 测试运行 Weston
    安装完成后,可以尝试在前台终端(TTY)上启动 Weston,以验证其是否正常工作。

    # Weston 将会接管 TTY1
    weston --tty=1
    

    此时屏幕应显示 Weston 的桌面环境。按下 Ctrl+C 可退出。

  3. 自定义 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 应用。

  1. 安装编译依赖
    安装构建 Flutter eLinux 应用所必需的工具。

    sudo apt install build-essential cmake clang
    
  2. 下载 flutter-elinux 工具包
    从 GitHub 克隆 flutter-elinux 的代码仓库。

    git clone https://github.com/sony/flutter-elinux.git
    
四、构建并运行 Flutter 应用
  1. 上传 Flutter 应用源码
    将您的 Flutter 应用项目代码上传到开发板。

  2. 设置环境变量并运行
    进入您的 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 来创建服务。

  1. 创建启动脚本
    创建一个脚本来启动 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
    
  2. 创建 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
    
  3. 启用并管理服务
    执行以下命令来重新加载 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 应用程序。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐