Gibt es eine Möglichkeit, ein Android-Telefon * von einem USB-Laufwerk mit Bus-Stromversorgung ** zu starten? Wenn ja, was sind die Schritte, um dies zu erreichen?
* ZB eines mit USB-OTG-Funktionalität.
** ZB ein Flash-Laufwerk.
Gibt es eine Möglichkeit, ein Android-Telefon * von einem USB-Laufwerk mit Bus-Stromversorgung ** zu starten? Wenn ja, was sind die Schritte, um dies zu erreichen?
* ZB eines mit USB-OTG-Funktionalität.
** ZB ein Flash-Laufwerk.
Antworten:
Bitte klären Sie, was das beabsichtigte Ziel ist und warum?
Android-Telefone verfügen über eigene Bootloader und können nicht auf andere Weise überschrieben werden.
Es ist nicht mit dem BIOS eines PCs vergleichbar, bei dem Sie die Startreihenfolge ändern können, um von bestimmten Geräten wie Network PXE, USB, primärer / sekundärer Festplatte zu starten.
Nach den Kommentaren unten und in Bezug auf die Frage des OP
Gibt es eine Möglichkeit, ein Android-Telefon (z. B. eines mit USB-OTG-Funktionalität) über ein USB-Laufwerk mit Bus-Stromversorgung zu starten?
Der generische Bootloader (*, der sich auf dem Chipsatz befindet) hat keine Kenntnisse über USB usw., da der lk (Little Kernel) sich mehr darum kümmert, Tastatureingaben abzufangen, um sie in die Wiederherstellungsumgebung zu laden oder direkt in die Android-Umgebung zu booten (Wenn Sie in diesem Fall die Taste "Vol + Down" gedrückt halten) - im Pseudocode ( dies ist vom Kontext / Aspekt von lk abhängig). Außerdem sind die Speicheradressen, die das Lesen der Partitionen betreffen, in diesem lk fest codiert, so dass dies der Fall ist können die Logik verarbeiten! )
Der lk-Kernel ist der De-facto-Standard von Qualcomm für MSM-Chipsätze (Snapdragon) und wird von Herstellern wie Sony, Motorola, LG, Samsung übernommen und ist in der AOSP-Quelle unter zu finden bootable/bootloader
.
Wenn ( Lautstärketaste gedrückt? ), dann
/recovery
Partition in eine bestimmte Adresse im Speicher, springen Sie zu dieser und starten Sie die Ausführung, um die Wiederherstellungsumgebung aufzurufensonst
/system
Partition in eine bestimmte Adresse im Speicher und springen Sie zu dieser und starten Sie die Ausführung, indem Sie die Android-Umgebung aufrufen.ende wenn.
Da der Kernel in lk ziemlich begrenzt ist, ist das Binärimage des Kernels in den Chip eingebrannt und kann daher nicht geändert werden . Und sollte auch erwähnt werden , dass lk das enthält fastboot
Protokoll in Vorbereitung auf zu blinken /boot
, /recovery
, /system
und /data
Partitionen. Es gibt zwei zu startende Sequenzen, den primären und den sekundären Start:
/boot
oder/recovery
Nebenbemerkung: Samsung mag den PBL / SBL (der primären Bootloader bzw. den sekundären Bootloader) in seiner Fachsprache, wenn es um das Modden geht. Was Samsung betrifft, ist, dass in einigen Mobilteilen PBL und SBL möglicherweise verschlüsselt sind (Samsung Wave GT-S8500 ist ein solches Beispiel, bei dem die Portierung von Android fast unmöglich war, da DRM in den Bootloadern ein Albtraum war es extrem schwierig zu handhaben und zu modifizieren, aber es funktioniert irgendwie über einen Exploit im FOTA-Code!)
Aus diesem Grund gibt es keine zusätzlichen Funktionen wie OTG-Funktionen oder andere Funktionen wie serielle Kommunikation, Lesen von SD-Karten, Grafiken usw., da der lk-Kernel dadurch größer wird als vorgesehen. Mit anderen Worten, es ist die kleinstmögliche Kernelgröße, die dafür vorgesehen ist, dass nur der oben genannte Pseudocode auftritt.
Auch eine andere Art und Weise, es zu betrachten ist dies, und dies ist abhängig von der Android - Version - die USB - OTG - Funktionalität voll wird gebracht in der Android - Umgebung auf, das heißt , wenn die bekannte Home - Bildschirm angezeigt wird , dann OTG - Funktionalität aktiviert ist. Aus lks sicht ist das leider nicht der fall.
Wenn Sie neugierig sind, finden Sie hier den Qualcomm-Eintrag auf der obigen Seite, der Teil der winzigen C-Quelle ist, in der die ARM-Assembly enthalten ist und die in JellyBeans AOSP-Quelle in enthalten istbootable/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;
}
Es ist jedoch in gewissem Sinne möglich. Angesichts der in der Antwort von @ t0mm13b genannten Einschränkungen ist es sinnvoll, dass der erwähnte Bootloader (lk) dazu nicht in der Lage ist. Wir booten also einen benutzerdefinierten Kernel fastboot
(zum Testen), der bootet, die OTG-Funktionalität aktiviert und sobald ein gültiger Kernel auf dem angeschlossenen OTG-Gerät gefunden wurde, diese in den Speicher kettet und die Steuerung an ihn übergibt. Dies könnte wahrscheinlich sogar in moderne benutzerdefinierte Wiederherstellungen wie TWRP integriert werden, die sowohl OTG- als auch (in einigen Fällen) MultiROM-Unterstützung bieten.
Dies wurde tatsächlich verwendet, um Ubuntu auf einem Nexus 9-Tablet mit der folgenden Methode zu starten:
fastboot boot <otg_chainloader_kernel>
<otg_chainloader_kernel>
bootet und aktiviert OTG und wartet auf den Anschluss des OTG-Geräts.<otg_chainloader_kernel>
Erkennt einen gültigen Linux-Kernel auf dem OTG-Gerät und übergibt ihm die Kontrolle, nachdem er in den Speicher geladen wurde.Wenn Sie möchten, können Sie jetzt auf ähnliche Weise ein kompatibles Android-ROM-Image starten. Beachten Sie jedoch, dass das OTG-Laufwerk mit dem Gerät verbunden bleiben muss, bis Sie zum nativen Betriebssystem zurückkehren (da alle Apps geladen würden) und alle Daten würden auf das USB - Flash - Laufwerk geschrieben, es sei denn, das gesamte Android - ROM könnte als Ramdisk konfiguriert werden (jemals von Puppy Linux gehört?) ROM selbst ist derzeit unpraktisch). Dies verhindert, dass die meisten Geräte mit einheitlichen Daten- / Ladeanschlüssen auch beim Booten mit OTG OS aufgeladen werden.
fastboot
s. Der kexec-hardboot
Patch für den von TWRP MultiROM verwendeten Kernel ist im Grunde das, worüber OTG-Chainloader-Kernel
ich spreche .
Es ist möglich und ich habe es auf meinem Acer Iconia Tablet gemacht !!!
Schließen Sie ein Flash-Laufwerk an Ihren PC an und formatieren Sie es mit Fat32. Verwenden Sie Rufus, um die ISO / DD auf Ihr Flash-Laufwerk zu portieren
Schließen Sie es an otg und an Ihr Telefon / Tablet an. Halten Sie die Ein- / Aus-Taste gedrückt und tippen Sie auf die Lautstärke, wenn es nicht startet. Halten Sie die Ein- / Aus-Taste gedrückt und tippen Sie auf die Lautstärke
Wechseln Sie dann mit den Lautstärketasten zu UDisk (der Marke Ihres Flash-Laufwerks) oder SATA. UDISK (es muss nicht unbedingt Ihre USB-Marke sein, es kann USB-Speicher heißen) und klicken Sie zur Bestätigung auf die Einschalttaste
Nun, ich hatte ernsthafte Probleme mit dem Booten des Menüs, also habe ich es irgendwie geschafft, den Kernel nicht zu booten und damit den Android zu stoppen, um zu booten
Ich denke, es war wie folgt: Ich habe eine Verbindung zum PC hergestellt und dann alle Assects vom Tablet gelöscht, aber den Android-Ordner kopiert
kernel wurde entfernt und nach dem booten mit einem usb hub wieder mit dem pc verbunden
Nun hoffe ich habe geholfen :)