Sys devices virtual android usb android0

Монтирование внутренней памяти Android как Mass Storage и восстановление данных

Восстановление данных, удаленных фото и видео, документов и других элементов из внутренней памяти современных Android телефонов и планшетов стало сложной задачей, поскольку внутреннее хранилище подключается по протоколу MTP, а не Mass Storage (как флешка) и привычные программы для восстановления данных не могут найти и восстановить файлы в этом режиме.

Существующие популярные программы для восстановления данных на Android (см. Восстановление данных на Android) пробуют обойти это: в автоматическом режиме получить root-доступ (либо предоставляя сделать это пользователю), а затем — прямой доступ к хранилищу устройства, но это работает не для всех устройств.

Однако, существует способ вручную смонтировать (подключить) внутреннее хранилище Android как флешку (Mass Storage Device) с помощью команд ADB, а затем использовать любую программу восстановления данных, работающую с файловой системой ext4, использующуюся на этом хранилище, например, PhotoRec или R-Studio. О подключении внутреннего хранилища в режиме Mass Storage и последующем восстановлении данных из внутренней памяти Android, в том числе после сброса на заводские настройки (хард ресета) и пойдет речь в данной инструкции.

Предупреждение: описываемый способ не для начинающих. Если вы относите себя к ним, то какие-то пункты могут оказаться непонятными, а результат действий не обязательно будет ожидаемым (теоретически, можно сделать хуже). Используйте изложенное только под свою ответственность и с готовностью к тому, что что-то пойдёт не так, а ваше Android устройство больше не включится (но, если всё делать, понимая процесс и без ошибок, этого произойти не должно).

Подготовка к подключению внутреннего хранилища

Все действия, описанные ниже можно выполнить в Windows, Mac OS и Linux. В моем случае использовалась Windows 10 с установленной в ней подсистемой Windows для Linux и Ubuntu Shell из магазина приложений. Установка компонентов Linux не обязательна, все действия можно провести и в командной строке (и отличаться они не будут), но я предпочел этот вариант, так как при использовании ADB Shell в командной строке возникли проблемы с отображением спецсимволов, не влияющие на работу способа, но представляющие неудобства.

Прежде чем начать подключение внутренней памяти Android как флешки в Windows выполните следующие шаги:

  1. Скачайте и распакуйте Android SDK Platform Tools в папку на вашем компьютере. Загрузка доступна на официальном сайте https://developer.android.com/studio/releases/platform-tools.html
  2. Откройте параметры системных переменных среды (например, начав в поиске Windows вводить «переменных», а затем в открывшемся окне свойств системы нажав «Переменные среды». Второй способ: открыть Панель управления — Система — Дополнительные параметры системы — «Переменные среды» на вкладке «Дополнительно»).

  • Выберите переменную PATH (не важно, системную или пользовательскую) и нажмите «Изменить».
  • В следующем окне нажмите «Создать» и укажите путь к папке с Platform Tools из 1-го шага и примените сделанные изменения.

    Если вы проделываете указанные действия в Linux или MacOS, то поищите в Интернете, как в этих ОС добавить папку с Android Platform Tools в PATH.

    Подключение внутренней памяти Android как Mass Storage Device

    Теперь приступаем к основной части этого руководства — непосредственно подключение внутренней памяти Android как флешки к компьютеру.

    1. Перезагрузите ваш телефон или планшет в режиме Recovery. Обычно для этого нужно выключить телефон, затем зажать и удерживать кнопку питания и «громкость вниз» в течение некоторого времени (5-6) секунд, а после появления экрана fastboot выбрать Recovery Mode с помощью кнопок громкости и загрузиться в него, подтвердив выбор коротким нажатием кнопки питания. Для некоторых устройств способ может отличаться, но легко находится в Интернете по запросу: «модель_устройства recovery mode»
    2. Подключите устройство к компьютеру по USB и подождите некоторое время, пока оно не будет настроено. Если по окончании настройки в диспетчере устройств Windows устройство будет отображаться с ошибкой, найдите и установите ADB Driver именно для вашей модели устройства.

    Запустите Ubuntu Shell (в моем примере используется именно оболочка Ubuntu под Windows 10), командную строку или терминал Mac и введите adb.exe devices (Примечание: из-под Ubuntu в Windows 10 я использую adb для Windows. Можно было бы установить adb для Linux, но тогда бы он не «видел» подключенных устройств — ограничение функций подсистемы Windows для Linux).

  • Если в результате выполнения команды вы видите подключенное устройство в списке — можно продолжать. Если нет — введите команду fastboot.exe devices
  • Если в этом случае устройство отобразилось, значит всё подключено правильно, но рекавери не позволяет использовать команды ADB. Вероятно, придется установить кастомный рекавери (рекомендую найти TWRP для вашей модели телефона). Подробнее: Установка кастомного рекавери на Android.
  • После установки кастомного рекавери, зайдите в него и повторите команду adb.exe devices — если устройство стало видным, можно продолжать.
  • Введите команду adb.exe shell и нажмите Enter.
  • В ADB Shell по порядку выполняем следующие команды.

    mount | grep /data

    В результате получаем имя устройства block, которое будет использовать далее (не теряем его из виду, запоминаем).

    Следующей командной размонтируем раздел data на телефоне, чтобы иметь возможность подключить его как Mass Storage.

    Далее находит индекс LUN нужного раздела, соответствующего Mass Storage Device

    find /sys -name lun*

    Будет отображено несколько строк, нас интересуют те, которые имеют в пути f_mass_storage, но пока мы не знаем, какая именно (обычно, заканчивающиеся на просто lun или lun0)

    В следующей команде используем имя устройства из первого шага и один из путей с f_mass_storage (один из них соответствует внутренней памяти). Если будет введен неверный, вы получите сообщение об ошибке, тогда пробуем следующий.

    echo /dev/block/mmcblk0p42 > /sys/devices/virtual/android_usb/android0/f_mass_storage/lun/file

    Следующий шаг — создаем скрипт, подключающий внутреннее хранилище к основной системе (всё, что ниже — одна длинная строка).

    echo «echo 0 > /sys/devices/virtual/android_usb/android0/enable && echo «mass_storage,adb» > /sys/devices/virtual/android_usb/android0/functions && echo 1 > /sys/devices/virtual/android_usb/android0/enable» > enable_mass_storage_android.sh

    В этот момент сессия ADB Shell будет закрыта, а к системе будет подключен новый диск («флешка»), представляющий собой внутреннюю память Android.

    При этом, в случае Windows вас могут попросить отформатировать накопитель — не делайте этого (просто Windows не умеет работать с файловой системой ext3/4, но многие программы для восстановления данных умеют).

    Восстановление данных из подключенного внутреннего хранилища Android

    Теперь, когда внутренняя память подключена как обычный накопитель, мы можем использовать любую программу для восстановления данных, которая умеет работать с разделами Linux, например, бесплатную PhotoRec (доступную для всех распространенных ОС) или платную R-Studio.

    Я пробую выполнить действия с PhotoRec:

    1. Скачиваем и распаковываем PhotoRec с официального сайта https://www.cgsecurity.org/wiki/TestDisk_Download
    2. Запускаем программу, для Windows и запуска программы в графическом режиме запустите файл qphotorec_win.exe (подробнее: восстановление данных в PhotoRec).
    3. В главном окне программы вверху выбираем устройство Linux (тот новый диск, который мы подключили). Ниже указываем папку для восстановления данных, а также выбираем тип файловой системы ext2/ext3/ext Если вам требуются файлы лишь определенного типа, рекомендую указать их вручную (кнопка «Форматы файлов»), так процесс пойдет быстрее.

  • Еще раз убедитесь, что выбрана нужная файловая система (иногда переключается «сама»).
  • Запустите поиск файлов (находиться они начнут на втором проходе, первый — поиск заголовков файлов). При нахождении, они автоматически будут восстановлены в указанную вами папку.

    В моем эксперименте из 30 удаленных из внутренней памяти фотографий в идеальном состоянии было восстановлено 10 (лучше, чем ничего), для остальных — только миниатюры, также были найдены скриншоты png, сделанные ещё до хард-ресета. R-Studio показала примерно тот же результат.

    Но, так или иначе, это не проблема способа, который работает, а проблема эффективности восстановления данных как таковой в некоторых сценариях. Так же отмечу, что DiskDigger Photo Recovery (в режиме глубокого сканирования с root) и Wondershare Dr. Fone for Android показали сильно худший результат на том же устройстве. Конечно, вы можете попробовать и любые другие средства, позволяющие восстанавливать файлы с разделов с файловой системой Linux.

    По окончании процесса восстановления, извлеките подключенное USB устройство (используя соответствующие способы вашей операционной системы).

    Затем можно просто перезагрузить телефон, выбрав соответствующий пункт в меню рекавери.

    Источник

    Cellular Modem Information » Qualcomm Linux Modems by Quectel & Co

    Android USB Gadget¶

    The Android Linux kernel has an incredibly versatile USB gadget that is not present in mainline linux.

    Using sysfs, you can configure a USB device that has a large number of interfaces, each exposing one particular function.

    Each function (class) is implemented by a gadget driver. In the source code they are prefixed with «f_», so the serial function is called f_serial

    Using sysfs to configure¶

    Each USB device is exposed as a /sys/devices/virtual/android_usb/androidX interface where X corresponds to the logical number. Most devices these days have only one or two USB ports, so it is mostly android0 or android1 that you will see.

    Below this sysfs directory ad a number of different files. They can only be modified/written to if the USB port is disabled by means of

    It will disconnect from the USB host at this point.

    After modifying what you want to modify, you can use

    to re-enable the USB port. It will re-enumerate to the host at this point.

    /sys/devices/virtual/android_usb/androidX/idVendor ¶

    Allows you to set the USB Vendor ID

    /sys/devices/virtual/android_usb/androidX/idProduct ¶

    Allows you to set the USB Device ID

    /sys/devices/virtual/android_usb/androidX/iManufacturer ¶

    Allows you to set the USB Manufacturer string. You enter it in ASCII, it will be converted to a USB String automatically.

    /sys/devices/virtual/android_usb/androidX/Product ¶

    Allows you to set the USB Product string. You enter it in ASCII, it will be converted to a USB String automatically.

    /sys/devices/virtual/android_usb/androidX/functions ¶

    Allows you to configure which functions compose the interfaces of your USB device

    The default on Quectel modems seems to be diag,serial,rmnet

    A more generally useful setup for developers is something like adb,diag,serial,rmnet which adds ADB access.

    You can also add further functions like MBIM, CCID, MTP, PTP, or even mass_storage. Please note that most of them require additional configuration to do anything useful.

    The order of functions in the string you write to functions will determine the order of those interfaces in the interface descriptor.

    Please note that some functions can themselves implement multiple interfaces. Even in the Quectel default you will see that the serial function offers three virtual serial ports: One for GPS and two for AT-Commands.

    This is due to the fact that something like tty,smd,smd is written into the /sys/class/android_usb/androidX/f_serial/transports file (see below)

    Gadgets / kernel code¶

    ‘struct android_usb_function’ implements a given function

    ffs (function FS)¶

    • userspace process can implement USB functions
    • used e.g. by adbd

    acm (CDC «astract control model»)¶

    • USB-IF standardized version of serial-type ports
    • exposed via /dev/ttyGS* device

    rmnet¶

    usb gadget driver to implement a rmnet gadget, f_rmnet.c
    Documentation/usb/gadget_rmnet.txt

    • drivers/net/ethernet/msm/msm_rmnet_mhi.c
    • interface descriptor: class/subclass/proto = 0xff, numEP=3
      • stringdescriptor en-us, string 0 == «RmNet»
      • full speed descriptors (notify/in/out)
      • high speed descriptors (notify/in/out)
      • super speed descriptors (notify/in/out + comp)
    • rmnet has ports
      • control ports can map to SMD, QTI, HSIC, HSUART
        • SMD (Shared Memory Device) channel towards modem
        • QTI: ?
        • HSIC: High-speed Inter-IC USB variant (for chipsets with multiple ICs interconnected by HISC)
        • HSUART: High-speed UART
      • data ports can map to BAM2BAM, BAM_DMUX, BAM2BAM_IPA, HSIC, HSUART, ETHER
        • BAM2BAM is normal case? Replaced by BAM_DMUX in more recent kernels?
        • BAM2BAM_IPA via internet packet accelerator?
        • HSIC: High-speed Inter-IC USB variant
        • HSUART: High-speed UART
        • ETHER exposes the data pipe as usb_rmnet%d device on Linux (EC25 only)
    • frmnet_init_port() establishes connections
    • IF class/sub/proto = 0xff
    • only one endpoint (notify)
    • string 0 (en-us) is «GPS»

    ecm_qc (CDC Ethernet)¶

    usb_mbim (Mobile Broadband Interface Model)¶

    audio (uac1?)¶

    • class/sub/proto = 0xff
    • num-ep 2
    • max-packet 512
    • some special assumption only if bInterfaceNumber==0

    qdss (Qualcomm Debug Sub-System)¶

    • has QDSS DATA / QDSS CTRL string descriptor
    • somehow connects to BAM

    serial¶

    Offers a f_serial/transports file that determines the number of virtual serial ports and the low-level transport to use for them

    A maximum of four instances is supported, but one could change MAX_SERIAL_INSTANCES if more were needed.

    Источник

    Читайте также:  Камера для съемки экрана андроида
  • Оцените статью