最小のフットプリントを実現できる可変なLinuxディストリビュージョン開発環境「Yocto Project」を利用してVIAのVAB-5000上に最適なLinux環境を構築しよう
前回の記事では、VIA社のエッジAI向けシングルボードコンピュータ「VAB-5000」のLinux環境について紹介しました。前回はDebian OSについて紹介したのですが、Yocto Projectを利用することにより、小さなフットプリントで動作するLinux環境を手に入れることができます。Yoctoのバイナリイメージは公式サイトにて配布されているのですが、今回はYoctoをカスタマイズすることも視野にいれてソースコードからビルドする手順について解説します。
バイナリ形式のYocto OSを入手する場合は...
Yoctoのバイナリイメージは以下のサイトからダウンロードできます。
事前準備
事前に、以下の手順の 「DebianをVAB-5000に書き込むツールをインストールする (ホストPC)」 を例に、VIA VAB-5000にOSを書き込める環境を構築する必要があります。
必要な機材(ターゲット)
開発には以下の機材が必要になります。ターゲットのストレージは、16GBのeMMCストレージがボード上に搭載されていますので、別途micro-SDカードなどを用意する必要はありません。 ひとつ注意が必要なのは、VAB-5000へOSを書き込む環境で利用したUbuntu22.04でなく、YoctoのビルドにはUbuntu18.04が必要ということです。そしてUbuntu 18.04の環境はVirtual Machineで構築しないでください。Yoctoのビルドには多くのリソースが必要なため、十分なメモリを備えたリアルPCをご準備ください。
- 開発用PC(Ubuntu18.04) ... ホストPC本体 (リアルPC)
- VIA Technologies社 VAB-5000 ... ターゲット本体
- micro-USBケーブル ... ホストとターゲットを接続するためのケーブル
- 4Kモニタ、HDMIケーブル、キーボード(US配列)、マウス ... 操作用のUI
- LANケーブル ... ターゲットをネットワークへ接続するために利用
ホストPC上に開発環境を準備をする
まず、 OSのインストールや開発に便利なツールなどのインストールを行い、 VAB-5000の開発ツールをインストールするための土台 を組み上げていきます。
- Core i7-6700 (4cores, 8threads)
- RAM 32GB
- On-Board Graphics (CPU)
- Ubuntu 18.04 LTS
- Yocto Project 4.0.17の要件にあわせます
Ubuntu 18.04 LTSをインストールする
まず、ホストPCに「Ubuntu18.04 LTS」をインストールします。以下のインストーラーを利用し、インストールしました。今回はGPUを搭載せず、マザーボード上のオンボードのHDMIポートを利用しました。 Core i5-14500のPCではインストーラーのGUIが起動しなかったため、Core i7-6700のPCを準備しました...同じ現象になっている方、いらっしゃいますでしょうか...?
Ubuntu18.04を上記のサイトからダウンロードし、rufusでUSBフラッシュメモリへと書き込み、インストールメディアとします。
インストールは通常通りの手順で問題ありません。
リモートから開発できるように環境を整える
まず apt upgrade
コマンドにより、パッケージを最新の状態へと更新し openssh-server
をインストールすし、リモートからyoctoのソースコード一をビルドできるようにします。
### リポジトリ情報を最新にする
$ sudo apt update
### 最新の状態へと更新する
$ sudo apt upgrade
### SSHサーバを起動する
$ sudo apt install openssh-server vim
$ sudo systemctl start ssh
$ sudo systemctl enable ssh
### sudo実行時にパスワードを聞かれないようにする
$ sudo vim /etc/sudoers
### 念のため再起動する
$ sudo reboot
### Ubuntu上での操作
$ mkdir -p /home/shino/.ssh
$ touch /home/shino/.ssh/authorized_keys
$ sudo chmod 700 /home/shino/.ssh
$ sudo chmod 640 /home/shino/.ssh/authorized_keys
### 公開鍵を登録する
$ vi /home/shino/.ssh/authorized_keys
# -->> Windows上の "id_rsa.pub" の内容を書き込む
Yoctoに必要なパッケージをインストールする
Yocto Projectのソースコードをビルドするために必要なパッケージを以下の手順でインストールします。また git config
を利用してgitコマンドの初期設定を行います。
### リポジトリを最新の状態にする
$ sudo apt-get update
### bitbakeに必要なパッケージをインストールする
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm gcc g++ tar libpulse-dev libevent-dev ninja-build rpm2cpio python3-ply libc-dev-bin git python3-subunit mesa-common-dev curl liblz4-tool zstd
### gnコマンドをインストールする
$ wget -O gn http://storage.googleapis.com/chromium-gn/3fd43e5e0dcc674f0a0c004ec290d04bb2e1c60e
$ sudo chmod 777 gn
$ sudo mv gn /usr/bin/
### repoコマンドをインストールする
$ mkdir -p ~/bin
$ PATH=~/bin:$PATH
$ vi ~/.bashrc
# 最後の行に以下を追加
export PATH="/home/shino/bin:$PATH"
$ source ~/.bashrc
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+rx ~/bin/repo
### gitを利用するための設定
$ git config --global user.name "xxx xxx"
$ git config --global user.email "xxx@xxx.xxx"
VIAのサポートデスクにVAB-5000を購入した旨を連絡し、VIA VAB-5000用のYoctoのソースコード一式を入手してホストPC上にソースコードを展開する
VIA VAB-5000向けのYoctoのソースコードは、VIAのサポートデスクから入手することができます。VIA VAB-5000を購入した旨を伝え、Yoctoのソースコードを入手してください。入手後、ホストPC上に unzip
コマンドによりファイルを展開します。
### ビルド用ディレクトリを作成する
$ cd ~
$ mkdir vab-5000
$ cd vab-5000
######
### Download
### VIA_SOM-5000_Yocto_4.0.17_BSP_v1.0.0_241004.zip
### from VIA Support Desk
######
$ ls
# VIA_SOM-5000_Yocto_4.0.17_BSP_v1.0.0_241004.zip
### BSPパッケージを展開する
$ unzip ./VIA_SOM-5000_Yocto_4.0.17_BSP_v1.0.0_241004.zip
$ cd
$ mkdir build
$ cd build
### OSを構成するソースコードを展開する
$ cp ~/vab-5000/VIA_SOM-5000_Yocto_4.0.17_BSP_v1.0.0_241004/Source_Code/VIA_SOM-5000_Yocto_4.0.17_BSP.tgz ${PWD}
$ tar zxvf VIA_SOM-5000_Yocto_4.0.17_BSP.tgz
# ...
$ ls
# VIA_SOM-5000_Yocto_4.0.17_BSP.tgz yocto4.0.17
### ビルドディレクトリへ移動する
$ cd yocto4.0.17/
$ pwd
# /home/shino/vab-5000/build/yocto4.0.17
Yoctoをビルドする
早速ビルドしてみましょう。
環境変数を設定し、ビルドの準備をする
以下のコマンドを yocto4.0.17
ディレクトリ内で実行し、yoctoのビルドに必要な環境変数を設定します。
### OSイメージを作成する準備を行う
$ TEMPLATECONF=${PWD}/src/meta-rity/meta/conf source src/poky/oe-init-build-env; export BUILD_DIR=`pwd`
# You had no conf/local.conf file. This configuration file has therefore been
# created for you from /home/shino/vab-5000/build/yocto4.0.17/src/meta-rity/meta/conf/local.conf.sample
# You may wish to edit it to, for example, select a different MACHINE (target
# hardware). See conf/local.conf for more information as common configuration
# options are commented.
#
# You had no conf/bblayers.conf file. This configuration file has therefore been
# created for you from /home/shino/vab-5000/build/yocto4.0.17/src/meta-rity/meta/conf/bblayers.conf.sample
# To add additional metadata layers into your configuration please add entries
# to conf/bblayers.conf.
#
# The Yocto Project has extensive documentation about OE including a reference
# manual which can be found at:
# https://docs.yoctoproject.org
#
# For more information about OpenEmbedded see the website:
# https://www.openembedded.org/
ビルドに含めるパッケージを追加する
conf/local.conf
に以下の設定を追加し、yoctoのイメージに含めるパッケージを追加します。この設定により、yocto OS上で g++
と opencv
のライブラリとヘッダをOSに含めることができます。 Yocto OSからtensorflow
を利用する設定については、後日追記します。
$ find ../src -name tensorflow*.bb
# ../src/meta-tensorflow/recipes-framework/tensorflow/tensorflow-native_2.14.0.bb
# ../src/meta-tensorflow/recipes-framework/tensorflow/tensorflow-estimator_2.14.0.bb
# ../src/meta-tensorflow/recipes-framework/tensorflow/tensorflow-lite_2.14.0.bb
# ../src/meta-tensorflow/recipes-framework/tensorflow/tensorflow_2.14.0.bb
# ../src/meta-tensorflow/recipes-model/googlecodelabs/tensorflow-for-poets_2.bb
# ../src/meta-nn/recipes-tensorflowlite-prebuilt/tensorflowlite-prebuilt/tensorflowlite-prebuilt_2.14.0.bb
OpenCVのヘッダとOpenSSH serverを含める設定
$ vim conf/local.conf
# 以下の行を追加する
######
### APPEND CONFIGRATION
######
IMAGE_INSTALL:append = " abseil-cpp"
IMAGE_INSTALL:append = " packagegroup-core-buildessential"
IMAGE_INSTALL:append = " opencv opencv-samples opencv-dev"
IMAGE_INSTALL:append = " libopencv-core libopencv-imgproc libopencv-highgui libopencv-videoio libopencv-imgcodecs"
######
### Add User
######
INHERIT:append = " extrausers"
IMAGE_FEATURES:append = " ssh-server-openssh"
IMAGE_INSTALL:append = " openssh openssh-sftp-server"
# 追記したら保存する
bitbakeによりOSイメージを作成する
bitbake rity-vis-image
コマンドにより、OSをビルドします。
### bitbakeしてOSイメージを生成する
$ time bitbake rity-vis-image
# ...
# Loading cache: 100% | | ETA: --:--:--
# Loaded 0 entries from dependency cache.
# NOTE: /home/shino/vab-5000/build/yocto4.0.17/src/poky/../meta-mediatek-bsp/recipes-bsp/u-boot/u-boot_git.bb: UBOOT_FW_ENV_FILE set to fw_env-mmc-boot.config
# Parsing recipes: 100% |##################################################################################| Time: 0:00:56
# Parsing of 2966 .bb files complete (0 cached, 2966 parsed). 4513 targets, 367 skipped, 0 masked, 0 errors.
# NOTE: Resolving any missing task queue dependencies
#
# Build Configuration:
# BB_VERSION = "2.0.0"
# BUILD_SYS = "x86_64-linux"
# NATIVELSBSTRING = "ubuntu-18.04"
# TARGET_SYS = "aarch64-poky-linux"
# MACHINE = "som-5000"
# DISTRO = "rity-vis"
# DISTRO_VERSION = "24.0-release"
# TUNE_FEATURES = "aarch64 armv8a crc"
# TARGET_FPU = ""
# ...
# Currently 7 running tasks (128 of 8988) 1% |# |
# 0: gmp-native-6.2.1-r0 do_fetch - 26s (pid 18227) 84% |############################################### | 169K/s
# 1: binutils-cross-aarch64-2.38-r0 do_fetch - 21s (pid 19634) 4% |# | 182K/s
# 2: gcc-source-11.4.0-11.4.0-r0 do_fetch - 8s (pid 25107) 2% | | 100K/s
# 3: gperf-native-3.1-r0 do_fetch - 4s (pid 26901) 16% |######## | 65.8K/s
# 4: glibc-2.35-r0 do_fetch - 4s (pid 26999) 0% | | 96.0K/s
# 5: zstd-native-1.5.2-r0 do_compile - 2s (pid 27785)
# 6: m4-native-1.4.19-r0 do_compile - 2s (pid 27833)
# ...
vulkan-cts-1.2.6.0-r0
のビルドが多くのリソースを消費するらしく、bitbakeに失敗することがありますが、bitbakeを再実行することにより、エラーを回避することができます。
ビルドの成果物を確認する
ビルドが完了したら、以下の手順でビルドの成果物を確認します。
### bitbakeの成果物を確認する
$ ls tmp/deploy/images/som-5000/
# ... (この成果物をVAB-5000へflashする)
### イメージを圧縮する
$ cat compress.sh
######
### 以下のスクリプトを作成する
######
#!/bin/bash
rm -rf som-5000.tar
tar -cvf som-5000.tar ./tmp/deploy/images/som-5000
### VAB-5000へ書き込むイメージを圧縮する
$ ./compress.sh
$ ls som-5000.tar
# som-5000.tar
VIA VAB-5000にイメージを書き込む設定をする
VIA VAB-5000にイメージを書き込むために Ubuntu22.04 をインストールしたマシンで以下の手順のうち、書き込みに関する手順を実施して、OSイメージを書き込む準備をしてください。
- VAB-5000にOSを書き込むためのツールをインストールする
- 必要なパッケージをインストールする
- DebianをVAB-5000に書き込むツールをインストールする
- Genio Toolsをインストールする
VIA VAB-5000にyoctoのOSイメージを書き込む
最後に生成したYocto OSをVAB-5000へ書き込みます。
### 書き込み用のUbuntuでの作業
$ mkdir ~/yocto_mybuild
$ cd ~/yocto_mybuild
$ cat flash.sh
######
### 以下のスクリプトを作成する
######
#!/bin/bash
rm -rf ./tmp
tar -xvf som-5000.tar
cd tmp/deploy/images/som-5000
genio-flash
### ビルドした際のsom-5000.tarを展開する
$ ls som-5000.tar
# som-5000.tar
### VAB-5000にイメージを書き込む
$ ./flash.sh
# Genio Tools: v1.5
# Yocto Image:
# name: VIA Intelligent Solutions Image (rity-vis-image)
# distro: VIA Intelligent Solutions Layer 24.0-release (rity-vis)
# codename: kirkstone
# machine: som-5000
# overlays: ['gpu-mali.dtbo', 'apusys.dtbo', 'video.dtbo']
#
# WARNING:root:No 'ftdi-cbus' device found
# WARNING:root:Unable to find and reset the board. Possible causes are:
# 1. This is not a Genio 350/700 EVK, nor a Pumpkin board.
# 2. The board port UART0 is not connected.
# 3. The UART0 port is being opened by another tool, such as TeraTerm on Windows.
# You can now manually reset the board into DOWNLOAD mode.
#
# INFO:root:Continue flashing...
書き込み開始のメッセージが表示されたら、 VAB-5000上の SW1
を押した状態で、ACアダプタを抜去し、再度接続します。 この操作によりVAB-5000がOSを書き込める状態となります。 SW1
は Erasing 'mmc0'
の表示が出る前押し続けてください。
### SW1を押し続けたまま電源を投入し、SW1は押し続ける
# ...
# INFO:root:Continue flashing...
# Looking for MediaTek SoC matching USB device 0e8d:0003
# Opening /dev/ttyACM0 using baudrate=115200
# Connected to MediaTek SoC: hw_code[0x8188]
# Sending bootstrap to address: 0x201000
# Jumping to bootstrap at address 0x201000 in AArch64 mode
# erasing mmc0
# < waiting for any device >
# Erasing 'mmc0' (bootloader) request sz: 0x3a3e00000, real erase len: 0x0
### SW1を離して良い
# OKAY [ 0.786s]
# Finished. Total time: 0.790s
# erasing mmc0boot0
# Erasing 'mmc0boot0' (bootloader) request sz: 0x1fe0000, real erase len: 0x1fe0000
# OKAY [ 0.006s]
# Finished. Total time: 0.010s
# erasing mmc0boot1
# Erasing 'mmc0boot1' (bootloader) request sz: 0x1fe0000, real erase len: 0x1fe0000
# OKAY [ 0.005s]
# Finished. Total time: 0.009s
# flashing mmc0=rity-vis-image-som-5000.wic.img
# Sending sparse 'mmc0' 1/15 (231652 KB)
# ...
# Sending sparse 'mmc0' 15/15 (175340 KB) OKAY [ 4.411s]
# Writing 'mmc0' OKAY [ 6.852s]
# Finished. Total time: 246.610s
# flashing mmc0boot0=bl2.img
# Sending 'mmc0boot0' (273 KB) OKAY [ 0.009s]
# Writing 'mmc0boot0' OKAY [ 0.024s]
# Finished. Total time: 0.039s
# Detected U-Boot env size: 4096
# flashing mmc0boot1=u-boot-env.bin
# Sending 'mmc0boot1' (4 KB) OKAY [ 0.002s]
# Writing 'mmc0boot1' OKAY [ 0.005s]
# Finished. Total time: 0.012s
# Rebooting OKAY [ 0.002s]
# Finished. Total time: 0.052s
# ...
# 以上で書き込みは完了です、自動的にVAB-5000が再起動します
インストールが完了すると、以下のGUIが表示されます。
開発用のSDKを作成し、インストールする
yoctoではbitbakeに -c populate_sdk_ext
を指定して実行することにより、x86-64上でyoctoの環境向けのバイナリを生成するクロスビルドのできる開発用SDKを作成することができます。以下の手順により、クロスビルドのできる開発用SDKを作成し、インストールできます。
### bitbakeでSDKを生成する
$ time bitbake rity-vis-image -c populate_sdk_ext
# ...
### 生成されたSDKを確認する
$ ls tmp/deploy/sdk/rity-vis-glibc-x86_64-rity-vis-image-armv8a-som-5000-toolchain-ext-24.0-release.sh
# tmp/deploy/sdk/rity-vis-glibc-x86_64-rity-vis-image-armv8a-som-5000-toolchain-ext-24.0-release.sh
### SDKをインストールする
$ ./tmp/deploy/sdk/rity-vis-glibc-x86_64-rity-vis-image-armv8a-som-5000-toolchain-ext-24.0-release.sh
# armv8a-som-5000-toolchain-ext-24.0-release.sh
# VIA Intelligent Solutions Layer Extensible SDK installer version 24.0-release
# =============================================================================
# Enter target directory for SDK (default: ~/rity-vis_sdk):
# You are about to install the SDK to "/home/shino/rity-vis_sdk". Proceed [Y/n]? Y
# Extracting SDK.....
# ...
# SDK has been successfully set up and is ready to be used.
# Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
# $ . /home/shino/rity-vis_sdk/environment-setup-armv8a-poky-linux
### 開発環境を有効化する
$ . /home/shino/rity-vis_sdk/environment-setup-armv8a-poky-linux
以上がVIA VAB-5000向けのYocto OSをビルドし
開発ツールを生成してインストールする手順となります。
Yoctoでも色々試してみたいため
今後追記していくと思います、是非ご期待ください。
お疲れ様でした!