如何从shell中识别Android设备的分区?

我正在尝试从adb shellfind哪个分区用于什么,例如/boot/recovery/system 。 虽然这对于当前安装的分区来说是微不足道的(使用mountdf命令,请参阅例如如何识别分区的名称 ),但对于当前未安装的分区(例如/recovery以“用户模式启动时的/recovery ),这似乎很棘手“)。

XDA上有一个教程 ,但它对我尝试过的任何设备都没有用:

  • cat /proc/mtd :这是空的或不存在的
  • cat /proc/emmc :这是空的或不存在的
  • cat /proc/dumchar_info :不存在(MTK / MediaTek)
  • ls -al /dev/block/platform/*/by-name :要么不存在,要么没有想要的详细信息
  • parted刚出现Error: Can't have a partition outside the disk!/dev/block/mmcblk1 (虽然只是缺少/dev/block/mmcblk0的“name”列)。

所以我很茫然。 我知道像DiskInfo这样的应用程序可以显示这些细节,因此必须存储在设备上的某个位置。 但是,在我的情况下,修改设备(通过安装应用程序)不是一个选项。

所以基本上我的问题归结为:

Android设备上的这些信息存储在哪里?

如果可能,优选通用方法。 如果没有,几种方法( if..elseif..fi )的“尝试和错误”也可以。

对于后台:一个示例用法是“我只想检索/boot分区”(通过dd获取它的图像)。 首先获取所有分区并稍后进行评估是不行的 – 太耗费时间,并且产生了太多数据;) – 这已经描述了这个意图:编写一个小工具来检索特定的磁盘映像。

由于似乎没有“独特的方式”来实现这一点,我开始结合来自allover的想法,将它们加入到一个脚本(或者更确切地说是一个“脚本库”)中,以便顺序检查它们(直到获得好评),并且将其集成到名为Adebar的 “设备文档工具”中。 有兴趣的人可以在lib/partitions.lib文件中find它。 由于Adebar是开源的(GPLv2),可以随意复制和使用它 – 或者分叉项目并改进它。

完整的解决方案有点长,可以在这里发布(如上所述,你可以在Github上获取它),但由于SE策略至少包括post中的一般部分,这里是它的作用:

不同的来源提供不同的细节集,因此它首先尝试“最好的” – 然后递归,直到find至少一些东西。

  • /proc/dumchar_info提供了最多的细节,所以首先尝试这个。 快乐的MTK用户会得到这个。
  • /proc/mtd是第二好的来源。
  • /proc/emmc应该与之前的候选人几乎一样多,但使用起来有点棘手
  • /dev/block/platform/*/by-name ,与…交叉检查
  • /proc/mounts交叉检查/proc/partitions给我们至少安装了分区

因此,我构建的脚本基本上按此顺序/proc/dumchar_info源代码,一旦能够收集详细信息就停止(例如,如果find/proc/dumchar_info ,则无需解析所有其他内容)。 所有这些都放入了单独的函数,使用完全相同的结构返回数据,甚至可以合并所有这些结果。

如果有人能想出更好的解决方案,我当然总是愿意接受这个想法:)

您可以在Linux上获取挂载分区的信息,如https://stackoverflow.com/a/15639867/629118 ,但我不认为如果/dev/block/platform/**/by-name Linux内核不知道bootrecovery分区/dev/block/platform/**/by-name没有它。

因此,您可以使用当前安装的信息来猜测哪个分区是bootrecovery或/ dev / block / *中未安装的其他内容。

实际上,fastboot只发送要闪存的分区的名称。 这意味着只有fastboot的bootloader知道这些信息。

https://github.com/android/platform_system_core/blob/8163104b3feb575a321b194a70ecb9873a70b29d/fastboot/fastboot_protocol.txt