Благодаря ответу и комментарию Гравити мой вопрос может быть обновлен.
Моя конечная цель — получить подробную информацию о разделах (включая начальный и конечный адреса каждого раздела на моем телефоне Android) с помощью fdisk или parted.
Как «установить» команду parted на мой Android-смартфон?
Могу ли я использовать fdisk в системе Linux или Cygwin в системе Windows? Зная, что fdisk, предоставленный BusyBox, не может обрабатывать GPT. (Если это так, возможно, я мог бы опубликовать еще один вопрос.)
Я установил Busybox на свой смартфон и хочу получить подробную информацию о разделах, включая начальный и конечный адреса каждого раздела на моем телефоне Android.
Я могу использовать команду fdisk, но, возможно, из-за того, что диск моего телефона GPT, а не MBR, команда «fdisk -l» не выводит.
Поэтому я хочу использовать команду «parted». Но на моем смартфоне его нет. Как я могу это получить?
Я посетил веб-сайт GNU "parted" . Но то, что я могу скачать, это только исходный код. Нужно ли мне это компилировать? Если да, то как мне это скомпилировать? Могу ли я скомпилировать исходный код с помощью MinGW на ПК с системой Windows?
Если я получу "разделенный" файл, куда мне его поместить, чтобы он заработал? Это в /system/bin?
Я еще не нашел пригодный для использования файл "parted". Это из-за моего плохого навыка Google или файл должен быть скомпилирован по-разному для разных устройств?
Надеюсь найти официальную версию файла "parted".
Я знаю, что мое хранилище — GPT, потому что fdisk -l /dev/block/mmcblk0
говорит мне. И я читал в сети, что fdisk не может обрабатывать GPT, а parted может. Я просто не уверен, почему fdisk -l
ничего не показывает.
fdisk -l /dev/block/mmcblk0
Disk /dev/block/mmcblk0: 15 GB, 15634268160 bytes, 30535680 sectors
1908480 cylinders, 1 heads, 16 sectors/track
Units: cylinders of 16 * 512 = 8192 bytes
Device Boot StartCHS EndCHS StartLBA EndLBA Sectors Size Id Type
/dev/block/mmcblk0p1 0,0,0 0,0,0 1 30535679 30535679 14.5G ee EFI GPT
Partition 1 does not end on cylinder boundary
Примечание. Это применимо к Qualcomm SoC с eMMC (блочное устройство, доступное через FTL). Не тестировалось на MTK или других чипсетах (пути могут отличаться) или устройствах с необработанной памятью NAND/MTD.
Как «установить» команду parted на мой Android-смартфон?
Официального способа нет, поэтому parted
он не является частью AOSP. Android не хочет, чтобы вы играли с его таблицей разделов. Использование статического бинарного файла — лучший вариант, чтобы избежать сложностей с динамическим компоновщиком/загрузчиком, libc и т. д.
aarch64
Статический двоичный файл parted для архитектуры (ARM-v8) и armel
(ARM-v5) можно получить из this link
. Я скомпилировал их на ArchLinuxARM (работает на моем Redmi Note 4) и на Ubuntu (ПК) с помощью gcc
(кросс-)компилятора, glibc
и они отлично работают. Сборка с помощью Bionic libc
NDK (чтобы сделать его полностью Android-подобным) требует много изменений в исходном коде, потому что вызовы функций (libc), а также некоторые системные вызовы (ядро) различаются на Android и Linux. devmapper
и NLS
отключены, так как первый не используется напрямую, второй не поддерживается на Android.
Могу ли я использовать fdisk в системе Linux или Cynwin в системе Windows? Зная, что fdisk, предоставленный BusyBox, не может обрабатывать GPT. (Если это так, возможно, я мог бы опубликовать еще один вопрос.)
Вы также можете использовать fdisk
на Android, но fdisk
это традиционный инструмент для управления таблицами разделов MBR, хотя более новые версии также поддерживают GPT. fdisk
также показывает некоторую информацию о GPT, потому что GPT содержит защитную MBR (первый сектор диска или eMMC), которая содержит информацию о разделах. Кроме того, первый раздел (modem)
на большинстве устройств Android, содержащий прошивку для процессора основной полосы частот (BP) FAT16
, более совместим с файлами fdisk
. Для других разделов fdisk
может вести себя странно или может произойти сбой.
Busybox fdisk
очень минимален, как и другие апплеты, и я думаю, что он уже давно не обновлялся. Вместо этого GPT fdisk (gdisk)
это отличный инструмент для таблиц разделов GUID, и в некоторых аспектах он лучше, чем parted
.
gdisk
, fdisk
и mkfs.ext4
(mke2fs) статические двоичные файлы также доступны по вышеупомянутой ссылке . Вы можете поместить их в любом месте вашего PATH; /system/bin
, /system/xbin
, /vendor/bin
, /sbin
(volatile) или даже где-то на /data
или sdcard
.
Теперь просто выполните:
~# parted /dev/block/mmcblk0
(parted) p free
~# gdisk -l /dev/block/mmcblk0
Обратите внимание , что fdisk -l
и parted -l
не будет отображаться полная информация (или вообще не отображаться) об Android GPT, потому что ядро Linux заполняет блочные устройства непосредственно под, /dev
в то время как Android использует /dev/block
путь. Нам нужно изменить код перед компиляцией, чтобы он работал идеально. fdisk -l
показывает loop
устройства, потому что они имеют одинаковую номенклатуру. blkid
также показывает информацию о разделе, потому что он читает из /proc/partitions
и /sys/dev/block/
.
С мощью приходит ответственность, а инструменты Linux сильны. Действительно. Смещение даже одного байта в границах разделов может привести к серьезным проблемам, худшим из которых будет невозможность использовать прошивальщики заводских прошивок. Так что будь осторожен!
Дальнейшее чтение:
Я могу использовать команду fdisk, но, возможно, из-за того, что диск моего телефона GPT, а не MBR, команда «fdisk -l» не выводит.
Это не MBR и не GPT. Смартфоны обычно используют разделы MTD. Эти разделы настраиваются в дереве устройств, поэтому изменить их значительно сложнее, чем просто запустить редактор разделов.
Вы можете получить информацию о разделах, запустив cat /proc/mtd
.
возможно, потому что диск моего телефона - GPT, а не MBR, команда «fdisk -l» не выводит.
Или, может быть, у него нет прав на чтение таблицы разделов.
Хотя, насколько я знаю, многие телефоны на Android используют не программные разделы, а нечто более сложное: они аппаратно разбивают флэш-память . Так что даже не расставание поможет вам в этом случае.
Этот ответ на Android.SE может быть актуальным: https://android.stackexchange.com/questions/5232/how-can-i-view-the-android-internal-partition-table
Что касается вашего fdisk
примера вывода. Он ничего не показывает — он показывает один раздел!
Но это неправильный вид; реальная проблема заключается в том, что ваша версия fdisk не поддерживает GPT и показывает вам содержимое таблицы разделов «защитной MBR».
Все GPT-диски имеют фальшивую MBR, содержащую один массивный раздел, занимающий весь диск; его цель - предотвратить случайное уничтожение данных старыми инструментами только для MBR. Если вы видите это в выводе fdisk, это означает, что ваша версия fdisk поддерживает только MBR.
В пакет fdisk
util-linux добавлена поддержка GPT в версии 2.23. Однако Busybox fdisk
не имеет.
Тем не менее, остальное довольно общее и применимо ко всем программам, а не только к parted
.
Я посетил веб-сайт GNU "parted". Но то, что я могу скачать, это только исходный код. Нужно ли мне это компилировать?
Да.
Если да, то как мне это скомпилировать? Могу ли я скомпилировать исходный код с помощью MinGW на ПК с системой Windows?
Возможно нет. MinGW ориентирован на создание сборок Windows x86/x64 — вам нужен кросс-компилятор, который будет предоставлять бинарные файлы Linux и компилировать для другой архитектуры процессора (ваш смартфон использует какой-то вариант ARM).
У Cygwin может быть совместимая версия gcc, но компиляция в Linux может быть намного проще.
Надеюсь найти официальную версию файла "parted".
Разработчики Linux редко предоставляют официальные скомпилированные версии — это обычно остается на усмотрение дистрибутивов.
Вы можете скачать официальные пакеты различных дистрибутивов, таких как Debian (Raspbian) или Arch Linux ARM, и извлечь нужные файлы вручную.
Будьте осторожны, чтобы выбрать правильную архитектуру процессора вашего телефона.
Во-вторых, обратите внимание, что вам понадобится нечто большее , чем просто «разделенный» файл: большая часть основных функций фактически находится в библиотеке (DLL-файле) с именем libparted.so
.
fdisk -l
буквально ничего не показывает, в то время как текст справки говорит, -l
что покажет список моих разделов. fdisk -l /dev/block/mmcblk0
показывает то, что вы можете видеть. Я очень ценю ваш ответ, но моя проблема все еще не решена. Я хочу выбрать простой способ использования parted на моем телефоне Android. Я скачал по последней предоставленной вами ссылке, и я полагаю, что armv7h совместим с архитектурой armv8l. Но как мне его «установить»? Я даже не знаю, какое ключевое слово мне следует гуглить./system/bin
и найти 203-килобайтный файл с именем «libparted.so.2.0.1» (после переименования его в «libparted.so») и поместить его. где-то (может быть, мне нужно искать *.so). В том, что все? Есть документ подтверждающий? Я действительно понятия не имею прямо сейчас.
пользователь1686
fdisk
версия слишком старая и не поддерживает GPT. (Это util-linux fdisk или busybox fdisk?) Он показывает раздел «защитная MBR».хухиха
пользователь1686
fdisk
, точно так же, как у него есть, например, собственная версияls
и собственная версияsh
, полностью отличные от традиционного Linuxfdisk
/ls
/sh
/ и т. д.