我可以使块设备的缓冲区缓存无效吗?

我可以使块设备的缓冲区缓存无效吗?

我有一个系统,它是一个 USB 小工具。它使用 functionfs 通过 USB 公开其分区之一,以允许主机提供更新文件:

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告诉它它正在被删除并可能被写入其他地方(作为 USB 大容量存储,它自动成为可移动设备)。但在设备端,分区是本地(闪存)存储且不可移动。

我可以在设备上做些什么来让它知道存储可能是由大容量存储小工具功能写入的,并且它不能假设其缓存的块是正确的?

相关内容