21 votes

Est-il possible de démarrer un téléphone Android à partir d'une clé USB ?

Existe-t-il un moyen de démarrer un téléphone Android* à partir d'une clé USB alimentée par le bus** ? Si oui, quelles sont les étapes à suivre pour y parvenir ?

* Par exemple, une avec la fonctionnalité USB OTG.

** Par exemple, une clé USB.

26voto

Nick Pierpoint Points 7976

Veuillez préciser quel est l'objectif visé et pourquoi ?

Les téléphones Android ont leur propre chargeur de démarrage et ne peuvent pas être neutralisés par d'autres moyens.

Ce n'est pas comme le BIOS d'un PC où vous pouvez changer l'ordre de démarrage pour démarrer à partir de certains périphériques tels que le réseau PXE, USB, H.D.D. primaire/secondaire...

Edit :

Après les commentaires ci-dessous, et en relation avec la question de l'OP

Existe-t-il un moyen de démarrer un téléphone Android (par exemple un téléphone avec la fonctionnalité USB OTG) via une clé USB alimentée par le bus ?

Le boot-loader générique (*qui réside sur la puce) n'a aucune connaissance de l'USB etc, car le lk (Little Kernel) est plus concerné par le piégeage des frappes de touches afin de charger en chaîne dans la récupération ou de démarrer directement dans l'environnement Android (En maintenant la touche Vol+Down dans ce cas) - en pseudo-code ( c'est à partir du contexte/aspect de lk, et aussi, les adresses de mémoire se rapportant à la façon de lire les partitions sont codées en dur dans ce lk afin qu'il sache comment traiter la logique ! )

Le noyau lk est la norme de facto de Qualcomm pour les chipsets MSM (Snapdragon) et est adopté par des fabricants tels que Sony, Motorola, LG, Samsung et peut être trouvé dans la source AOSP sous bootable/bootloader .

si ( La touche de réduction du volume est-elle enfoncée ? ) puis

  • Noyau de chargement en chaîne de /recovery dans une adresse particulière de la mémoire, y sauter et commencer l'exécution, en mettant en place l'environnement de récupération.

sinon

  • Noyau de chargement en chaîne de /system dans une adresse particulière de la mémoire, y sauter et commencer l'exécution en faisant apparaître l'environnement Android.

fin si.

Comme le noyau à l'intérieur de lk est assez limité, considérant que l'image binaire du noyau est gravée dans la puce et que l'on ne peut pas l'utiliser. donc aucun moyen de le modifier . Et il faut aussi mentionner que lk contient les fastboot protocole en vue du flashage /boot , /recovery , /system et /data les partitions. Il y a deux séquences pour démarrer, le démarrage primaire et le démarrage secondaire tel qu'il est :

  • Boot primaire -> lk (selon le résultat de la logique)
  • Allez dans le Boot secondaire -> /boot o /recovery

Note complémentaire : Samsung est friand de PBL/SBL (qui sont respectivement Primary Boot Loader et Secondary Boot Loader) dans son jargon lorsqu'il s'agit de modding. Le problème avec Samsung, c'est que, dans certains téléphones, le PBL et le SBL peuvent être cryptés (le Samsung Wave GT-S8500 est un tel exemple, où le portage d'Android a été presque impossible à faire en raison de la DRM dans les chargeurs de démarrage qui était un cauchemar à gérer et qui a fait de la modélisation de ce téléphone un véritable casse-tête). extrêmement difficile, néanmoins, il fonctionne en quelque sorte via un exploit dans le code de FOTA !)

C'est pourquoi il n'y a pas d'installations supplémentaires telles que la fonctionnalité OTG ou quoi que ce soit d'autre comme les communications série, la lecture de SDCard, les graphiques, etc. car cela rendrait le noyau lk plus gros que prévu. En d'autres termes, c'est la plus petite taille possible de noyau qui est désignée pour faire juste le pseudo-code ci-dessus.

En outre, une autre façon de voir les choses est la suivante, et cela dépend de la version d'Android - la fonctionnalité USB OTG est entièrement a apporté dans l'environnement Android, c'est-à-dire lorsque l'écran d'accueil familier apparaît, puis La fonctionnalité OTG est activée. Malheureusement, ce n'est pas le cas quand on regarde du point de vue de lk.

Si vous êtes curieux, voici la Entrée Qualcomm sur le lk ci-dessus qui est une partie de la source C minuscule qui a l'assemblage ARM inclus et trouvé dans la source AOSP de JellyBean 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;
}

9voto

Tamoghna Chowdhury Points 3137

C'est cependant possible dans un sens. Compte tenu des limitations mentionnées dans la réponse de @t0mm13b, il est logique que le chargeur de démarrage mentionné (lk) soit incapable de le faire. Donc, nous démarrons un noyau personnalisé à partir de fastboot (pour les tests), qui démarre, active la fonctionnalité OTG et une fois qu'un noyau valide est trouvé sur le périphérique OTG connecté, le charge en chaîne dans la mémoire et lui transmet le contrôle. Cela pourrait probablement même être intégré dans les récupérations personnalisées modernes comme TWRP qui ont à la fois le support OTG et (dans certains cas) MultiROM.

Cette méthode a été utilisée pour démarrer Ubuntu sur une tablette Nexus 9 :

  1. fastboot boot <otg_chainloader_kernel>
  2. <otg_chainloader_kernel> démarre et active OTG et attend que le dispositif OTG soit connecté.
  3. L'appareil est déconnecté du PC et un lecteur flash USB contenant une image Ubuntu amorçable est connecté à l'appareil via OTG.
  4. <otg_chainloader_kernel> détecte un noyau Linux valide sur le périphérique OTG et lui transmet le contrôle après l'avoir chargé en chaîne dans la mémoire.

Maintenant, si vous voulez, vous pouvez démarrer une image ROM Android compatible de la même manière, mais rappelez-vous que le lecteur OTG devra rester connecté à l'appareil jusqu'à ce que vous décidiez de revenir au système d'exploitation natif (puisque toutes les applications seront chargées à partir de, et toutes les données seront écrites sur le lecteur flash USB, à moins que la ROM Android entière puisse être configurée comme un disque RAM (vous avez déjà entendu parler de Puppy Linux ?), ce qui, étant donné les capacités de mémoire actuelles des appareils Android courants et la taille de la ROM elle-même est actuellement peu pratique). Cela empêche également la recharge pendant le démarrage du système d'exploitation OTG, sur la plupart des appareils dotés de ports de données/chargeurs unifiés.

Source : XDA-Developers Nexus 9 subforum

0voto

Kevin Points 1182

C'est possible et je l'ai fait sur mon acer iconia tablet !!!!

connectez un lecteur flash à votre pc et formatez-le en fat32 utilise rufus pour porter l'iso/dd sur ton lecteur flash

connectez-le à otg et à votre téléphone/tablette Maintenez la touche d'alimentation et appuyez sur le volume vers le bas s'il ne démarre pas, essayez de maintenir la touche d'alimentation et d'appuyer sur le volume haut

puis, à l'aide des touches de volume, déplacez-vous sur UDisk (la marque de votre clé USB) ou SATA ; UDISK (il n'est pas nécessaire que ce soit la marque de votre clé USB, elle peut dire stockage USB) et cliquez sur la touche d'alimentation pour confirmer.

J'ai eu plusieurs problèmes avec le démarrage dans le menu, donc j'ai réussi à éviter que le noyau ne démarre et donc à empêcher Android de démarrer.

Je pense que c'est comme ça : je me suis connecté au PC, puis j'ai supprimé tous les fichiers de la tablette, mais j'ai copié le dossier Android.

Le noyau a été retiré et après le démarrage, le PC a été reconnecté avec un hub usb.

J'espère avoir aidé :)

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X