usb_gadget/g_multi/mass_storageで使用される.imgファイルをマウントして読み込む方法は?

usb_gadget/g_multi/mass_storageで使用される.imgファイルをマウントして読み込む方法は?

Pocket Beagleはdebian9.9を使用し、私のWindowsコンピュータに大容量記憶装置として表示されます。大容量記憶装置(ドライブと呼びます)で使用するバックアップファイルが見つかりました。このドライブをマウントし、そのドライブのファイルを自分のホームディレクトリにコピーしたいと思います。残念ながら、ドライブを取り付けたとき、MSDモードでドライブに入れたすべてが消えたことがわかりました。何が間違っている可能性がありますか?

Pocket Beagleは、イーサネット、シリアルポート、および大容量ストレージデバイス用に構成されたg_multiガジェットを使用します。ガジェットは起動時に次のスクリプトで設定されます/opt/scripts/boot/am335x_evm.sh。 g_multiガジェットは現在使用されていないので、設定する前にドライブにアクセスできる必要があると思います。私は次の実験を設定しました。

FAT32パーティションを作成し/root/data/backing_file、そのパーティションへのシンボリックリンクを指定しました/var/local/bb_usb_mass_storage.img

その後、ボードを接続してドライブにファイルを作成し、デバイスを再起動するとファイルが表示されます。ところで、 の先頭に次のコードを入れるとam335x_evm.shドライブが消去されるようです。

losetup -o 1048576 /dev/loop0 /root/data/backing_file
mkdosfs -F 32 /dev/loop0
mount -t vfat /dev/loop0 /mnt/loop
ls /mnt/loop >> /var/log/messages
umount /dev/loop0
losetup -d /dev/loop0

答え1

次のバックアップストアを作成する必要があることがわかりました。

losetup -o 1048576 /dev/loop0 /root/data/backing_file 
mkdosfs -F 32 /dev/loop0  # note: only do this once!
mount -t vfat /dev/loop0 /mnt/loop
#put something in /mnt/loop
umount /dev/loop0
losetup -d /dev/loop0

その後、次のようにバックアップストアにアクセスする必要があります。

losetup -o 1048576 /dev/loop0 /root/data/backing_file 
mount -t vfat /dev/loop0 /mnt/loop
# take something from /mnt/loop
umount /dev/loop0
losetup -d /dev/loop0

バックアップストレージ用のパーティションテーブルを作成し、そのパーティションにストレージとして別のパーティションを作成する必要があります。代わりにを呼び出してアクセスしようとするたびに「バケット」を削除しますmkdosfs

関連情報