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.
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.
Odpowiedzi:
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 ..
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
/recovery
partycji do określonego adresu w pamięci i przeskocz do niego i rozpocznij wykonywanie, uruchamiając środowisko odzyskiwaniajeszcze
/system
partycji 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 fastboot
protokół w ramach przygotowań do flashowania /boot
, /recovery
, /system
i /data
partycji. Istnieją dwie sekwencje rozruchu, rozruch podstawowy i rozruch wtórny w takiej postaci:
/boot
lub/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;
}
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:
fastboot boot <otg_chainloader_kernel>
<otg_chainloader_kernel>
uruchamia i umożliwia OTG i czeka na podłączenie urządzenia OTG.<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
fastboot
s. kexec-hardboot
Łata dla jądra używanej przez TWRP MultiROM jest w zasadzie OTG-Chainloader-Kernel
mówić o.
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 :)