¿Hay alguna forma de iniciar un teléfono Android * desde una unidad USB alimentada por bus **? Si es así, ¿cuáles son los pasos para lograr esto?
* Por ejemplo, uno con funcionalidad USB OTG.
** Por ejemplo, una unidad flash.
¿Hay alguna forma de iniciar un teléfono Android * desde una unidad USB alimentada por bus **? Si es así, ¿cuáles son los pasos para lograr esto?
* Por ejemplo, uno con funcionalidad USB OTG.
** Por ejemplo, una unidad flash.
Respuestas:
Por favor, aclare cuál es el objetivo previsto y por qué.
Los teléfonos Android tienen sus propios cargadores de arranque y no pueden ser anulados por otros medios.
No es como el BIOS de una PC donde puede cambiar el orden de arranque para arrancar desde ciertos dispositivos como Network PXE, USB, HDD primario / secundario.
Después de los comentarios a continuación, y en relación con la pregunta del OP
¿Hay alguna manera de arrancar un teléfono Android (por ejemplo, uno con funcionalidad USB OTG) a través de una unidad USB alimentada por bus?
El cargador de arranque genérico (* que reside en el conjunto de chips) no tiene conocimiento de USB, etc., ya que lk (Little Kernel) está más preocupado por atrapar pulsaciones de teclas para encadenar en la recuperación o arrancar directamente en el entorno Android (Al mantener presionada la tecla Vol + Abajo en este caso) - en pseudocódigo ( esto es del contexto / aspecto de lk, y también, las direcciones de memoria relacionadas con cómo leer las particiones están codificadas en este lk, por lo que será ¡sepa cómo procesar la lógica! )
El kernel lk es el estándar de facto de Qualcomm para los conjuntos de chips MSM (Snapdragon) y adoptado por fabricantes como Sony, Motorola, LG, Samsung y se puede encontrar en la fuente AOSP en bootable/bootloader
.
si ( ¿se presiona la tecla Bajar volumen? ) entonces
/recovery
partición a una dirección particular en la memoria y saltar a él e iniciar la ejecución, para abrir el entorno de recuperaciónmás
/system
partición a una dirección particular en la memoria y saltar a él e iniciar la ejecución para abrir el entorno Android.terminara si.
Como el núcleo dentro de lk es bastante limitado, teniendo en cuenta que la imagen binaria del núcleo se graba en el chip y, por lo tanto, no hay forma de modificarlo . Y también hay que mencionar que lk contiene el fastboot
protocolo de preparación para intermitentes /boot
, /recovery
, /system
y /data
particiones. Hay dos secuencias para arrancar, arranque primario y arranque secundario tal como están:
/boot
o/recovery
Nota al margen : Samsung aprecia el PBL / SBL (que es el cargador de arranque primario y el cargador de arranque secundario respectivamente) en su jerga cuando se trata de modificación. Lo que pasa con Samsung es que, en algunos teléfonos, PBL y SBL pueden estar encriptados (Samsung Wave GT-S8500 es uno de esos ejemplos, donde transferir Android a él era casi imposible debido al DRM dentro de los cargadores de arranque, lo cual era una pesadilla tratar y hacer que la modificación sea extremadamente difícil, sin embargo, ¡está funcionando a través de un exploit en el código FOTA!)
Esta es la razón por la cual no hay servicios adicionales, como la funcionalidad OTG o cualquier otra cosa, como comunicaciones en serie, lectura de tarjetas SD, gráficos, etc., ya que haría que el núcleo lk fuera más grande de lo previsto. En otras palabras, es el tamaño de núcleo más pequeño posible designado para hacer que suceda el pseudocódigo anterior.
Además, otra forma de verlo es esto, y esto depende de la versión de Android - la funcionalidad USB OTG está totalmente trajo dentro del entorno de Android, es decir, cuando los familiares que aparezca la pantalla de inicio, a continuación, la funcionalidad de OTG está habilitada. Desafortunadamente, no es el caso cuando se mira desde la perspectiva de lk.
Si tiene curiosidad, aquí está la entrada de Qualcomm en el lk anterior, que es parte de la pequeña fuente C que tiene el ensamblaje ARM incluido y se encuentra en la fuente AOSP de JellyBean enbootable/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;
}
Sin embargo, es posible en cierto sentido. Dadas las limitaciones mencionadas en la respuesta de @ t0mm13b, tiene sentido que el gestor de arranque mencionado (lk) sea incapaz de hacerlo. Entonces, iniciamos un núcleo personalizado desde fastboot
(para pruebas), que arranca, habilita la funcionalidad OTG y una vez que se encuentra un núcleo válido en el dispositivo OTG que está conectado, lo carga en cadena en la memoria y le pasa el control. Esto probablemente incluso podría integrarse en recuperaciones personalizadas modernas como TWRP que tienen soporte OTG y (en algunos casos) MultiROM.
Esto realmente se ha utilizado para arrancar Ubuntu en una tableta Nexus 9, usando el método:
fastboot boot <otg_chainloader_kernel>
<otg_chainloader_kernel>
arranca y habilita OTG y espera a que se conecte el dispositivo OTG.<otg_chainloader_kernel>
detecta un núcleo Linux válido en el dispositivo OTG y le pasa el control después de cargarlo en cadena en la memoria.Ahora, si lo desea, puede iniciar una imagen ROM de Android compatible de manera similar, pero recuerde que la unidad OTG debería mantenerse conectada al dispositivo hasta que decida regresar al sistema operativo nativo (ya que todas las aplicaciones se cargarían desde, y todos los datos se escribirían en la unidad flash USB, a menos que toda la ROM de Android se pueda configurar como un disco RAM (¿alguna vez se supo de Puppy Linux?), lo que, dada la capacidad de memoria actual de los dispositivos Android comunes y el tamaño del La ROM en sí misma es actualmente poco práctica). Eso impide cargar mientras se inicia en OTG OS, también, en la mayoría de los dispositivos con puertos de datos / cargador unificados.
Fuente: XDA-Developers Nexus 9 subforum
fastboot
s. El kexec-hardboot
parche para el núcleo utilizado por TWRP MultiROM es básicamente el OTG-Chainloader-Kernel
que hablo.
es posible y lo hice en mi tableta acer iconia !!!!
conecte una unidad flash a su PC y formatee a fat32 use rufus para portar el iso / dd a su unidad flash
conéctelo a otg y a su teléfono / tableta ... mantenga presionada la tecla de encendido y toque el volumen hacia abajo si no se inicia, intente mantener presionada la tecla de encendido y toque el volumen hacia arriba
luego, usando las teclas de volumen, pase a UDisk (la marca de su unidad flash) o SATA; UDISK (no tiene que ser su marca usb, puede decir almacenamiento usb) y haga clic en la tecla de encendido para confirmar
bueno, tuve problemas con el sistema de arranque en el menú, así que de alguna manera me las arreglé para evitar que el kernel se iniciara y así detuve el arranque de Android
Creo que fue así: me conecté a la PC, luego eliminé todos los componentes de la tableta, pero copié la carpeta de Android
Se eliminó el núcleo y después del arranque se volvió a conectar a la PC con un concentrador USB
bueno espero haber ayudado :)