Чи можливо завантажувати телефон 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 (залежно від результатів логіки)
  • Перейдіть до вторинного завантаження -> /bootабо/recovery

Побічна примітка: Samsung захоплюється PBL / SBL (що є первинним завантажувачем і вторинним завантажувачем відповідно) у своєму жаргоні, коли мова йде про модінг. Що стосується Samsung, це те, що в деяких телефонах PBL і SBL можуть бути зашифровані (Samsung Wave GT-S8500 - один з таких прикладів, коли перенесення Android на нього було майже неможливо зробити через DRM в завантажувачах, що було кошмаром впоратися з цим і зробити його моддингом надзвичайно важко, тим не менше, це начебто робота з експлуатуванням у коді FOTA!)

Ось чому немає додаткових засобів, таких як функціональність OTG або що-небудь інше, наприклад, послідовний зв'язок, зчитування з SDCard, графіки тощо, як це зробить ядро ​​lk більшим, ніж призначено. Іншими словами, саме найменший розмір ядра призначений для того, щоб зробити саме вищевказаний псевдо-код.

Крім того, інший спосіб дивитися на це - це, і це залежить від версії Android - функціональність USB OTG повністю виведена в середовищі Android, тобто коли з'являється знайомий домашній екран, тоді функціональність OTG увімкнена. На жаль, це не так, якщо дивитися на це з точки зору lk.

Якщо вам цікаво, ось запис 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. В ідеалі це можна зробити так, що після завантаження телефону привід можна буде вийняти, залишаючи телефон все ще нормальним до наступного перезавантаження.
sampablokuper

Так ... Цікаво - ніколи не чули подібного випадку - все одно - чому? Їжа для роздумів, де ти введеш таку парольну скриньку? Android ICS вгору має можливість зашифрувати весь обсяг IIRC - Ви цього не вивчали?
t0mm13b

Пароль вводиться за допомогою вбудованої в накопичувач клавіатури. (Якщо ви не знаєте, що я маю на увазі під цим, знайдіть диски, про які я згадував.) І так, я вивчив вбудоване шифрування Android, але (а) це не позбавлено недоліків (див., Наприклад, безпека. stackexchange.com/q/10529 ; v.gd/6hOcmd ), (b) він працює не на всіх телефонах, навіть на тих, у яких ICS + ROM є у виробників (наприклад, деякі моделі Xperia), і (c) є інші можливі випадки використання, для яких можливість завантажувати телефон / планшет із USB-накопичувача.
sampablokuper

Якщо бути відвертим, це не досяжно, для початку немає такого завантажувача смартфонів, який просто, з точки зору високого рівня, "паузує" до введення пароля! Те, що ви просите, знаходиться вище та поза цим форумом, і для цього потрібна спеціалізована, якщо ні, ніша арена користувальницьких завантажувачів! Для початку - загальний завантажувач, lk (його в AOSP під завантажувальним / завантажувачем) , 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. Пристрій відключається від ПК та флеш-накопичувача, що має завантажувальний образ Ubuntu, до нього підключається через OTG.
  4. <otg_chainloader_kernel> виявляє дійсне ядро ​​Linux на пристрої OTG і передає йому управління після завантаження ланцюга в пам'ять.

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

Джерело: XDA-Developers Nexus 9 subforum


Чи можливо це зробити для Android, щоб я міг завантажувати попередній перегляд N, не встановлюючи
Suici Doga

@SuiciDoga, я думаю, TWRP MultiROM підтримує OTG Boot? Він використовує описану вище техніку AFAIK, просто без усіх fastboots. kexec-hardbootПатч для ядра , використовуваного TWRP MultiROM в основному OTG-Chainloader-Kernelя говорю.
Tamoghna Chowdhury

Тепер це також залежить від того, на якому пристрої ви можете спробувати цю вправу. У Nexus 9 і Nexus Player є TWRP, але річ MultiROM на них не працює (проблеми з x64 / ARM64?). IDK про поточний Nexii теж.
Tamoghna Chowdhury

0

це можливо, і я це зробив на своєму планшеті Acer iconia !!!!

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

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

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

ну, у мене виникли проблеми із завантаженням із завантаженням меню, тому я якось зумів уникнути завантаження ядра і тим самим зупинити андроїд для завантаження

я думаю, це було так: я підключився до ПК, потім видалив усі збори з планшета, але копіюючи папку Android

ядро було видалено і після завантаження з'єднано назад до ПК з концентратором usb

добре сподіваюся, що я допоміг :)


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