Czy można uruchomić telefon z Androidem z napędu USB?

17

Czy istnieje sposób na uruchomienie telefonu z Androidem * z napędu USB zasilanego z magistrali **? Jeśli tak, jakie kroki należy osiągnąć?

* Np. Taki z funkcją USB OTG.

** Np. Pamięć flash.

sampablokuper
źródło

Odpowiedzi:

23

Proszę wyjaśnić, jaki jest zamierzony cel i dlaczego?

Telefony z Androidem mają własne programy ładujące i nie można ich zastąpić w inny sposób.

To nie jest jak BIOS komputera, w którym można zmienić kolejność uruchamiania z rozruchu z niektórych urządzeń, takich jak Network PXE, USB, podstawowy / dodatkowy dysk twardy ..

Edytować:

Po komentarzach poniżej i w związku z pytaniem PO

Czy istnieje sposób na uruchomienie telefonu z Androidem (np. Z funkcją USB OTG.) Za pomocą napędu USB zasilanego z magistrali

Ogólny moduł ładujący (*, który znajduje się na zestawie układów) nie ma wiedzy o USB itp., Ponieważ lk (Little Kernel) jest bardziej zaniepokojony chwytaniem naciśnięć klawiszy w celu przywrócenia łańcucha do odzyskiwania lub uruchomienia bezpośrednio w środowisku Androida (Przytrzymując klawisz Vol + Down w tym przypadku) - w pseudokodzie ( pochodzi z kontekstu / aspektu lk, a także adresy pamięci dotyczące sposobu czytania partycji są na stałe zakodowane w tym pliku, więc będzie umieć przetwarzać logikę! )

Jądro lk to de facto standard Qualcomm dla chipsetów MSM (Snapdragon) i przyjęty przez producentów takich jak Sony, Motorola, LG, Samsung i można go znaleźć w źródle AOSP pod bootable/bootloader.

jeśli ( Czy naciśnięto przycisk zmniejszania głośności? ), to

  • załaduj jądro z /recoverypartycji do określonego adresu w pamięci i przeskocz do niego i rozpocznij wykonywanie, uruchamiając środowisko odzyskiwania

jeszcze

  • załaduj jądro z /systempartycji do określonego adresu w pamięci i przeskocz do niego i rozpocznij wykonywanie w środowisku Android.

koniec jeśli.

Ponieważ jądro w lk jest dość ograniczone, biorąc pod uwagę, że binarny obraz jądra jest wypalany w układzie, a zatem nie ma możliwości jego modyfikacji . I również należy wspomnieć, że lk zawiera fastbootprotokół w ramach przygotowań do flashowania /boot, /recovery, /systemi /datapartycji. Istnieją dwie sekwencje rozruchu, rozruch podstawowy i rozruch wtórny w takiej postaci:

  • Primary Boot -> lk (w zależności od wyniku logiki)
  • Przejdź do Secondary Boot -> /bootlub/recovery

Uwaga dodatkowa: Samsung lubi PBL / SBL (odpowiednio Primary Boot Loader i Secondary Boot Loader) w swoim żargonie, jeśli chodzi o modowanie. Rzeczą w Samsungu jest to, że w niektórych telefonach PBL i SBL mogą być szyfrowane (Samsung Wave GT-S8500 jest jednym z takich przykładów, gdzie przeniesienie Androida na to było prawie niemożliwe z powodu DRM w modułach ładujących, co było koszmarem poradzić sobie z tym i uczynić go niezwykle trudnym, jednak działa to poprzez exploit w kodzie FOTA!)

To dlatego nie ma żadnych dodatkowych udogodnień, takich jak funkcjonalność OTG lub cokolwiek innego, jak komunikacja szeregowa, odczyt z SDCard, grafika itp., Ponieważ spowodowałoby to, że jądro lk byłoby większe, niż jest to zamierzone. Innymi słowy, jest to najmniejszy możliwy rozmiar jądra, który jest przeznaczony do wykonywania właśnie powyższego pseudokodu.

Również inny sposób patrzenia na to jest to, co jest zależne od wersji Androida - funkcjonalność USB OTG jest w pełni wniesione się w środowisku Android, czyli kiedy znajome pojawi się ekran do domu, wtedy funkcja OTG jest włączona. Niestety nie jest tak, gdy patrzy się na to z perspektywy Łukasza.

Jeśli jesteś ciekawy, oto wpis Qualcomm na powyższym lk, który jest częścią małego źródła C, które zawiera zespół ARM i znajduje się w źródle AOSP JellyBean wbootable/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;
}
t0mm13b
źródło
Emisja kurczaka / jajka tutaj: I chciał odpowiedzieć na moje pytanie, w celu zawężenia dół przypadków użycia oparciu wykonalności; Ci proszą mnie, aby dać przypadki użycia pierwszy :) Tak, mogę wyjaśnić tylko mój cel (s) niejasno teraz. Jednym z nich może być osiągnięcie pełnego szyfrowania dysku poprzez uruchomienie z szyfrowanego sprzętowo napędu USB (Lok-It / dataShur / itp.), Dzięki czemu wprowadzenie hasła na dysku eliminuje potrzebę wprowadzania hasła deszyfrującego na urządzeniu z Androidem. Najlepiej byłoby to zrobić w taki sposób, że po uruchomieniu telefonu dysk można usunąć, pozostawiając telefon nadal działający do następnego uruchomienia.
sampablokuper 11.03.13
Racja ... Ciekawe - nigdy nie słyszałem o takiej sprawie - zresztą - dlaczego? Jedzenie do namysłu, gdzie wpisałbyś taki kod dostępu? Android ICS w górę ma możliwość szyfrowania całego woluminu IIRC - Czy nie zaglądałeś w to?
t0mm13b,
Hasło zostanie wprowadzone za pomocą klawiatury wbudowanej w przemiennik. (Jeśli nie wiesz, co mam przez to na myśli, sprawdź dyski, o których wspomniałem.) I tak, zajrzałem do wbudowanego szyfrowania Androida, ale (a) nie jest to pozbawione wad (patrz np . Bezpieczeństwo). stackexchange.com/q/10529 ; v.gd/6hOcmd ), (b) nie działa na wszystkich telefonach, nawet te, które mają ICS + ROM dostępne u producentów (np niektóre modele Xperia) i (c) istnieją inne pożądane są potencjalne przypadki użycia, w których można uruchomić telefon / tablet z urządzenia pamięci masowej USB.
sampablokuper
Szczerze mówiąc, nie jest to możliwe, na początek nie ma takiego bootloadera smartfonów, który po prostu, z wysokiego poziomu, „wstrzyma się” do momentu wprowadzenia hasła! To, o co prosisz, wykracza poza to forum i wymaga specjalistycznej, jeśli nie, niszowej areny niestandardowych programów ładujących, aby to osiągnąć! Na początek - ogólny bootloader, lk (jest w AOSP pod bootowalnym / bootloaderem) jest de facto przyjęty przez Qualcomm dla ich chipsetów, które są używane przez takie firmy jak Sony, LG, Motorola, aby wymienić tylko kilka ... tylko mówiąc, pytanie nie jest konstruktywne!
t0mm13b
2
W skrócie - jest zerem sposób to robić, to wydaje się być zapominając, że nacisk na moich uwag w stosunku do bootloadera oraz fakt, że smartfony nie mają BIOS jest albo .... po prostu mówiąc.
t0mm13b
7

Jest to jednak możliwe w pewnym sensie. Biorąc pod uwagę ograniczenia wymienione w odpowiedzi @ t0mm13b, sensowne jest, że wspomniany program ładujący rozruchu (lk) nie jest w stanie tego zrobić. Tak więc uruchamiamy niestandardowe jądro z fastboot(do testowania), które uruchamia się, włącza funkcjonalność OTG, a po znalezieniu prawidłowego jądra na podłączonym urządzeniu OTG ładuje to do pamięci i przekazuje kontrolę. Prawdopodobnie można to nawet zintegrować z nowoczesnymi niestandardowymi funkcjami odzyskiwania, takimi jak TWRP, które mają obsługę zarówno OTG, jak i (w niektórych przypadkach) MultiROM.

Zostało to faktycznie wykorzystane do uruchomienia Ubuntu na tablecie Nexus 9, przy użyciu metody:

  1. fastboot boot <otg_chainloader_kernel>
  2. <otg_chainloader_kernel> uruchamia i umożliwia OTG i czeka na podłączenie urządzenia OTG.
  3. Urządzenie jest odłączone od komputera i napędu flash USB, do którego podłączony jest rozruchowy obraz Ubuntu za pośrednictwem OTG.
  4. <otg_chainloader_kernel> wykrywa prawidłowe jądro Linuksa na urządzeniu OTG i przekazuje mu kontrolę po załadowaniu łańcucha do pamięci.

Teraz, jeśli chcesz, możesz uruchomić zgodny obraz ROM systemu Android w podobny sposób, ale pamiętaj, że dysk OTG musiałby być podłączony do urządzenia, dopóki nie zdecydujesz się wrócić do natywnego systemu operacyjnego (ponieważ wszystkie aplikacje zostaną załadowane z, a wszystkie dane zostaną zapisane na dysku flash USB, chyba że cała pamięć ROM systemu Android może zostać skonfigurowana jako ramdysk (czy kiedykolwiek słyszałeś o Puppy Linux?), co, biorąc pod uwagę obecne pojemności pamięci popularnych urządzeń z Androidem i rozmiar Sam ROM jest obecnie niepraktyczny). To wyklucza ładowanie podczas uruchamiania systemu OTG również na większości urządzeń z ujednoliconymi portami danych / ładowarki.

Źródło: XDA-Developers Nexus 9 subforum

Tamoghna Chowdhury
źródło
Czy można to zrobić na Androidzie, aby móc uruchomić podgląd N bez instalowania
Suici Doga
@ SuiciDoga, myślę, że TWRP MultiROM obsługuje OTG Boot? Wykorzystuje powyższą technikę AFAIK, tylko bez wszystkich fastboots. kexec-hardbootŁata dla jądra używanej przez TWRP MultiROM jest w zasadzie OTG-Chainloader-Kernelmówić o.
Tamoghna Chowdhury
Teraz zależy to również od urządzenia, na którym możesz chcieć wypróbować to ćwiczenie. Nexus 9 i Nexus Player mają TWRP, ale funkcja MultiROM na nich nie działa (problemy z x64 / ARM64?). IDK także o bieżącym Nexii.
Tamoghna Chowdhury
0

jest możliwe i zrobiłem to na mojej tabletce acer iconia !!!!

podłącz dysk flash do komputera i sformatuj do fat32, użyj rufus do przeniesienia ISO / DD na dysk flash

podłącz go do otg i do telefonu / tabletu. przytrzymaj klawisz wyłącznika i dotknij głośności, jeśli się nie uruchomi, spróbuj przytrzymać klawisz wyłącznika i zwiększ głośność

następnie za pomocą klawiszy głośności przejdź do UDisk (marka dysku flash) lub SATA; UDISK (nie musi to być marka USB, można powiedzieć, że pamięć USB) i kliknij przycisk zasilania, aby potwierdzić

cóż, miałem poważne problemy z uruchomieniem do menu, więc jakoś udało mi się uniknąć uruchomienia jądra i zatrzymania uruchamiania Androida

myślę, że tak było: połączyłem się z komputerem, a następnie usunąłem wszystkie assects z tabletu, ale kopiowałem folder Androida

jądro zostało usunięte, a po uruchomieniu ponownie podłączone do komputera za pomocą koncentratora USB

mam nadzieję, że pomogłem :)

EliteXD
źródło
To musi być jakiś wyjątkowy SoC, może obsługiwać UEFI. Niewiele SoC używanych obecnie na urządzeniach z Androidem pozwala skonfigurować kolejność rozruchu.
Irfan Latif