Intereting Posts

Как я могу определить разделы Android-устройства из оболочки?

Я пытаюсь найти, какой раздел используется для чего, например /boot , /recovery , /system , из adb shell . Хотя это тривиально для разделенных в данный момент разделов (с использованием команд mount или df , см., Например, как идентифицировать имена разделов ), это кажется сложным, когда речь идет о разделах, которые в настоящее время не смонтированы (например, /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 (при этом просто отсутствует столбец «name» для /dev/block/mmcblk0 ).

Поэтому я в недоумении. Я знаю, что есть такие приложения, как DiskInfo, которые могут показывать эти детали, поэтому их необходимо хранить где-то на устройстве. Однако, модификация устройства (путем установки приложения) в моем случае не является вариантом.

Поэтому в основном мой вопрос сжигает:

Где на Android-устройстве хранится эта информация?

Если возможно, предпочтительным является общий подход. Если нет, то «try-and-err» нескольких подходов ( if..elseif..fi ) будет делать также.

Для фона: примером может быть «Я хочу получить только раздел /boot » (получить его изображение через dd ). Это не помогло бы сначала захватить все разделы и оценить позже – слишком много времени и слишком много данных;) – Это уже описывает намерение: написание небольшого инструмента для получения определенного образа диска.

Solutions Collecting From Web of "Как я могу определить разделы Android-устройства из оболочки?"

Поскольку для достижения этого не существует «уникального способа», я начал комбинировать идеи из всех, присоединяя их к скрипту (или, скорее, к «библиотеке скриптов»), чтобы они последовательно проверялись (до тех пор, пока не был достигнут хороший удар), и Интегрированный в мой «Инструмент документации устройства» под названием Adebar . Желающие могут найти его в файле lib/partitions.lib . Поскольку Adebar является открытым исходным кодом (GPLv2), не стесняйтесь копировать и использовать его – или развивать проект и улучшать его.

Полное решение немного длиннее, чтобы опубликовать здесь (как сказано, вы можете получить его в Github), но поскольку политика SE должна включать хотя бы общую часть сообщения, вот что она делает:

Различные источники предоставляют разные наборы деталей, поэтому сначала пробуют «лучшие», а затем повторяются, пока, по крайней мере, что-то не найдено.

  • /proc/dumchar_info дает самые подробные сведения, поэтому сначала это делается. Счастливые пользователи MTK получат это.
  • /proc/mtd – второй лучший источник.
  • /proc/emmc должен иметь почти столько же, сколько и предыдущие кандидаты, но немного сложно использовать
  • /dev/block/platform/*/by-name , перекрестно проверяется с помощью …
  • /proc/partitions перекрестно проверенные с помощью /proc/mounts дают нам, по крайней мере, разделы, смонтированные

Таким образом, скрипт, который я построил, в основном идет по источникам в этом порядке, останавливаясь, как только он смог собрать детали (например, если /proc/dumchar_info был найден, нет необходимости разбирать все остальные). Все они вставляются в отдельные функции, возвращая данные с использованием одной и той же структуры, можно даже объединить результаты из всех них.

Если кто-то может придумать лучшее решение, я, конечно, всегда открыт для этой идеи 🙂

Вы можете получить информацию о смонтированном разделе в Linux как https://stackoverflow.com/a/15639867/629118 , но я не думаю, что ядро ​​Linux не знает о разделе boot и recovery если /dev/block/platform/**/by-name не имеет его.

Таким образом, вы можете использовать текущую смонтированную информацию, чтобы угадать, какой раздел boot или recovery или что-то еще в / dev / block / *, который не монтируется.

Фактически, fastboot отправляет только имя раздела, который вы хотите прошивать. Это означает, что только загрузчик для fastboot знает информацию, я думаю.

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

Лучший способ – использовать команду DF в оболочке adb. В приведенном ниже блоге каждый из разделов четко определен. http://infobloggall.com/2015/10/15/android-file-system-structure-details-android-device-partition/