Raspberry Piよりも手厚いサポートを受けられるシングルボードコンピュータ「VIA VAB-5000」を活かして、自社で開発した産業用Raspberry Piで培ったIPを安心して世の中に発信しよう
Raspberry Piと互換性のある40pinヘッダを備え、OSにはRaspberry Pi OSのベースとなっている"Debian"を採用、さらにはSoCにAI向けのアクセラレータ 「MDLA」 まで搭載している、至れり尽くせりな産業用のエッジAI向けシングルボードコンピュータが VIA Technologies社の誇る「VAB-5000」 です。Raspberry Piでプロダクトを開発してきましたが「コミュニティベースのサポートよりも手厚いBtoBのサポートを受けたい!」と考えていたところ、この度、ご縁がありましてVAB-5000を無事購入することができました!!
産業用のデバイスを扱うのは私も久し振りなため、とてもワクワクしています。 なかなか"産業用"と謳われるデバイスの開発情報はQiitaに上がってこないものですが、今回は折角の機会なので、VAB-5000上でのアプリケーション開発手順などを紹介できればと考えています。
※開発情報を開示できないもの(NDAの締結が必要な情報)は都度その旨を明記します。
※本記事はシリーズものにする予定です(不定期更新)、お楽しみに!
VAB-5000 x Debian OS をセットアップする
今回は、第1回ということでVAB-5000にOSをインストールする手順を解説します。製品ページの下部にある 「Debian 12 EVK クイックスタートガイド」 に従って作業します。
必要な機材(ターゲット)
開発には以下の機材が必要になります。ターゲットのストレージは、16GBのeMMCストレージがボード上に搭載されていますので、別途micro-SDカードなどを用意する必要がありません。 Raspberry Piの場合、メインストレージとなるmicro-SDカードの接触不良が原因で実フィールドにてシステムがエラーを吐くいてしまう問題を度々耳にしますので、こうしたオンボードのストレージは嬉しいですね。
- 開発用PC(Ubuntu22.04) ... ホスト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 22.04 LTS
- Yocto Linux等、併設する他の開発環境も考慮しました
Ubuntu 22.04 LTSをインストールする (ホストPC)
まず、ホストPCに「Ubuntu22.04 LTS」をインストールします。以下のインストーラーを利用し、インストールしました。今回はGPUを搭載せず、マザーボード上のオンボードのHDMIポートを利用しました。
最低限必要な前準備を行う (ホストPC)
日本語設定でインストールすると、ホームディレクトリ以下に日本語名のディレクトリが作成されてしまい、何かと不都合が生じるため xdg-user-dirs-gtk-update
を使ってディレクトリを英語名に変更します。 また、以降の手順にて sudo を利用することが多いため、 sudo 実行時にパスワードを求められないよう /etc/sudoers
に shino ALL=(ALL:ALL) NOPASSWD:ALL
の設定を追記し、パスワード無しでsudoできるようにしました。 設定した後、OSを再起動します。
### ホームディレクトリへ移動
$ cd ~
### ホームディレクトリ名から日本語を除外する
$ LANG=C xdg-user-dirs-gtk-update
### ユーザーからsudoをパスワード無しで実行できるようにする
$ sudo vi /etc/sudoers
# -->> 以下の行を追加する(ユーザー名がshinoの場合)
# shino ALL=(ALL:ALL) NOPASSWD:ALL
### 再起動する
$ sudo reboot
Ubuntuのパッケージをすべて更新する (ホストPC)
続いて、Ubuntuのパッケージを最新の状態へと更新します。
# リポジトリにアクセス
$ sudo apt update
# 更新可能なパッケージをすべてアップグレード
$ sudo apt upgrade
# 再起動
$ sudo reboot
VAB-5000の開発環境を準備する (ホストPC)
VAB-5000は、Android、Yocto Project、Debianと様々なOSに対応しています。今回は、VAB-5000がシングルボードコンピュータでRaspberry Piに対抗した製品であること、そしてRaspberry Pi OSがDebian由来のOSであることを踏まえて 同種の「Debian」をOSとして選択しました。 公式サイトの「Debian 12 EVK クイックスタートガイド」を参考にインストール作業を行います。
VAB-5000にOSを書き込むためのツールをインストールする (ホストPC)
Ubuntu22.04上に、VAB-5000にOSを書き込むためのツールをインストールします。まず 「Setup Build Environment (Linux)」 を参考に必要なパッケージをインストールした後 「Setup Tool Environment (Linux)」 を参考に、VAB-5000にOSを書き込むためのツールをインストールします。 VAB-5000はMediaTek社のGenio 700 SoCを搭載しているボードのため、MediaTek社が公開しているドキュメントを参考にインストール作業を進めます。
まず、ホストPCとVAB-5000を接続していない状態 から作業をはじめてください。
必要なパッケージをインストールする (ホストPC)
最初に、PCとVAB-5000を接続するためのGenioのツールを実行できるようにするため、Genioのツールが必要とするパッケージをインストールします。
### 必要なパッケージをインストールする
sudo apt-get install -y gawk wget curl git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libelf-dev libsdl1.2-dev lz4 pylint xterm python3-subunit mesa-common-dev libstdc++-12-dev
### repoツールをインストールする
$ mkdir -p ~/repo-tool/bin
# -->> repoツールをダウンロードする
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/repo-tool/bin/repo
$ chmod a+rx ~/repo-tool/bin/repo
# -->> repoツールにパスを通す
$ vim ~/.bashrc
# 最後に以下の1行を追加する
export PATH="$PATH:/home/shino/repo-tool/bin"
$ source ~/.bashrc
# pipを最新版に更新する
$ pip3 install --upgrade pip
DebianをVAB-5000に書き込むツールをインストールする (ホストPC)
続いて、VAB-5000にOSを書き込むためのGenioのツールをインストールします。
### Fastboot と ADB ツールをインストールする
# -->> OSの書き込みに利用する
$ sudo apt update
$ sudo apt-get install android-tools-adb android-tools-fastboot
### USB Device ruleを設定する
$ echo -n 'SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201c", MODE="0660", TAG+="uaccess"
SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0003", MODE="0660", TAG+="uaccess"
SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0660", TAG+="uaccess"
SUBSYSTEM=="gpio", MODE="0660", TAG+="uaccess"
' | sudo tee /etc/udev/rules.d/72-aiot.rules
$ cat /etc/udev/rules.d/72-aiot.rules
# SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201c", MODE="0660", TAG+="uaccess"
# SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0003", MODE="0660", TAG+="uaccess"
# SUBSYSTEM=="usb", ATTR{idVendor}=="0403", MODE="0660", TAG+="uaccess"
# SUBSYSTEM=="gpio", MODE="0660", TAG+="uaccess"
# ルールを適用する
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger
### udev ruleを追加する
$ echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201c", MODE="0660", $ GROUP="plugdev"' | sudo tee -a /etc/udev/rules.d/96-rity.rules
$ cat /etc/udev/rules.d/96-rity.rules
# SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201c", MODE="0660", $ GROUP="plugdev"
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger
$ sudo usermod -a -G plugdev $USER
### UART接続用のGroupにユーザーを追加する
$ sudo usermod -a -G dialout $USER
### UARTのクライアントをインストールする
$ sudo apt update
$ sudo apt-get install picocom
$ sudo apt-get install screen
### 再起動
$ sudo reboot
Genio Toolsをインストールする (ホストPC)
VAB-5000と連携するために、Genio Toolsをインストールします。
### genio-toolsをインストールする
$ pip install --use-pep517 genio-tools
# WARNING: The scripts pyserial-miniterm and pyserial-ports are installed in '/home/shino/.local/bin' which is not on PATH.
# Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
# WARNING: The scripts aiot-bootrom and genio-bootrom are installed in '/home/shino/.local/bin' which is not on PATH.
# Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
# WARNING: The scripts aiot-board, aiot-config, aiot-efuse, aiot-flash, aiot-rpmb-write-key, genio-board, genio-config, genio-efuse, genio-flash, genio-multi-download-cli and genio-rpmb-write-key are installed in '/home/shino/.local/bin' which is not on PATH.
# Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
# Successfully installed fastboot-log-parser-0.1.1 genio-bootrom-1.1.12 genio-tools-1.5 gpiod-1.4.0 keyboard-0.13.5 oyaml-1.0 packaging-24.2 psutil-7.0.0 pyftdi-0.56.0 pyserial-3.5 pyudev-0.24.3 pyusb-1.3.1 simplejson-3.20.1
### genio-toolsがインストールされた
### ディレクトリをパスに追加する
$ vim ~/.bashrc
# 最後に以下の1行を追加する
export PATH="$PATH:/home/shino/.local/bin"
$ source ~/.bashrc
### genio-configを確認する
$ genio-config
# fastboot: OK
# udev rules: OK (md5: a3b2767b42ee01d7c62bf394400528ae)
# Serial device write access: FAIL
# You may experience some write permission error('open(/dev/ttyACM0): Permission denied')
# Consider adding your user to the 'dialout' Linux group (sudo adduser `whoami` dialout)
Debianイメージをダウンロードし展開する (ホストPC)
それではいよいよVAB-5000にOSを書き込んでみましょう。
上記から 「Debian 12 EVK」 を入手します。ダウンロード後、これを展開します。
### VIAのWebサイトからDebianイメージを入手し、展開する
$ cd ~
$ wget https://cdn.viaembedded.com/products/software/vab_5000/debian_evk/VIA_VAB-5000_Debian_12_EVK_v1.0.0_241118.zip
### ドキュメントとOSイメージを展開する
$ unzip ./VIA_VAB-5000_Debian_12_EVK_v1.0.0_241118.zip
$ cd VIA_VAB-5000_Debian_12_EVK_v1.0.0_241118
$ ls
# Document Firmware ReleaseNote.txt 'VIA Software License Agreement.pdf'
$ cd Firmware
### OSイメージを展開する
$ unzip VIA_VAB-5000_Debian_12_EVK.zip
$ ls
# VIA_VAB-5000_Debian_12_EVK.zip debian-12.7-vab-5000.manifest fip.bin rity.json
# bl2.img debian-12.7-vab-5000.testdata.json fitImage u-boot-env.bin
# bootassets.vfat debian-12.7-vab-5000.wic.img lk.bin u-boot-initial-env
# capsule.vfat devicetree partitions.json
### 作業ディレクトリのパスを確認する
$ pwd
# /home/shino/VIA_VAB-5000_Debian_12_EVK_v1.0.0_241118/Firmware
開発用PCとVAB-5000をmicro-USBケーブルで接続する
VAB-5000のmicro-USBポートをPCと接続します。
VAB-5000にOSを書き込む (ホストPC)
以上でVAB-5000にOSを書き込む準備が整いました。 先の手順でインストールした genio-flash
コマンドを利用してOSを書き込みます。 まず、 書き込みたいOSのディレクトリへ移動 し、そのディレクトリ内で genio-flash
コマンドを実行してください。
### OSが格納されているディレクトリへ移動
$ cd /home/shino/VIA_VAB-5000_Debian_12_EVK_v1.0.0_241118/Firmware
### OSを書き込む
$ genio-flash
# Genio Tools: v1.5
# Yocto Image:
# name: Debian GNU/Linux 12 (bookworm) (debian-12.7)
# distro: debian 12.7 (debian)
# codename: None
# machine: vab-5000
# overlays: ['gpu-mali.dtbo', 'video.dtbo', 'camera-rn6752-csi0-std.dtbo', 'apusys.dtbo']
#
# WARNING:root:[Errno 0] Success: 'error creating GPIO chip iterator'
# WARNING:root:Board control failed. 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は押し続ける
# ...
# 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.060s]
# Finished. Total time: 0.064s
# 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=debian-12.7-vab-5000.wic.img
# Sending sparse 'mmc0' 1/25 (259164 KB) OKAY [ 8.451s]
# Writing 'mmc0' OKAY [ 10.839s]
# Sending sparse 'mmc0' 2/25 (256790 KB) OKAY [ 8.192s]
# Writing 'mmc0' OKAY [ 10.358s]
# Sending sparse 'mmc0' 3/25 (261666 KB) OKAY [ 8.373s]
# Writing 'mmc0' OKAY [ 11.421s]
# ...
# Sending sparse 'mmc0' 25/25 (87887 KB) OKAY [ 2.745s]
# Writing 'mmc0' OKAY [ 3.875s]
# Finished. Total time: 467.772s
# flashing mmc0boot0=bl2.img
# Sending 'mmc0boot0' (273 KB) OKAY [ 0.009s]
# Writing 'mmc0boot0' OKAY [ 0.021s]
# Finished. Total time: 0.044s
# ERROR:aiot:Could not detect U-Boot env size, assume 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
以上でOSの書き込みは完了です。
VAB-5000上のDebian12にログインする (VAB-5000)
OSの書き込みが完了すると、自動的に再起動が行われ、以下のログイン画面が表示されます。 パスワードは設定されていないため、ユーザー名をクリックするだけでDebianへログインすることができます。
パスワードを設定する (VAB-5000)
ログインすると見慣れたGUIを確認することができます。 ログイン後 passwd
コマンドでパスワードを設定しておきましょう。ターミナルには画面左上の Actibities
からアクセスできます。
キーボードの配列を選択する (VAB-5000)
日本語キーボードを利用している場合は「Settings」の「Keyboard」から「Japanese」キーボードを追加しておきましょう。
パッケージを最新の状態へとアップデートする (VAB-5000)
OSのインストールが完了したら、最初に、インストールされているパッケージをすべて最新の状態へと更新しましょう。 apt update
apt upgrade
コマンドで最新のパッケージを取得します。
### リポジトリの情報を最新にする
$ sudo apt update
### パッケージをすべてアップデートする
$ sudo apt -y upgrade
また、開発によく利用するツールもここでインストールしておくと便利です。
### 開発によく利用するパッケージを追加する
$ sudo apt -y install git wget curl build-essential
### エディタを追加する
$ sudo apt install vim
$ sudo update-alternatives --config vi
# alternative vi (/usr/bin/vi を提供) には 2 個の選択肢があります。
#
# 選択肢 パス 優先度 状態
# ------------------------------------------------------------
# * 0 /usr/bin/vim.basic 30 自動モード
# 1 /usr/bin/vim.basic 30 手動モード
# 2 /usr/bin/vim.tiny 15 手動モード
#
# 現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:
# -->> [Enter]
リモートから開発するためにopenssh-serverを設定する (VAB-5000)
次に、開発環境(ターゲット)をリモートからコーディングしたいため openssh-server
をインストールし、SSH接続ができるように設定を行います。 これは必須の手順ではありませんが、操作が簡単になります。 Visual Studio Codeや、Windowsのターミナルからパスワード入力すること無くSSH接続するための公開鍵の作成方法は、下記の記事をご参照ください。
### sshサーバをインストールします
$ sudo apt install openssh-server
### Ubuntu24.04からsshdでなくsshになっています
# ... 起動時にサービスが開始されるように設定します
$ sudo systemctl start ssh
$ sudo systemctl enable ssh
### sudoを簡略化する
$ sudo vi /etc/sudoers
# 以下の行を末尾に追加
# debian ALL=(ALL:ALL) NOPASSED:ALL
### Ubuntu上での操作
$ mkdir -p /home/debian/.ssh
$ touch /home/debian/.ssh/authorized_keys
$ sudo chmod 700 /home/debian/.ssh
$ sudo chmod 640 /home/debian/.ssh/authorized_keys
### 公開鍵を登録する
$ vi /home/debian/.ssh/authorized_keys
# -->> Windows上の "id_rsa.pub" の内容を書き込む
### 再起動する
$ sudo reboot
これでVisual Studio Codeから開発することができます。
補足:Yocto BSPをインストールする場合 (ホストPC)
VAB-5000ではOSとしてYocto 4.0.17もサポートしています。Yoctoは以下のコマンドによりWebからOSを入手することが可能です。ボードへの書き込み方法はDebianの場合と同じです。
$ cd ~
$ wget https://cdn.viaembedded.com/products/software/vab_5000/yocto_evk/VIA_VAB-5000_Yocto_4.0.17_EVK_v1.0.0_240906.zip
### ドキュメントとOSイメージを展開する
$ unzip ./VIA_VAB-5000_Yocto_4.0.17_EVK_v1.0.0_240906.zip
$ cd VIA_VAB-5000_Yocto_4.0.17_EVK_v1.0.0_240906/
$ ls
# Document Firmware ReleaseNote.txt 'VIA Software License Agreement.pdf'
$ cd Firmware
### OSイメージを展開する
$ unzip VIA_VAB-5000_Yocto_4.0.17_EVK.zip
$ ls
# VIA_VAB-5000_Yocto_4.0.17_EVK.zip devicetree partitions.json rity.json
# bl2.img fip.bin rity-vis-image-vab-5000.manifest u-boot-initial-env
# bootassets.vfat fitImage rity-vis-image-vab-5000.testdata.json
# capsule.vfat lk.bin rity-vis-image-vab-5000.wic.img
### 作業ディレクトリのパスを確認する
$ pwd
# /home/shino/VIA_VAB-5000_Yocto_4.0.17_EVK_v1.0.0_240906/Firmware
### OSをVAB-5000に書き込む
$ genio-flash
# Genio Tools: v1.5
# Yocto Image:
# name: VIA Intelligent Solutions Image (rity-vis-image)
# distro: VIA Intelligent Solutions Layer 24.0-release-v1.0.0 (rity-vis)
# codename: kirkstone
# machine: vab-5000
# overlays: ['gpu-mali.dtbo', 'apusys.dtbo', 'video.dtbo', 'camera-rn6752-csi0-std.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...
### ボード上のSW1を押しながら電源アダプタを外して付け直す
# 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
# OKAY [ 1.509s]
# Finished. Total time: 1.512s
# ...
# Writing 'mmc0' OKAY [ 10.233s]
# Sending sparse 'mmc0' 15/15 (16576 KB) OKAY [ 0.435s]
# Writing 'mmc0' OKAY [ 0.675s]
# Finished. Total time: 239.111s
# flashing mmc0boot0=bl2.img
# Sending 'mmc0boot0' (273 KB) OKAY [ 0.009s]
# Writing 'mmc0boot0' OKAY [ 0.024s]
# Finished. Total time: 0.039s
# ERROR:aiot:Could not detect U-Boot env size, assume 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
インストールが完了すると、以下のGUIが表示されます。
以上で、VAB-5000を利用する準備が整いました!
これから色々と実装しまして、また情報をお届けしたいと思います
お疲れさまでした!