17 votos

Es posible arrancar un teléfono Android desde una unidad USB?

Hay alguna forma de arrancar un teléfono Android* desde un USB alimentado por bus de la unidad**? Si es así, ¿cuáles son los pasos para lograr esto?

* E. g. uno con la funcionalidad USB OTG.

* * * E. g. una unidad flash.

23voto

Nick Pierpoint Puntos 7976

Por favor aclarar cuál es el objetivo y por qué?

Los teléfonos Android tienen su propio arranque-cargadores y no puede ser reemplazado por otros medios.

No es como un PC, la BIOS donde se puede cambiar el orden de arranque para que arranque desde ciertos dispositivos tales como la Red PXE, USB, Primaria y Secundaria del H. D. D...

Editar:

Después de los comentarios de abajo, y en relación a la pregunta del OP

Hay alguna forma de arrancar un teléfono Android (E. g. uno con la funcionalidad USB OTG.) a través de la vía de un USB alimentado por bus de la unidad de

El genérico cargador de arranque (*que se encuentra en el chip-set) no tiene conocimiento de USB, etc, como la lc (Poco Kernel) se preocupa más acerca de interceptar las pulsaciones de teclas en orden a la cadena de carga en la recuperación o para arrancar directamente en Android ambiente (Cuando la celebración de Vol+tecla Abajo en este ejemplo) - en pseudo-código (esto es desde el contexto/aspecto de la lc, y también, las direcciones de memoria que pertenecen a cómo leer las particiones están codificadas en este lc por lo que se sabe cómo procesar la lógica!)

La lc kernel es el estándar de facto por Qualcomm para los HSH chipsets (Snapdragon) y adoptado por fabricantes como Sony, Motorola, LG, Samsung y se puede encontrar en la AOSP de origen bajo bootable/bootloader.

si (Es la tecla Bajar Volumen presionado?) entonces

  • la cadena de carga del núcleo de /recovery partición en particular dirección en la memoria y saltar a él y comenzar la ejecución, en llevar hasta el entorno de recuperación

otra cosa

  • la cadena de carga del núcleo de /system partición en particular dirección en la memoria y saltar a él y comenzar la ejecución en la educación de los Android ambiente.

end if.

Como el kernel dentro de lc es bastante limitado, teniendo en cuenta que la imagen binaria del núcleo es grabado en el chip y por lo tanto no hay manera de modificarlo. Y también se debe mencionar que la lc contiene la fastboot protocolo en la preparación para el flasheo /boot, /recovery, /system y /data de particiones. Hay dos secuencias de arranque, arranque primario y secundario de arranque como lo que es:

  • De Inicio principal -> lc (dependiendo del resultado de la lógica)
  • Ir a la Secundaria de Inicio -> /boot o /recovery

Nota al margen: Samsung es amante de la PBL/SBL (Que es el Principal Gestor de Arranque y el Gestor de Arranque Secundario, respectivamente) en su jerga cuando se trata de modding. Cosa acerca de Samsung, es que, en algunos teléfonos, PBL y SBL puede ser cifrada (Samsung Wave GT-S8500 es un ejemplo, donde portar Android a casi era imposible de hacer, porque el DRM dentro de los cargadores de arranque que fue una pesadilla para tratar y modding es extremadamente difícil, sin embargo, es una especie de trabajo a través de un exploit en el código de la FOTA!)

Esta es la razón por la que no hay otras instalaciones adicionales, tales como la funcionalidad OTG o cualquier otra cosa como la serie de las comunicaciones, de la lectura de la SDCard, gráficos, etc que podría hacer que la lc núcleo más grande que es la intención. En otras palabras, es el tamaño más pequeño posible de núcleo que es designado para hacer solo el pseudo-código anterior suceda.

También, otra manera de ver esto es la siguiente, y esto depende de la versión de Android - USB OTG funcionalidad es totalmente trajo en el entorno Android, yo.e cuando el familiar aparece una pantalla de inicio, a continuación, OTG funcionalidad está habilitada. Por desgracia no es el caso cuando se lo mira desde lc perspectiva.

Si tienes curiosidad, aquí está el Qualcomm entrada en el anterior lc, que es una parte de la pequeña fuente en C que tiene el BRAZO de montaje incluido y se encuentra en JellyBean del AOSP origen en 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;
}

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X