USBデバイスであるシステムがあります。ホストが更新ファイルを提供できるように、functionfsを使用してUSB経由でパーティションの1つを公開します。
set -e
CONFIGFS_ROOT=/dev/gadget
CONFIGFS_DEV=$CONFIGFS_ROOT/usb_gadget/device
mkdir -p $CONFIGFS_ROOT
mount -t configfs none $CONFIGFS_ROOT
mkdir $CONFIGFS_DEV
cd $CONFIGFS_DEV
### (device-level strings etc. omitted for brevity) ###
# Set up a config
mkdir configs/mass_storage.1
mkdir configs/mass_storage.1/strings/0x409
echo "Mass-storage configuration" >configs/mass_storage.1/strings/0x409/configuration
echo 100 >configs/mass_storage.1/MaxPower
# Add the function and connect our partition
mkdir functions/mass_storage.usb
readlink -e "/dev/disk/by-label/data" >functions/mass_storage.usb/lun.0/file
# Associate the function with the first config
ln -s functions/mass_storage.usb configs/mass_storage.1
これは、ホストが最初にマウントしてデータを書き込むときに(VFATファイルシステムを使用して)うまく機能します。その後、デバイスのどこかにマウントして使用できます。
しかし、私たちがレスポンスを作成し、ホストが私たちにもっとアップデートを送ると、データの破損が表示されます。これは、USB 大容量ストレージインタフェースがブロックキャッシュ階層の下のパーティションを変更することによって発生すると推測されます。
私は両側に同時にマウントされたファイルシステムがないeject
ことを確認しました。 。ただし、デバイス側では、パーティションはローカル(フラッシュ)ストレージであるため、削除できません。
ストレージが大容量ストレージガジェット機能によって記録されている可能性があり、キャッシュされたブロックが正しいと仮定できないことをデバイスが認識できるようにする方法はありますか?