meta-flutter

用于 Flutter 相关工件的 Yocto 层。

推荐的开发流程始于使嵌入器在桌面运行,然后进行目标定位。这种方法可以为您节省大量的时间和精力。

注意:理论上 Swift Shader(CPU渲染)引擎构建应该可以与正确的构建标志一起工作。请注意,它不会开箱即用。选择支持 OpenGL 3.0+ 的 GPU 的 SoC,这样可以为您节省工程 NRE。

注意:如果您在运行 Gallery 应用时看到灰色屏幕,很可能是因为您没有设置 LC_ALL。请在您的目标设备上检查 /usr/share/locale/ 以了解可用的区域设置,并相应地设置 LC_ALL。例如:export LC_ALL=en_GB

层依赖关系

  • meta-clang(仅限 Sony 嵌入式设备)

概述

目标 BSP 应具有支持 OpenGLES v3.0+ 的 GPU。

此层包含构建的配方

  • flutter-engine(频道选择,默认为 beta)
  • flutter-sdk(频道选择,默认为 beta)
  • fltter-gallery 应用(解释型和 AOT - 需要 master 频道覆盖)
  • flutter-pi(DRM 带 VSync)
  • flutter-wayland(基本 POC)/ waylandpp/ipugxml
  • Sony 嵌入式设备(无 VSync,除非是最近的原始 Wayland Vsync;但不够省电)

注意事项

支持 Flutter 引擎的目标

  • AGL QEMU 镜像 - x86_64
  • DragonBoard 410c - aarch64
  • Intel MinnowBoard Max (BayTrail) - intel-icore7-64
  • NVIDIA Nano Dev Kit - aarch64
  • NVIDIA Xavier NX Dev Kit - aarch64
  • Raspberry Pi 3 / Compute - aarch64 / armv7hf
  • Raspberry Pi 4 / Compute - aarch64
  • Renesas R-Car m3ulcb - aarch64
  • STM32MP157x - cortexa7t2hf
  • 等等,等等

为 ARM(32 位)构建存在一个悬而未决的 P4 错误:https://github.com/flutter/flutter/issues/83765

NVIDIA Xavier/Nano

local.conf 更改

TARGET_GCC_VERSION = "8.3.0"
FLUTTER_CHANNEL = "master"
IMAGE_INSTALL_append = " flutter-drm-eglstream-backend"
IMAGE_INSTALL_append = " flutter-gallery"

或者

TARGET_GCC_VERSION = "8.3.0"
FLUTTER_CHANNEL = "master"
CORE_IMAGE_EXTRA_INSTALL += "\
    flutter-drm-eglstream-backend \
    flutter-gallery \
"

构建 EGL 镜像

bitbake demo-image-egl

在目标上运行 Flutter 应用程序(默认为 AOT)

FLUTTER_DRM_DEVICE=/dev/dri/card0 flutter-drm-eglstream-backend -b /usr/share/flutter-gallery/sony

NXP i.MX 8QuadXPlus MEK

repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-gatesgarth -m imx-5.10.9-1.0.0.xml
repo sync -j20
DISTRO=fslc-wayland MACHINE=imx8qxpmek source setup-environment build
pushd ../sources
git clone -b dunfell https://github.com/jwinarske/meta-flutter.git
popd
bitbake-layers add-layer ../sources/meta-clang ../sources/meta-flutter
echo -e 'TARGET_GCC_VERSION = "10.2.0"' >> conf/local.conf
echo -e 'FLUTTER_CHANNEL = "dev"' >> conf/local.conf
echo -e 'IMAGE_INSTALL_append = " flutter-wayland"' >> conf/local.conf
echo -e 'IMAGE_INSTALL_append = " flutter-gallery"' >> conf/local.conf
bitbake fsl-image-multimedia
...
Build Configuration:
BB_VERSION           = "1.48.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "aarch64-fslc-linux"
MACHINE              = "imx8qxpmek"
DISTRO               = "fslc-wayland"
DISTRO_VERSION       = "3.2-snapshot-20210616"
TUNE_FEATURES        = "aarch64 armv8a crc cortexa35 crypto"
TARGET_FPU           = ""

Raspberry PI 3/4 (aarch64)

export MACHINE=raspberrypi4-64

或者

export MACHINE=raspberrypi3-64
mkdir rpi_yocto && cd rpi_yocto
repo init -u https://github.com/jwinarske/manifests.git -m rpi64.xml -b dunfell
repo sync -j20
source ./setup-environment $MACHINE
bitbake-layers add-layer ../sources/meta-clang ../sources/meta-flutter
echo -e 'FLUTTER_CHANNEL = "dev"' >> conf/local.conf
echo -e 'IMAGE_INSTALL_append = " flutter-pi"' >> conf/local.conf
echo -e 'IMAGE_INSTALL_append = " flutter-gallery"' >> conf/local.conf
bitbake core-image-minimal

注意:您可能需要/想要增加 GPU_MEM 值。它默认为 64。

STM32MP157x Discovery Board(不包含构建 hack)

设置 Ubuntu 16.04 以构建 Yocto 镜像。envsetup.sh 如果您缺少某个包,会发出警告。

mkdir openstlinux-5.10-dunfell-mp1-21-03-31 && cd openstlinux-5.10-dunfell-mp1-21-03-31
repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-5.10-dunfell-mp1-21-03-31
repo sync -j20
DISTRO=openstlinux-eglfs MACHINE=stm32mp1-disco source layers/meta-st/scripts/envsetup.sh
pushd ../layers
git clone -b dunfell https://github.com/jwinarske/meta-flutter.git
git clone -b dunfell https://github.com/kraj/meta-clang.git
popd
bitbake-layers add-layer ../layers/meta-flutter ../layers/meta-clang
echo -e 'MACHINE_FEATURES_remove = "fip"\n' >> conf/local.conf
echo -e 'DISTRO_FEATURES_remove = "wayland"\n' >> conf/local.conf
echo -e 'DISTRO_FEATURES_remove = "x11"\n' >> conf/local.conf
echo -e 'FLUTTER_CHANNEL = "master"\n' >> conf/local.conf
echo -e 'CORE_IMAGE_EXTRA_INSTALL += " \' >> conf/local.conf
echo -e '  flutter-pi \' >> conf/local.conf
echo -e '  flutter-drm-gbm-backend \' >> conf/local.conf
echo -e '  flutter-gallery \' >> conf/local.conf
echo -e '"' >> conf/local.conf
cat conf/local.conf
bitbake st-image-core
...
TARGET_SYS      = "arm-ostl-linux-gnueabi"
MACHINE         = "stm32mp1-disco"
DISTRO          = "openstlinux-eglfs"
DISTRO_VERSION  = "3.1-snapshot-20210602"
TUNE_FEATURES   = "arm vfp cortexa7 neon vfpv4 thumb callconvention-hard"
TARGET_FPU      = "hard"

有关“fip”的发布说明,请参阅:https://wiki.st.com/stm32mpu/wiki/STM32MP15_OpenSTLinux_release_note

构建 EGL 镜像

bitbake demo-image-egl

在目标上运行 Flutter 应用程序(默认为 AOT)

FLUTTER_DRM_DEVICE=/dev/dri/card0 flutter-drm-eglstream-backend -b /usr/share/flutter-gallery/sony

通用 Yocto 注意事项

在具有 GCC 版本大于 Yocto 发行版中 uninative 的系统上进行构建时,请将以下内容添加到 conf/local.conf

INHERIT_remove = "uninative"

Sony 注意事项

  • 不接受 PR
  • 没有真正的纹理解决方案
  • 初步的 Vsync 支持
  • weston >= 8 不工作
  • 无多引擎
  • 无平台视图/混合合成
  • 调试构建的调试信息不足
  • 代码难以理解
  • 样板代码过多

GitHub

https://github.com/jwinarske/meta-flutter