无法从 Android 设备上的 FAT32 USB 驱动器正确读取引导扇区

Can't properly read the boot sector from a FAT32 USB drive on Android device

我试图从 Android 设备上的 FAT32 驱动器读取引导扇区,但我得到的数据与我预期的完全不同。

这是我在 Android 设备上的读取端点上使用 bulkTransfer 接收到的输出。

33C08ED0BC007C8EC08ED8BE007CBF00
06B90002FCF3A450681C06CBFBB90400
BDBE07807E00007C0B0F850E0183C510
...
656D000000637B9A5BE2B3D70000800F
30000BFEFFF4E0030000205CF8000000
00000000000000000000000000000000
00000000000000000000000000000000
000000000000000000000000000055AA

这是在我的 PC 上使用十六进制查看器转储的引导扇区。

EB58904D53444F53352E300002081004
0200000000F800003F00FF00E0030000
205CF800F83D00000000000002000000
...
0000000000000000000000000D0A5573
75E4206479736B69206C756220696E6E
79206E6F986E696BFF0D0A4288A56420
6479736B75FF0D0A5A72657374617274
756A2C206E616369736B616AA563206B
6C617769737A0D0A00ACC9D6000055AA

我在 Android 上收到的数据在接近尾声时包含以下消息:"Invalid partition table.Error loading operating system.Missing operating system"。

谁能告诉我这里出了什么问题?在读取引导扇区之前我应该​​执行什么操作?

目前我的代码流程如下:

  1. 找到所需的 USB 设备
  2. 获取与USB设备通信的权限
  3. 打开连接做设备
  4. 执行"Test Unit Ready"命令直到响应成功
  5. 执行"Read Capacity"命令 - 这个returns正确的结果
  6. 执行"Read 10"命令读取前512个字节-这个returns不正确的数据

如有任何建议,我将不胜感激

哪个十六进制查看器?

win 上的非管理员用户无法访问物理设备上的分区 table, 所以你通常只得到 partition 的第一个扇区。您可以检查一下,它会在偏移量 0x52 处包含 FAT32 字符串。要读取 真实 分区 table,您需要使用管理员权限访问物理设备。

在 android 上,您读取分区 table 本身,因为您在低级别访问物理 "disc"。