sony/flutter-embedded-linux を使ってみた Raspberry Pi 4 (arm64) 編
あらすじ
上記のリポジトリを Raspberry Pi 4 (aarch64) 向けにビルドして、DRMで実行します。 flutter-embedded-linux
は libflutter_engine.so
を使いますが、プラットフォーム毎にビルドしないといけません。ただし、いまのところ Raspberry Pi 4 本体ではビルドできなさそうだったので、linux-x64 をホストにしてクロスビルドします。
Raspberry pi (セットアップ~ engine バージョン取得)
libflutter_engine.so を作成するために一旦flutterをインストールして、その中の engine.version ファイルの中身を取得します。
セットアップ
SDカードにイメージを焼いておく。今回使用したイメージは
ubuntu-20.04.2-preinstalled-server-arm64+raspi.img
です。SDカードをRaspberry PI に挿して起動するとログインを求められます。
ubuntu
/ubuntu
でログイン可能です。パッケージをアップデートして、必要なパッケージをインストールします。
$ sudo apt update $ sudo apt -y upgrade $ sudo apt -y unzip $ sudo apt install -y clang cmake build-essential pkg-config libegl1-mesa-dev libxkbcommon-dev libgles2-mesa-dev
- flutter をセットアップして
engine.version
を表示します。
$ git clone https://github.com/flutter/flutter $ sudo mv flutter /opt/ $ export PATH=$PATH:/opt/flutter/bin $ flutter config --enable-linux-desktop $ flutter doctor $ cat /opt/flutter/bin/internal/engine.version
ここで取得できるバージョンを .gclient
で使用します。 2021年5月22日 17:00 現在、 3fa3eb3a60e0dd741da98fe117977e7e2059042f
でした。
ホスト(セットアップ~libflutter_engine.so作成)
今のところ、Raspberry PI では libflutter_engine.so を作成できない(やり方がわからない)ので、linux-x64ベースのホストPCで作成します。今回はバーチャルマシンにubuntu-20.04をインストールしてその中で作成します。今回使用した ubuntu のイメージは ubuntu-20.04.2.0-desktop-amd64.iso
です。
- パッケージをアップデートして、必要なパッケージをインストールします。
$ sudo apt update $ sudo apt -y upgrade $ sudo apt install -y git curl vim virtualenv python2 $ sudo apt install -y clang cmake build-essential pkg-config libegl1-mesa-dev libxkbcommon-dev libgles2-mesa-dev
- .glient を作成します。
engine.version
のバージョンを url に指定します。
solutions = [ { "managed": False, "name": "src/flutter", "url": "https://github.com/flutter/engine.git@3fa3eb3a60e0dd741da98fe117977e7e2059042f", "custom_deps": {}, "deps_file": "DEPS", "safesync_url": "", }, ]
- libflutter_engine.so を作成します。途中の
./flutter/tools/gn
でGOMA usage was specified but can't be found, falling back to local builds. Set the GOMA_DIR environment variable to fix GOMA.
とか出るけど、無視して進めます。
$ gclient sync $ cd src $ ./flutter/tools/gn --target-os linux --linux-cpu arm64 --runtime-mode release --embedder-for-target --disable-desktop-embeddings $ ninja -C out/linux_release_arm64
ssh の設定 と libflutter_engine.so の転送
Raspberry PI 側
ssh サーバーをインストールします。
$ sudo apt -y install ssh $ sudo systemctl start ssh $ ip addr
ホスト
libflutter_engine.so を転送します
$ scp ~/src/out/linux_release_arm64/libflutter_engine.so ubuntu@<raspberry_ipのIPアドレス>:/home/ubuntu/
flutter-embedded-linux をビルド (DRM編)
$ cd $ sudo apt install libdrm-dev libgbm-dev libinput-dev libudev-dev libsystemd-dev $ git clone https://github.com/sony/flutter-embedded-linux $ cd flutter-embedded-linux $ mkdir build $ cd build $ cmake -DUSER_PROJECT_PATH=examples/flutter-drm-gbm-backend .. $ cp ~/libflutter_engine.so . $ cmake --build .
flutter-drm-gbm-backend の実行
flutter サンプルアプリを作成
$ sudo apt -y install ninja-build libgtk-3-dev $ flutter create sample $ cd sample/ $ flutter build linux $ cd ..
ubuntu 20.04 server は DRM がデフォルトで機能していないようです。 /boot/firmware/usercfg.txt
に以下の行を追記します。
dtoverlay=vc4-fkms-v3d
そのあといったん再起動した後、以下のコマンドを実行します。
$ cd flutter-embedded-linux/build $ sudo LD_LIBRARY_PATH=. ./flutter-drm-gbm-backend --bundle=./sample/build/linux/arm64/release/bundle/
これで、画面上いっぱいに flutter アプリが表示されたはずです。
以上!
参考資料
RaspberryPi3B+にUbuntu 20.04 LTS (Server)の64bit版をインストール - Qiita