Armadilloフォーラム

X1をUSBマスストレージとして扱う

tsato

2024年2月12日 17時31分

お世話になります。

Armadillo-X1にて、このROM領域の一部を外部USBメモリ(マスストレージ)として扱いたい案件があります。
(外部PCとX1をUSBで接続して、外部PCのファイルをX1のある領域に保存したい)
色々探してみた結果、以下のフォーラムに近い内容なのかと思い実施してみています。
https://armadillo.atmark-techno.com/forum/armadillo/4344
違いとしましては、環境はDebian10(ATDE8)でLinuxカーネルはLinux-4.9-at30を使用しています。
・1)のパッチの適用は下の回答にて適用済みとのことなので実施しませんでした。
・2)にてまずはそのままビルドを実施し、Warningが沢山でましたがビルドは完了しました。
・3)の"make ARCH=arm menuconfig"を実施し、USB Gadget Drivers (Mass Storage Gadget)の状態にしてSAVE(ファイル名はデフォルトの".config")しました。
・再度ビルドを実行しました。
・出来上がったuImageファイルを、説明書11.2.2章「Linuxカーネルイメージの書き換え」にて書換えてました。
https://armadillo.atmark-techno.com/blog/615/7523
・上記サイトの手順で"armadillo_x1-extboard-eva01-usbdevice.dtb"と"u-boot-x1-fec1-en-at23.bin"をダウンロードし、
DTBを書換え、ブートローダーをインストールしました。
・X1を保守モードで起動し、USBガジェット(シリアル通信/マスストレージ)を有効にして保存しました。
・上記手順「4.2. マスストレージの使用例」を試そうとしましたが、手順の

[armadillo ~]# echo /dev/shm/file > /sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/gadget/lun0/file

にて、lun0というディレクトリが存在しませんでした。
またdebian9の場合ですと、30b20000.usbというディレクトリが存在しませんでした。
上記lun0というディレクトリは新規作成するものなのでしょうか?(デフォルトでは権限の関係で作成できないようですが)

まず当初の目的を果たすにあたって、この手順で合ってますでしょうか。
拡張ボード側のUSBマスストレージとするにあたって、どこを参照するようにすれば良いのでしょうか。
Linuxカーネルコンフィギュレーションが正しくされているかの確認は、

zcat /proc/config.gz

にて
CONFIG_USB_MASS_STORAGE=y
が記述されていれば良い、という判断でよろしいでしょうか。(設定した筐体では上記のようになっていました)

よろしくお願いします。

コメント

at_makoto.sato

2024年2月13日 13時35分

佐藤です。

> ・3)の"make ARCH=arm menuconfig"を実施し、USB Gadget Drivers (Mass Storage Gadget)の状態にしてSAVE(ファイル名はデフォルトの".config")しました。
https://armadillo.atmark-techno.com/blog/615/7523
上記のサイトを参照されたのであれば、以下の設定にする必要があると思います。試してみてもらえますでしょうか。

Kernel Configuration
Device Drivers
  USB support
   USB Gadget Support
    <*>   USB Gadget Drivers
     (X) CDC Composite Device (ACM and mass storage)

tsato

2024年2月14日 11時50分

お世話になります。

ご回答ありがとうございます。
カーネルコンフィギュレーションをご指摘いただいた設定にして再転送したところ、lun0ディレクトリが出てきました。
マスストレージの設定にて以下の記述を実行して、X1のUSBストレージの中身を拡張基盤のUSBと接続したホストPCで確認することが出来ました。(接続後20~30秒程待つ必要有り)

echo /dev/sda1 > /sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/gadget/lun0/file

X1の電源を落とすと設定が消えてしまうため、/etc/rc.localなどで初期起動時に上記を実行するようにします。
備考欄にありましたとおり、やはりPCのディスクキャッシュが残るため情報は更新されないようです。
また、PC側で「取出し」操作をすると、次回USB差し込み時に自動認証しなくなるため、USBメモリはいきなり引っこ抜く必要がありそうです。(出来るだけ外さないような運用としたいです)

ありがとうございました。

ファイル ファイルの説明
pic.png