コンテンツにスキップ

システム制御・ストレージ・USB

1.ウォッチドッグ (Watchdog)

1.1. ウォッチドッグリソースの確認

ls コマンドを使用することで、システムにいくつのウォッチドッグノードが存在するかを確認できます。

Terminal window
ls /dev/watchdog\*

ウォッチドッグリソースの確認

ウォッチドッグリソースの確認

1.2. クイックスタート

1.2.1 開発環境の準備

PC側のUbuntuシステムで run スクリプトを実行し、EASY-EAIコンパイル環境に入ります。詳細は以下の通りです。

Terminal window
cd ~/develop_environment
./run.sh 2204

1.2.2 ソースコードのダウンロードとサンプルのコンパイル

まず、仮想マシンのバックグラウンドターミナルで以下のコマンドを実行し、周辺機器サンプルソースコードの管理ディレクトリを作成します:

Terminal window
cd /opt
mkdir -p EASY-EAI-Nano-TB/demo

サンプルプログラムをダウンロードします:

例えば、サンプルプログラムを「PC\D:」(指定はありません。ユーザーの任意の場所で構いません)にダウンロードします。

その後、ダウンロードしたサンプルを仮想マシンのファイルシステムにコピーします。手順は下図をご参照ください。

ソースコードのダウンロードとサンプルのコンパイル

ソースコードのダウンロードとサンプルのコンパイル

最後に、該当するサンプルのディレクトリに移動してコンパイル操作を実行します。具体的なコマンドは以下の通りです:

Terminal window
cd EASY-EAI-Nano-TB/demo/05_watchDog
./build.sh

💡 注意 :依存ライブラリはボード上に配置されているため、クロスコンパイル中は/mnt のマウントを維持する必要があります。

ソースコードのダウンロードとサンプルのコンパイル

ソースコードのダウンロードとサンプルのコンパイル

1.2.3 サンプルの実行

シリアルポートデバッグまたはSSH経由でボードのバックグラウンドにアクセスし、サンプルが配置されているディレクトリに移動します:

Terminal window
cd /userdata

サンプルを実行するコマンドは以下の通りです:

Terminal window
./05_watchDog

1.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というデバイスノードが現れます。以下のコマンドで確認できます。

Terminal window
ls /dev/mmcblk\*

TFカードノードの確認

TFカードノードの確認

mountコマンドを実行すると、マウント状態を確認できます。

Terminal window
mount

TFカードノードの確認

TFカードノードの確認

2.2.2 TFカードの自動マウント/アンマウント

現在の開発ボードは、/usr/lib/udev/rules.d/61-removable-disk-auto-mount.rulesルールファイルを使用して、TFカードの自動マウントとアンマウントを管理できます。デフォルトのマウント先は/mnt/sdcardディレクトリです。

TFカードの自動マウント/アンマウント

TFカードの自動マウント/アンマウント

2.2.3 TFカードの手動マウント

以下のコマンドを実行すると、TFカードを/mnt/sdcardにマウントできます。

Terminal window
sudo mount /dev/mmcblk1 /mnt/sdcard

TFカードの【パーティション1】を/mnt/sdcardにマウントすることもできます。

Terminal window
sudo mount /dev/mmcblk1p1 /mnt/sdcard

マウントに成功した後、/mnt/sdcardディレクトリに入ると、TFカードの現在の保存内容を確認できます。

TFカードの手動マウント

TFカードの手動マウント

2.2.4 TFカードの手動アンマウント

TFカードをアンマウントする前に、TFカードのマウント先ディレクトリ(例:/mnt/sdcard)から抜ける必要があります。そうしないと、アンマウントコマンドを実行できません。

Terminal window
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モード

2つのUSBモード

  • デフォルトモード: デフォルトでは、USBリソースはデバイスツリー内で【2系統のUSB2.0 HOST】および【ADB】として設定されています。

  • USB3.0モード: ユーザーが高速USB(産業用カメラなど)やデュアルギガビットLANポートを必要とする場合、カーネルソースコード(デバイスツリー)を変更することで、USBインターフェースを高速モードで動作させることができます。

USBリソースの原理ブロック図は以下の通りです。

2つの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メモリのマウントコマンド:

Terminal window
sudo mkdir -p /mnt/usb
sudo mount /dev/sda /mnt/usb

USBメモリテストコマンド - 読み込み:

Terminal window
dd if=/dev/sda of=/dev/null bs=1M count=1000 iflag=direct status=progress

USBメモリテストコマンド - 書き込み:

Terminal window
dd if=/dev/zero of=/mnt/usb/test.tmp bs=1M count=1000 oflag=direct status=progress

3.3.1 USB2.0モード

機能確認:

Terminal window
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メモリの読み書き速度に依存):(※元のドキュメント内の実行結果をご参照ください)

機能確認:

機能確認写真