0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VIA VAB-5000向けのYocto ProjectをビルドしてYocto 4.0.17 OSと拡張開発環境(eSDK)を入手する

Posted at

最小のフットプリントを実現できる可変なLinuxディストリビュージョン開発環境「Yocto Project」を利用してVIAのVAB-5000上に最適なLinux環境を構築しよう

前回の記事では、VIA社のエッジAI向けシングルボードコンピュータ「VAB-5000」のLinux環境について紹介しました。前回はDebian OSについて紹介したのですが、Yocto Projectを利用することにより、小さなフットプリントで動作するLinux環境を手に入れることができます。Yoctoのバイナリイメージは公式サイトにて配布されているのですが、今回はYoctoをカスタマイズすることも視野にいれてソースコードからビルドする手順について解説します。

VIA VAB-5000 board all_front.jpg

バイナリ形式のYocto OSを入手する場合は...

Yoctoのバイナリイメージは以下のサイトからダウンロードできます。

スクリーンショット 2025-03-13 165405.png

事前準備

事前に、以下の手順の 「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ケーブル ... ターゲットをネットワークへ接続するために利用

DSC01554.JPG

ホスト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を準備しました...同じ現象になっている方、いらっしゃいますでしょうか...?

image.png

Ubuntu18.04を上記のサイトからダウンロードし、rufusでUSBフラッシュメモリへと書き込み、インストールメディアとします。

image.png

インストールは通常通りの手順で問題ありません。

WIN_20250303_19_39_49_Pro.jpg

リモートから開発できるように環境を整える

まず 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を書き込める状態となります。 SW1Erasing 'mmc0' の表示が出る前押し続けてください。

DSC01559.JPG

### 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が表示されます。

WIN_20250303_18_42_14_Pro.jpg

開発用の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でも色々試してみたいため
今後追記していくと思います、是非ご期待ください。

お疲れ様でした!


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?