システム制御・ストレージ・USB
1.ウォッチドッグ (Watchdog)
1.1. ウォッチドッグリソースの確認
ls コマンドを使用することで、システムにいくつのウォッチドッグノードが存在するかを確認できます。
ls /dev/watchdog\*
ウォッチドッグリソースの確認
1.2. クイックスタート
1.2.1 開発環境の準備
PC側のUbuntuシステムで run スクリプトを実行し、EASY-EAIコンパイル環境に入ります。詳細は以下の通りです。
cd ~/develop_environment./run.sh 22041.2.2 ソースコードのダウンロードとサンプルのコンパイル
まず、仮想マシンのバックグラウンドターミナルで以下のコマンドを実行し、周辺機器サンプルソースコードの管理ディレクトリを作成します:
cd /optmkdir -p EASY-EAI-Nano-TB/demoサンプルプログラムをダウンロードします:
例えば、サンプルプログラムを「PC\D:」(指定はありません。ユーザーの任意の場所で構いません)にダウンロードします。
その後、ダウンロードしたサンプルを仮想マシンのファイルシステムにコピーします。手順は下図をご参照ください。

ソースコードのダウンロードとサンプルのコンパイル
最後に、該当するサンプルのディレクトリに移動してコンパイル操作を実行します。具体的なコマンドは以下の通りです:
cd EASY-EAI-Nano-TB/demo/05_watchDog./build.sh💡 注意 :依存ライブラリはボード上に配置されているため、クロスコンパイル中は/mnt のマウントを維持する必要があります。

ソースコードのダウンロードとサンプルのコンパイル
1.2.3 サンプルの実行
シリアルポートデバッグまたはSSH経由でボードのバックグラウンドにアクセスし、サンプルが配置されているディレクトリに移動します:
cd /userdataサンプルを実行するコマンドは以下の通りです:
./05_watchDog1.2.4 実行結果
実行結果は以下の通りです【注意!!デモを実行するとシステムが再起動します。慎重に操作してください】。

実行結果
再起動させたくない場合は、途中でキーボードの【Ctrl+C】を押してウォッチドッグプロセスを停止させることができます。
1.3. C言語での使用例
ウォッチドッグのC言語での使用例です。コードのパスは 05_watchDog/test-watchDog/main.c です。コーディングの参考にしてください。以下のコードは、ウォッチドッグタイマーの基本的な操作フローを示しています:
void ctrl_c_handler(){ int ret = wdt_close(); if(ret < 0){ printf("\nウォッチドッグの無効化に失敗しました!!!\n"); }else if(ret == 0){ printf("\nウォッチドッグの無効化に成功しました!!!\n"); } exit(0);}
int main(){ int timeout = 30; int ret = wdt_open(timeout); if(ret < 0){ printf("ウォッチドッグの有効化に失敗しました!!!\n"); return -1; } printf("ウォッチドッグの有効化に成功しました。実際のタイムアウト時間:%d(秒)\n", ret);
// Ctrl+Cシグナルをキャッチ signal(SIGINT, ctrl_c_handler);
int feedTimes = 0; while (1) { sleep(3);
if(5 < feedTimes){ printf("これ以上犬に餌を与えません(ウォッチドッグのクリアを停止)\n"); continue; }
if(0 == wdt_feeddog()){ feedTimes++; printf("犬への餌やり(ウォッチドッグのクリア)に成功しました!!!\n"); }else{ printf("犬への餌やり(ウォッチドッグのクリア)に失敗しました!!!\n"); } } return 0;}2.TFカードスロット
2.1ハードウェア接続の紹介
💡 注意 :TFカードはホットスワップ(通電中の抜き差し)に対応していますが、ベースボードに保護用ケースを取り付けていない場合、ベースボード上の部品に触れやすく、さらにボード付近の金属部品によってショートを引き起こす可能性が高くなります。そのため、周辺機器の抜き差しを行う際は、電源が完全に切断されていることを確認することを強くお勧めします。
2.2 TFカードのマウント
2.2.1 TFカードノードの確認
TFカードを挿入すると、/dev/ディレクトリにmmcblk1というデバイスノードが現れます。以下のコマンドで確認できます。
ls /dev/mmcblk\*
TFカードノードの確認
mountコマンドを実行すると、マウント状態を確認できます。
mount
TFカードノードの確認
2.2.2 TFカードの自動マウント/アンマウント
現在の開発ボードは、/usr/lib/udev/rules.d/61-removable-disk-auto-mount.rulesルールファイルを使用して、TFカードの自動マウントとアンマウントを管理できます。デフォルトのマウント先は/mnt/sdcardディレクトリです。

TFカードの自動マウント/アンマウント
2.2.3 TFカードの手動マウント
以下のコマンドを実行すると、TFカードを/mnt/sdcardにマウントできます。
sudo mount /dev/mmcblk1 /mnt/sdcardTFカードの【パーティション1】を/mnt/sdcardにマウントすることもできます。
sudo mount /dev/mmcblk1p1 /mnt/sdcardマウントに成功した後、/mnt/sdcardディレクトリに入ると、TFカードの現在の保存内容を確認できます。

TFカードの手動マウント
2.2.4 TFカードの手動アンマウント
TFカードをアンマウントする前に、TFカードのマウント先ディレクトリ(例:/mnt/sdcard)から抜ける必要があります。そうしないと、アンマウントコマンドを実行できません。
cd /umount /mnt/sdcard ##root権限が必要ですただし、61-removable-disk-auto-mount.rulesルールファイルが存在するため、手動でTFカードをアンマウントしても、ルールファイルによって再び/mnt/sdcardに自動的にマウントされてしまいます。そのため、本当にマウントしたくない場合は、ルールファイルを【削除】するか、【/usr/lib/udev/rules.d/から移動】させる必要があります。
3.USB
3.1. USBハードウェアリソースの概要
3.1.1 2つのUSBモード
EASY EAI Nano-TB開発ボードは、2種類のUSB動作モードをサポートしています:

2つのUSBモード
-
デフォルトモード: デフォルトでは、USBリソースはデバイスツリー内で【2系統のUSB2.0 HOST】および【ADB】として設定されています。
-
USB3.0モード: ユーザーが高速USB(産業用カメラなど)やデュアルギガビットLANポートを必要とする場合、カーネルソースコード(デバイスツリー)を変更することで、USBインターフェースを高速モードで動作させることができます。
USBリソースの原理ブロック図は以下の通りです。

2つのUSBモード
💡 注意 :USB3.0モードとして使用する場合、ADBケーブルは抜いておく必要があります。そうしないと、【すべての】USBインターフェースにクロストーク(干渉)を引き起こす可能性があります。
3.2. USB3.0モードへの切り替え
3.2.1 最新ファームウェアへのアップグレード
3.2.2 UbuntuシステムSDKソースコードのダウンロード
ubuntu_sdkソースコード(主にカーネルソースコード)のダウンロードについては、「組み込みローレベル開発/UbuntuシステムSDK/コンパイル説明」をご参照ください。
3.2.3 カーネルデバイスツリーの変更
そして、下図の説明に従って、【カーネルソースコード開発リポジトリ】内のデバイスツリーファイルを変更します:

カーネルデバイスツリーの変更
- EASY-EAI-Nano-TBデバイスツリーのエントリポイント: arch/arm64/boot/dts/rockchip/rv1126b-nano.dts
コンパイル後、新しい kernel.img が生成されます。
3.2.4 カーネルイメージの更新
前のステップで生成された kernel.img をファームウェアの rockdevディレクトリにコピーして元の kernel.img を置き換え、その後 kernel.imgを開発ボードに書き込みます。
3.3. 機能確認とパフォーマンス・テスト
-
テスト用USBメモリ: 【USB3.0】Kingston製USBメモリ
-
テストインターフェース:

機能確認とパフォーマンス・テスト
USBメモリのマウントコマンド:
sudo mkdir -p /mnt/usbsudo mount /dev/sda /mnt/usbUSBメモリテストコマンド - 読み込み:
dd if=/dev/sda of=/dev/null bs=1M count=1000 iflag=direct status=progressUSBメモリテストコマンド - 書き込み:
dd if=/dev/zero of=/mnt/usb/test.tmp bs=1M count=1000 oflag=direct status=progress3.3.1 USB2.0モード
機能確認:
lsusb -t通信速度480MのUSB2.0 HOSTが1系統のみ存在し、想定通りの結果です。
- 1GBサイズ — 読み込みテスト:(※元のドキュメント内の実行結果をご参照ください)

機能確認:
- 1GBサイズ — 書き込みテスト:(※元のドキュメント内の実行結果をご参照ください)

機能確認:
3.3.2 USB3.0モード
USB3.0モードではADBを使用できないため、ボードのバックグラウンドにアクセスするにはシリアルポートデバッグまたはSSHデバッグを使用します。
機能確認:
| lsusb -t |
|---|

機能確認:
通信速度480MのUSB2.0 HOSTが1系統、通信速度5000MのUSB3.0 HOSTが1系統存在し、想定通りの結果です。
- 1GBサイズ — 読み込みテスト(USBメモリの読み書き速度に依存):(※元のドキュメント内の実行結果をご参照ください)

機能確認写真
- 1GBサイズ — 書き込みテスト(USBメモリの読み書き速度に依存):(※元のドキュメント内の実行結果をご参照ください)

機能確認写真