Можно ли загрузить телефон Android с USB-накопителя?


17

Есть ли способ загрузить телефон Android * с USB-накопителя с питанием от шины **? Если да, то какие шаги для этого?

* Например, один с функцией USB OTG.

** Например, флешка.

Ответы:


23

Пожалуйста, уточните, какова цель и почему?

Телефоны Android имеют свои собственные загрузчики и не могут быть переопределены другими способами.

Это не похоже на BIOS ПК, где вы можете переключать порядок загрузки для загрузки с определенных устройств, таких как Network PXE, USB, Primary / Secondary HDD.

Редактировать:

После комментариев ниже и в связи с вопросом ОП

Есть ли способ загрузить телефон Android (например, с функцией USB OTG) через USB-накопитель с питанием от шины

Базовый загрузчик (* который находится на чипсете) не знает USB и т. Д., Поскольку lk (Little Kernel) больше заботится о том, чтобы перехватывать нажатия клавиш для цепной загрузки в восстановление или для загрузки непосредственно в среду Android (Удерживая клавишу Vol + Down в этом случае) - в псевдокоде ( это из контекста / аспекта lk, а также адреса памяти, относящиеся к чтению разделов, жестко запрограммированы в этом lk, поэтому умеешь обрабатывать логику! )

Ядро lk является стандартом де-факто Qualcomm для наборов микросхем MSM (Snapdragon) и принято такими производителями, как Sony, Motorola, LG, Samsung. Его можно найти в источнике AOSP в разделе bootable/bootloader.

если ( нажата клавиша уменьшения громкости? ), то

  • Цепная загрузка ядра из /recoveryраздела по определенному адресу в памяти, переход к нему и запуск выполнения при вызове среды восстановления.

еще

  • Цепная загрузка ядра из /systemраздела по определенному адресу в памяти, переход к нему и запуск выполнения при вызове среды Android.

конец если.

Поскольку ядро ​​в lk довольно ограничено, учитывая, что двоичный образ ядра записан в чип и, следовательно, нет способа его изменить . А также следует отметить , что лк содержит fastbootпротокол в рамках подготовки к мигающим /boot, /recovery, /systemи /dataперегородкам. Есть две последовательности для загрузки: основная загрузка и дополнительная загрузка как есть:

  • Первичная загрузка -> lk (в зависимости от результата логики)
  • Зайдите в Secondary Boot -> /bootили/recovery

Примечание: Samsung любит PBL / SBL (который является Primary Boot Loader и Secondary Boot Loader соответственно) в их жаргоне, когда дело доходит до моддинга. Что касается Samsung, так это то, что в некоторых телефонах PBL и SBL могут быть зашифрованы (Samsung Wave GT-S8500 является одним из таких примеров, когда портировать Android на него было практически невозможно из-за DRM в загрузчиках, что было кошмаром). иметь дело с моддингом и сделать его чрезвычайно трудным, тем не менее, это своего рода работа через эксплойт в коде FOTA!)

Вот почему нет никаких дополнительных средств, таких как функциональность OTG или что-либо еще, таких как последовательная связь, чтение с SDCard, графика и т. Д., Поскольку это сделает ядро ​​lk больше, чем предполагалось. Другими словами, это наименьший возможный размер ядра, предназначенный для выполнения только что описанного выше псевдокода.

Кроме того , еще один способ смотреть на него это, и это зависит от Android версии - с USB OTG функциональность полностью вывела вверх в Android среды, то есть , когда знакомый появится домашний экран, то функциональность OTG является включена. К сожалению, это не так, если смотреть на это с точки зрения ЛК.

Если вам интересно, вот запись Qualcomm на приведенном выше lk, которая является частью крошечного C-источника, в который включена сборка ARM и найдена в AOSP-источнике JellyBean вbootable/bootloader/legacy/usbloader/main.c

int boot_linux_from_flash(void)
{
    boot_img_hdr *hdr = (void*) raw_header;
    unsigned n;
    ptentry *p;
    unsigned offset = 0;
    const char *cmdline;

    if((p = flash_find_ptn("boot")) == 0) {
        cprintf("NO BOOT PARTITION\n");
        return -1;
    }

    if(flash_read(p, offset, raw_header, 2048)) {
        cprintf("CANNOT READ BOOT IMAGE HEADER\n");
        return -1;
    }
    offset += 2048;

    if(memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
        cprintf("INVALID BOOT IMAGE HEADER\n");
        return -1;
    }

    n = (hdr->kernel_size + (FLASH_PAGE_SIZE - 1)) & (~(FLASH_PAGE_SIZE - 1));
    if(flash_read(p, offset, (void*) hdr->kernel_addr, n)) {
        cprintf("CANNOT READ KERNEL IMAGE\n");
        return -1;
    }
    offset += n;

    n = (hdr->ramdisk_size + (FLASH_PAGE_SIZE - 1)) & (~(FLASH_PAGE_SIZE - 1));
    if(flash_read(p, offset, (void*) hdr->ramdisk_addr, n)) {
        cprintf("CANNOT READ RAMDISK IMAGE\n");
        return -1;
    }
    offset += n;

    dprintf("\nkernel  @ %x (%d bytes)\n", hdr->kernel_addr, hdr->kernel_size);
    dprintf("ramdisk @ %x (%d bytes)\n\n\n", hdr->ramdisk_addr, hdr->ramdisk_size);

    if(hdr->cmdline[0]) {
        cmdline = (char*) hdr->cmdline;
    } else {
        cmdline = board_cmdline();
        if(cmdline == 0) {
            cmdline = "mem=50M console=null";
        }
    }
    cprintf("cmdline = '%s'\n", cmdline);

    cprintf("\nBooting Linux\n");

    create_atags(ADDR_TAGS, cmdline,
                 hdr->ramdisk_addr, hdr->ramdisk_size);

    boot_linux(hdr->kernel_addr);
    return 0;
}

Вопрос курицы / яйца здесь: я хотел получить ответ на свой вопрос, чтобы сузить варианты использования, основанные на возможности; вы просите меня сначала дать примеры использования :) Итак, я могу пока лишь смутно разъяснять свои цели. Можно было бы добиться такого же полного шифрования диска, загрузившись с USB-накопителя с аппаратным шифрованием (Lok-It / dataShur / и т. Д.), Чтобы ввод пароля на диске исключал необходимость ввода пароля дешифрования на устройстве Android. В идеале это можно сделать так, чтобы после загрузки телефона его можно было извлечь, оставив телефон работать до следующей перезагрузки.
Сампаблокупер

Правильно ... Интересно - никогда не слышал о таком случае, так или иначе - почему? Пища для размышлений, где бы вы ввели такой пароль? Android ICS и выше имеет возможность шифровать весь том IIRC. Разве вы не рассматривали это?
t0mm13b

Пароль вводится с помощью встроенной в привод клавиатуры. (Если вы не знаете, что я имею в виду под этим, посмотрите на упомянутые мной диски.) И да, я изучил встроенное шифрование Android, но (а) оно не лишено недостатков (см., Например, безопасность). stackexchange.com/q/10529 ; v.gd/6hOcmd ), (b) он работает не на всех телефонах, даже на тех, которые имеют ПЗУ ICS + от производителей (например, некоторые модели Xperia), и (c) есть другие потенциальные варианты использования, для которых желательна возможность загрузки телефона / планшета с запоминающего устройства USB.
Сампаблокупер

Откровенно говоря, это недостижимо, для начала не существует такого загрузчика смартфона, который бы просто, с точки зрения высокого уровня, "приостанавливал" до ввода пароля! То, что вы просите, выходит за рамки этого форума и требует специализированной, если не нишевой арены пользовательских загрузчиков для достижения этой цели! Для начала - универсальный загрузчик lk (его в AOSP в разделе boottable / bootloader) де-факто принимает Qualcomm за свои чипсеты, которые используют такие компании, как Sony, LG, Motorola, и это лишь некоторые из них ... просто говорю, вопрос не конструктивный!
t0mm13b

2
Короче говоря, нет никакого способа сделать это, вы, кажется, забываете, что акцент на моих комментариях в отношении загрузчика и тот факт, что смартфоны не имеют BIOS тоже .... просто сказать.
t0mm13b

7

Это возможно в некотором смысле, однако. Учитывая ограничения, упомянутые в ответе @ t0mm13b, имеет смысл, что упомянутый загрузчик (lk) неспособен сделать это. Итак, мы загружаем собственное ядро ​​из fastboot(для тестирования), которое загружается, включает функциональность OTG, и как только на подключенном OTG-устройстве обнаруживается действительное ядро, загружает его в память и передает ему управление. Вероятно, это может быть даже интегрировано в современные пользовательские восстановления, такие как TWRP, которые поддерживают как OTG, так и (в некоторых случаях) MultiROM.

На самом деле это использовалось для загрузки Ubuntu на планшете Nexus 9, используя метод:

  1. fastboot boot <otg_chainloader_kernel>
  2. <otg_chainloader_kernel> загружается и включает OTG и ожидает подключения устройства OTG.
  3. Устройство отключено от ПК и к нему через OTG подключен USB-накопитель с загрузочным образом Ubuntu.
  4. <otg_chainloader_kernel> обнаруживает действительное ядро ​​Linux на устройстве OTG и передает управление ему после загрузки по цепочке в память.

Теперь, если вы хотите, вы можете загрузить совместимый образ ПЗУ Android аналогичным образом, но помните, что диск OTG должен оставаться подключенным к устройству до тех пор, пока вы не решите вернуться к собственной ОС (поскольку все приложения будут загружаться). от, и все данные будут записаны на флэш-накопитель USB, если все ПЗУ Android не может быть настроено как виртуальный диск (когда-либо слышал о Puppy Linux?), который, учитывая текущие объемы памяти общих устройств Android и размер Сам ПЗУ на данный момент нецелесообразен). Это исключает возможность зарядки при загрузке в ОС OTG также на большинстве устройств с унифицированными портами данных / зарядного устройства.

Источник: XDA-Developers Nexus 9 подфорум


Можно ли сделать это для Android, чтобы я мог загрузить предварительный просмотр N без установки
Suici Doga

@SuiciDoga, я думаю, TWRP MultiROM поддерживает загрузку OTG? Он использует вышеуказанную технику AFAIK, просто без всяких fastbootс. kexec-hardbootПатч для ядра , используемого TWRP MultiROM в основном OTG-Chainloader-Kernelя говорю.
Тамогна Чоудхури

Теперь это также зависит от того, на каком устройстве вы можете попробовать это упражнение. Nexus 9 и Nexus Player имеют TWRP, но MultiROM не работает на них (проблемы с x64 / ARM64?). ИДК про нынешнюю Нексию тоже.
Тамогна Чоудхури

0

это возможно, и я сделал это на моем планшете Acer Iconia !!!!

подключите флешку к вашему компьютеру и отформатируйте в fat32 используйте rufus для портирования iso / dd на вашу флешку

подключите его к otg и в свой телефон / планшет .. удерживайте клавишу питания и нажмите громкость вниз, если он не загружается, попробуйте удерживать клавишу питания и нажмите громкость вверх

затем с помощью клавиш регулировки громкости перейдите на UDisk (марка вашей флешки) или SATA; UDISK (это не обязательно должен быть ваш USB-бренд, можно сказать, USB-хранилище) и нажмите кнопку питания, чтобы подтвердить

ну, у меня были серьезные проблемы с загрузкой в ​​меню, поэтому мне как-то удалось избежать загрузки ядра и тем самым остановить загрузку андроида

я думаю, что это было так: я подключился к компьютеру, затем удалил все сборки с планшета, но скопировал папку Android

ядро было удалено и после загрузки подключено к компьютеру с помощью USB-концентратора

ну надеюсь я помог :)


Это должен быть какой-то исключительный SoC, возможно, поддерживающий UEFI. Немногие SoC, используемые в наши дни на устройствах Android, позволяют настроить порядок загрузки.
Ирфан Латиф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.