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
が記述されていれば良い、という判断でよろしいでしょうか。(設定した筐体では上記のようになっていました)

よろしくお願いします。

コメント

佐藤です。

> ・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)

お世話になります。

ご回答ありがとうございます。
カーネルコンフィギュレーションをご指摘いただいた設定にして再転送したところ、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

お世話になります。

すみません上記件について、ホストPCのOSはWindows10では認識しましたが、別のLinuxの端末では認識してくれませんでした。
このLinux端末は一般的なディストリビューションではないですが、普通のUSBメモリを挿し込むと自動で認識してくれます。
試しにArmadillo-X1のUSBホスト(CON2)にこの拡張基盤のUSBを挿し込んでみたところ、/devディレクトリ内には"sda"のデバイスが作成され(sda1は無い)、このsdaデバイスにmount出来てしまいました。
(また、デバイスファイルが途中で消えたりUSB延長ケーブルを使うと認識しなかったりと、挙動も不安定です)
通常のUSBメモリ挿入時は、"sda"とパーティションの"sda1"といったデバイスファイルになるはずですが、この辺が何か自動認識しない原因でしょうか。
(Windowsドライバはこの辺を良いようにmountしてくれている?)

よろしくお願いします。

佐藤です。

> お世話になります。
>
> すみません上記件について、ホストPCのOSはWindows10では認識しましたが、別のLinuxの端末では認識してくれませんでした。
> このLinux端末は一般的なディストリビューションではないですが、普通のUSBメモリを挿し込むと自動で認識してくれます。
> 試しにArmadillo-X1のUSBホスト(CON2)にこの拡張基盤のUSBを挿し込んでみたところ、/devディレクトリ内には"sda"のデバイスが作成され(sda1は無い)、このsdaデバイスにmount出来てしまいました。
> (また、デバイスファイルが途中で消えたりUSB延長ケーブルを使うと認識しなかったりと、挙動も不安定です)
> 通常のUSBメモリ挿入時は、"sda"とパーティションの"sda1"といったデバイスファイルになるはずですが、この辺が何か自動認識しない原因でしょうか。
> (Windowsドライバはこの辺を良いようにmountしてくれている?)
>
> よろしくお願いします。
自動マウントのための設定が必要ではないでしょうか。ご使用になられているLinuxディストリビューションで設定してみてください。
参考までに、例えばX1の場合は以下のようなものがあります。
https://armadillo.atmark-techno.com/blog/10899/11316

お世話になります。

ご返答ありがとうございます。
ホストコンピュータがX1の場合は、上記リンクの手順で自動マウントは実現できましたが、
今回対象のLinux端末ホストコンピュータは外から設定をいじることが出来ない端末となっております。(専用のGUIのみ操作可でターミナルは操作できない)
ただ、市販のUSBメモリは自動でマウントして中身が確認できる、といったホストとなっています。

よろしくお願いします。