コンテンツにスキップ

EASY-EAI コンパイル環境のデプロイと更新

1.1 EASY-EAIコンパイル環境のデプロイ

1.1.1 EASY-EAIコンパイル環境の概要

EASY-EAIコンパイル環境は独自に開発したオンラインコンパイル環境(開発ボードオンライン)であり、PCとボード間のリアルタイムな同期マッピング関係を構築し、PCでのクロスコンパイル時に開発ボードの依存ライブラリをリアルタイムでリンクできるようにします。以下の利点があります:

(1)従来のクロスコンパイラにおいて、PCとボード間で依存ライブラリが不一致であることに起因する様々な開発上の問題を解決します。

(2)ユーザーが従来のクロスコンパイラの環境変数を設定・変更する手間を省きます。

(3)PCとボード間のリアルタイムマッピングにより、ファイル転送速度が大幅に向上し、大ファイルのリアルタイム転送のニーズに応えます。

(4)開発ボード上でのローカル開発もサポートしており、開発手法の柔軟性を高めます。

**💡 特記事項 ** :ユーザーの社内ネットワークがイントラネットとインターネットで分離されている(開発者の作業端末が外部インターネットにアクセスできない)環境の場合は、開発者コミュニティの『EASY-EAIコンパイル環境のオフラインインストール』をご参照ください。本ドキュメントの以降の内容をお読みいただく必要はありません。

1.1.2 PC側Ubuntuシステム環境の準備

EASY-EAIコンパイル環境はUbuntuのDockerコンテナ技術を使用するため、PC側のホストマシンがDockerコマンドやDockerイメージなどのDockerコンテナ技術関連のソフトウェアをサポートしている必要があります。

PC側のUbuntuシステムにて、以下のコマンドを使用してdockerコマンドをインストールします。これにより、UbuntuまたはUbuntuのrepoミラーサイトからdockerコマンドがダウンロードされ、インストールされます。

Terminal window
sudo apt-get remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -f /etc/apt/sources.list.d/docker.list*
sudo apt-get update -y && sudo apt-get install -y docker.io

ユーザーをdockerグループに追加します(これにより、非rootユーザー権限でDockerを管理できるようになります)。コマンドは以下の通りです:

Terminal window
sudo groupadd docker
sudo usermod -aG docker $USER

変更を成功させるには、PC側のUbuntuシステムを再起動して設定を反映させる必要があります。これにより、以降PC側のUbuntuでdockerコマンドを使用する際に「sudo」を省略できるようになります。 参考元: Docker 公式ドキュメント

1.1.3 EASY-EAIコンパイル環境の取得

リンク: develop_environment_20260310.tar.gz

EASY-EAIコンパイル環境ツールキット「develop_environment_20250802.tar.gz」(通常は最新版の使用を推奨します)をダウンロードします。その後、以下の図に示すように、PCのUbuntuシステムのホームディレクトリにコピーして配置します。

EASY-EAIコンパイル環境の取得

EASY-EAIコンパイル環境の取得

1.1.4 EASY-EAIコンパイル環境のインストール

EASY-EAIコンパイル環境ツールキットを解凍し、run.shスクリプトを実行します。これでEASY-EAIコンパイル環境のインストールとデプロイが行われます。

Terminal window
tar -xvf develop_environment_20250802.tar.gz
cd develop_environment/
./run.sh 2204

結果は以下になります

EASY-EAIコンパイル環境に入る

**💡 注意 ** : 初回に ./run.sh 2204 を実行する際は、PC側の仮想マシンがインターネットにアクセスできる必要があります。EASY-EAIコンパイル環境のインストールに成功した後は、インターネットに接続していなくても、./run.sh 2204 を実行することで繰り返しEASY-EAIコンパイル環境に入ることができます。

1.1.5 EASY-EAIコンパイル環境の利用 ファイルの同期

EASY-EAIコンパイル環境内で /opt を確認すると、仮想マシンUbuntuシステムのホームディレクトリになっています。ユーザーはここでソースコードの配置、編集、およびコンパイルを行うことができます。

EASY-EAIコンパイル環境の利用 ファイルの同期

EASY-EAIコンパイル環境の利用 ファイルの同期

依存ライブラリの同期: クロスコンパイルツールチェーンと依存ライブラリが分離されているため、開発ボード(依存ライブラリ)を個別にEASY-EAIコンパイル環境の /mnt にマウントする必要があります。操作は以下の通りです:

シリアル通信デバッグを通じて、開発ボードのIPアドレス(例:192.168.3.121)を確認します。EASY-EAIコンパイル環境からpingが通ることを確認した後、mountコマンドを使用して開発ボードを /mnt にマウントします:

Terminal window
sudo mount -t nfs -o nolock 192.168.3.121:/ /mnt

EASY-EAIコンパイル環境の利用 ファイルの同期

EASY-EAIコンパイル環境の利用 ファイルの同期

したがって、EASY-EAIコンパイル環境で /mnt 内のファイルを編集するだけで、自動的に開発ボードのrootfsルートディレクトリに同期されます。

なお、マウントコマンドを手動で入力するのが手間に感じる場合は、あらかじめ用意されているマウントスクリプト load_rootfs を使用することも可能です:

Terminal window
load_rootfs 192.168.3.119

EASY-EAIコンパイル環境の利用 ファイルの同期

EASY-EAIコンパイル環境の利用 ファイルの同期

さらに、サードパーティ製のライブラリをコンパイルする必要があり、かつそのサードパーティベンダーが当社の開発ボードを購入していない場合は、エクスポート済みの rootfs.img を /mnt にロードすることで、そのサードパーティ製ライブラリをコンパイルできます。

EASY-EAIコンパイル環境の利用 ファイルの同期

EASY-EAIコンパイル環境の利用 ファイルの同期

EASY-EAIコンパイル環境の終了については、exitコマンドを実行します。

Terminal window
exit

EASY-EAIコンパイル環境へ再度入る場合は、ホストマシンで再度 ./run.sh スクリプトを実行します。

Terminal window
./run.sh 2204

EASY-EAIコンパイル環境のその他の使用テクニックについては、『easyeai-compiler使用技巧(使用テクニック)』の記事をお読みください。この記事では、【よくある異常事態の処理】、【サードパーティ製クローズドライブラリのコンパイル】、および【複数人同時デバッグ】などの使用テクニックについて説明しています。

1.2 開発環境のアップデート

1.2.1 EASY-EAIコンパイル環境のアップデート

EASY-EAIコンパイル環境をアップデートする場合は、最新の develop_environment_xxx.tar.gz をダウンロードして再解凍し、まずその中にある clear.sh 2204 を実行してから、./run.sh 2204 を実行してください。

1.2.2 ツールチェーン依存ライブラリのアップデート

コンパイルツールチェーンの依存ライブラリはハードウェアボード上にデプロイされているため、『ファームウェアの書き込みとアップデート』の手順に従ってボードのシステムファームウェアをアップデートするだけで、開発ツールチェーンのアップデートが完了します。

2 ADB・シリアル・SSHデバッグ

2.1 ADBデバッグ

ADBデバッグには、USB-ADBインタフェースを使用します。(WindowsにUSB-ADBドライバがない場合は、ドライバのインストールが必要です。

USB Type-Cケーブルを使用して、PCとEASY EAI Nano-TBを接続します。関連するハードウェアインタフェースは下図の通りです。

ADBデバッグ

ADBデバッグ

**💡 注意 ** : すでに【USB3.0モード】に切り替わっている場合、ADB機能は無効になります。この場合、ADBインタフェースは【ファームウェアの書き込み(フラッシュ)機能のみ】となります。

2.1.1 ADBデバイスの割り当て(マウント)

まずUbuntuシステムに入ります。ADBデバイスをUbuntu側に割り当てるには、「自動割り当て」と「手動割り当て」の2つのパターンがあります。

自動割り当て(パッシブ): 仮想マシンが起動している状態で、ADBケーブルが未接続(またはボードの電源がオフ)の場合。ケーブルを接続(またはボードの電源をオン)すると、自動的に下図のようなポップアップウィンドウが表示されます。

ADBデバイスの割り当て(マウント)

ADBデバイスの割り当て(マウント)

手動割り当て(アクティブ): 仮想マシンが起動していない時に、すでにADBがWindows側に制御されている場合。この場合は、下図に従って手動でADBデバイスを仮想マシン側にマウントする必要があります(この方法では、ADB環境が準備完了になるまで20秒ほどかかります)。

ADBデバイスの割り当て(マウント)

ADBデバイスの割り当て(マウント)

最後に、下図のようにADBデバイスが仮想マシンに正しく認識(マウント)されているか確認してください。

ADBデバイスの割り当て(マウント)

ADBデバイスの割り当て(マウント)

2.1.2 ADB経由でボードのコンソールに入る

ショートカットキー【Ctrl + Alt + T】でターミナルを開き、ターミナルに「adb shell」と入力します。下図のような画面が表示されれば、rootユーザーとして開発ボードのコンソール環境へのログインに成功しています。

Terminal window
adb shell

ADB経由でボードのコンソールに入る

ADB経由でボードのコンソールに入る

2.1.3 ADB環境からの退出

exit コマンドを実行することで、ボードの環境から抜けてUbuntuのローカル環境に戻ることができます。

Terminal window
exit

ADB環境からの退出j

ADB環境からの退出j

2.2 シリアルポートデバッグ

2.2.1 接続(配線)について

EASY EAI Nano-TBはシリアル通信を用いたデバッグをサポートしています。関連するハードウェアインターフェースは以下の図の通りです。

接続(配線)について

接続(配線)について

シリアルポートがWindowsに正常に認識されると、デバイスマネージャーから具体的なCOMポート番号(例:COM7)を確認できます。以下の図をご参照ください。

接続(配線)について

接続(配線)について

2.2.2 MobaXtermの使用手順

以下に、MobaXtermを使用してデバッグ用シリアルポート(COM7)を開く方法を説明します。 左上側のメニューから「Session」を選択し、接続タイプで「Serial」を選んだ後,シリアルポートをCOM7に選択し、speedを1.5Mbpsに設定します。

MobaXtermの使用手順

MobaXtermの使用手順

「OK」をクリックしてシリアルポートを開きます。以下の図をご参照ください。

MobaXtermの使用手順

MobaXtermの使用手順

開くと、EASY EAI Nano-TBの電源投入時からのすべてのログ情報が表示されるようになります。以下の図をご参照ください。

MobaXtermの使用手順

MobaXtermの使用手順

システムが完全に起動した後は、シェルコマンドを入力してデバッグを行うことができます。以下の通りです。

MobaXtermの使用手順

MobaXtermの使用手順

2.2.3 ユーザー名とパスワード

EASY EAI Nano-TB ユーザー名:nano

EASY EAI Nano-TB パスワード:123456

2.3 SSHデバッグ

2.3.1 接続(配線)について

EASY EAI Nano-TBは、MobaXtermなどのSSHリモートデスクトップログインを利用したデバッグが可能です。まず、LANケーブルを使用して、EASY EAI Nano-TBのギガビットイーサネットポートを、ルーターのLANポートに接続されたスイッチングハブ、またはルーターのLANポートに直接接続します。以下の図をご参照ください。

接続(配線)について

接続(配線)について

また、シリアルポートも接続します。

接続(配線)について

接続(配線)について

シリアル通信でEASY EAI Nano-TBにログインし、ip addr コマンドを実行して、eth0(有線LAN)およびwlan0(無線LAN)にルーターから動的に割り当てられたIPアドレスを確認します。

Terminal window
ip addr

確認の結果、割り当てられたIPアドレスはそれぞれ以下の通りです。

接続(配線)について

接続(配線)について

【eth0】— IPアドレス:192.168.3.86、サブネットマスク(24):255.255.255.0

【eth1】— LANケーブルが接続されていないため、IP情報なし

【wlan0】— IPアドレス接続されていないため、IP情報なし

これらのIPアドレスを利用して、PCとの間で相互にpingを実行します。pingが通る(通信が確認できる)状態になって初めて、SSHでのログインが可能になります。

2.3.2 MobaXtermの使用手順

以下に、MobaXtermを使用してSSH接続を行う方法を説明します。

左側のメニューから「Session」を選択し、接続タイプで「SSH」を選びます。ボードのいずれかのネットワークインターフェース(ここではeth0を例とします)のIPアドレスを入力し、最後に「OK」をクリックします。以下の図をご参照ください。

MobaXtermの使用手順

MobaXtermの使用手順

初回接続時、SSHクライアント(PuTTY)はSSHホストのIPアドレスなどの情報に基づいてSSHキー(ホストキー)を生成し、SSHホストと対応するIPアドレスを紐付けて記憶します。SSHホストのIPアドレスが変更されたり、別のSSHホストが以前記録されたIPアドレスを使用したりして、SSHホストとIPアドレスが一致しなくなった場合、接続できなくなることがあります。その際は、クライアント(PuTTY)側に保存されているSSHホストとIPアドレスの紐付け情報を手動でクリアする必要があります。具体的なクリア方法については、ご使用のSSHクライアントに合わせてご自身でお調べください。

「Accept(同意する)」をクリックすると、ログイン情報の入力が求められます。以下の図をご参照ください。

MobaXtermの使用手順

MobaXtermの使用手順

2.3.3 ユーザー名とパスワード

EASY EAI Nano-TB ユーザー名:nano

EASY EAI Nano-TB パスワード:123456

3 クロスコンパイル・ローカルコンパイル・自動起動

3.1 クロスコンパイル

3.1.1 メリットとデメリット

メリット:

x86アーキテクチャのCPUを使用してコンパイルを行うため、コンパイル速度が速いです。

ソースコードの編集が容易であり、開発環境としてVS CodeやQt Creatorなどの各種IDEをサポートしています。

デメリット:

コンパイル環境のインストールと構築(デプロイ)が必要です。

プログラムのデバッグや実行操作が、ローカルコンパイルと比較して少し直感的ではありません(手順が一段階増えます)。

3.1.2 EASY-EAIコンパイル環境の概要

EASY-EAIコンパイル環境は独自に開発したオンラインコンパイル環境(開発ボードオンライン)です。PC側とボード側でリアルタイムに同期するマッピング関係を構築しており、PC側でクロスコンパイルを行う際に、開発ボード上の依存ライブラリとリアルタイムでリンクできることを保証します。

3.1.2.1 インストールおよびデプロイ方法

EASY-EAIコンパイル環境は、ツールチェーンを解凍してシステム環境変数を設定する従来のクロスコンパイル環境と比較して、デプロイがより簡単であり、様々な互換性の問題を回避できるという特徴があります。

3.1.2.2 組込みデバイス(開発ボード)のマウント

まず、run.sh スクリプトを実行してEASY-EAIコンパイル環境に入ります。

コンパイル環境に入る

次に、シリアルデバッグを利用してデバイスのIPアドレスを確認します。

IPアドレス確認

EASY-EAIコンパイル環境に戻り、開発ボードに対してpingを実行して通信を確認します。pingが通った後、IPアドレスで、mount コマンドを使用して開発ボードのrootfs(ルートディレクトリ)をEASY-EAIコンパイル環境の /mnt にマウントします。コマンドは以下の通りです:

Terminal window
sudo mount -t nfs -o nolock 192.168.10.194:/ /mnt

組込みデバイス(開発ボード)のマウント

組込みデバイス(開発ボード)のマウント

EASY-EAIコンパイル環境内で実行可能プログラムをコンパイルし、それを /mnt 内にコピーすると、自動的に開発ボードのrootfs(ルートディレクトリ)に同期されます。

3.1.3 一般的なコンパイル手法のサンプル

リンク:

ここには4種類の一般的なコンパイル手法のサンプルがあります。

一般的なコンパイル手法のサンプル

一般的なコンパイル手法のサンプル

各サンプルには、以下のように build.sh スクリプトとソースコードファイルが含まれています。

一般的なコンパイル手法のサンプル

一般的なコンパイル手法のサンプル

任意のサンプルディレクトリに入り、その中で ./build.sh を実行すると、hello ファイルが生成されます。

一般的なコンパイル手法のサンプル

一般的なコンパイル手法のサンプル

その後、EASY-EAIコンパイル環境上で、生成されたファイルを /mnt 以下の任意のサブディレクトリにコピーするだけです。

一般的なコンパイル手法のサンプル

一般的なコンパイル手法のサンプル

シリアルデバッグ経由でボードにログインし、先ほど hello ファイルをコピーしたディレクトリに移動します。以下の通りです:

Terminal window
cd /userdata/

ls コマンドを実行してディレクトリを確認すると、hello ファイルが既に同期されていることがわかります。

Terminal window
ls

一般的なコンパイル手法のサンプル

一般的なコンパイル手法のサンプル

hello ファイルを直接実行すると、実行結果を確認できます。

Terminal window
./hello

一般的なコンパイル手法のサンプル

一般的なコンパイル手法のサンプル

3.1.4 一般的なコンパイル手法の説明

マッピング関係からわかるように、EASY-EAIコンパイル環境の /mnt ディレクトリは開発ボードのルートディレクトリそのものです。クロスコンパイルツールの依存ライブラリはすべて開発ボード上にあるため、コンパイラに sysroot として /mnt を指定するだけで済みます。

GCC / G++:

Terminal window
aarch64-linux-gnu-gcc --sysroot=/mnt hello_world.c -o hello
aarch64-linux-gnu-g++ --sysroot=/mnt hello_world.cpp -o hello

CMAKE: CMakeList.txt ファイルに以下のインクルード文を記述するだけです。

Terminal window
include ($ENV{HOME}/configs/cross.cmake)

QMAKE: qmake ツールは開発ボードに直接インストールされているため、EASY-EAIコンパイル環境から直接 qmake を実行できます。コマンド例は以下の通りです。

Terminal window
/mnt/usr/bin/qmake xxxxxx.pro
make

3.2 ローカルコンパイル

3.2.1 メリットとデメリット

メリット:

開発ボードをそのままシングルボードコンピュータ(超小型PC)として使用でき、煩雑なアプリのデプロイ作業が不要になります。

デメリット:

rv1126BのCPUを使用してコンパイルを行うため、性能が相対的に低く、コンパイル速度が遅くなります。

ソースコードの編集が困難であり、ネイティブのviエディタしか使用できず、各種IDEを使用できません。

3.2.2 使用方法

シリアルデバッグやSSHなどの方法を利用して開発ボードのコンソール(バックグラウンド)にログインし、開発ボードをそのままUbuntuシステムがインストールされたPCとして使用します。

3.3 自動起動設定

3.3.1 概要

自動起動には4つのスクリプトファイルが関与しています。具体的には、rc.local、S99_userapp、start_app.sh、stop_app.sh です。

3.3.1.1 スクリプトの説明:

/etc/rc.local:このスクリプトは、Linuxファイルシステム起動後に最初に呼び出されるプログラムです。/etc/init.d/ 以下のすべてのスクリプトを、名前の順序に従って順次呼び出します。(例:A41はS41より先に呼び出され、S41はS99より先に呼び出されます)

/etc/init.d/S99_userapp:これはユーザーアプリケーションの起動/停止を管理するための専用スクリプトです。

/userdata/start_app.sh:ユーザーアプリケーションの起動ロジックは通常ここに記述されます。内容は自由に変更可能です。

/userdata/stop_app.sh:ユーザーアプリケーションの終了ロジックは通常ここに記述されます。内容は自由に変更可能です。

3.3.1.2 呼び出し順序と関係:

呼び出し順序と関係:

呼び出し順序と関係:

3.3.2 詳細説明:

3.3.2.1 /etc/init.d/S99_userapp

システムに組み込まれている起動スクリプトです。必要に応じてご自身で変更できます。

#!/bin/sh
if [ -e /userdata/apps/run.sh ];then
cd /userdata/apps && ./run.sh
fi

3.3.2.2 /userdata/stop_app.sh

#!/bin/sh
# Kill your app when shutdown system. For example:
# killall facialGate

3.3.3 操作ガイド:

3.3.3.1 注意事項の説明:

通常、ユーザーのプログラムは一度起動すると終了しないため、プログラム実行コマンドの末尾に「&」を追加してバックグラウンドで実行させる必要があります。これにより、他の起動スクリプトの実行がブロック(停止)されるのを防ぐことができます。

Terminal window
/qSolu-facialGate &

ユーザー独自の動的ライブラリ(共有ライブラリ)がユーザースペースにある場合は、起動スクリプト内に環境変数を追加することも可能です。

Terminal window
source /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/userdata/mylib/

自動起動させるプログラムが Qt プログラムであり、Qt の環境変数にカスタム設定が必要な場合は、さらに Qt の環境変数を設定することもできます。

Terminal window
export QT_QPA_FB_DRM=1
export QT_QPA_PLATFORM=linuxfb:rotation=0
#export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event5:rotate=180