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

17

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

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

** Par exemple, un lecteur flash.

sampablokuper
la source

Réponses:

23

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

Les téléphones Android ont leurs propres chargeurs de démarrage et ne peuvent pas être remplacé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 appareils tels que Network PXE, USB, HDD primaire / secondaire.

Éditer:

Après les commentaires ci-dessous et en relation avec la question du PO

Existe-t-il un moyen de démarrer un téléphone Android (par exemple, un avec la fonctionnalité USB OTG.) Via un lecteur USB alimenté par bus

Le chargeur de démarrage générique (* qui réside sur le jeu de puces) n'a aucune connaissance de l'USB, etc., car le lk (Little Kernel) est plus préoccupé par le piégeage des touches afin de charger en chaîne dans la récupération ou de démarrer directement dans l'environnement Android (Lorsque vous maintenez la touche Vol + Bas dans ce cas) - en pseudo-code ( cela vient du contexte / aspect de lk, et aussi, les adresses mémoire relatives à la façon de lire les partitions sont codées en dur dans ce lk donc il savoir comment traiter la logique! )

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

si ( est - clé Baisser le volume pressé? ) puis

  • charger en chaîne le noyau de la /recoverypartition dans une adresse particulière en mémoire et y accéder et démarrer l'exécution, en faisant apparaître l'environnement de récupération

autre

  • charger en chaîne le noyau de la /systempartition en une adresse particulière en mémoire et y accéder et commencer l'exécution en mettant en place l'environnement Android.

fin si.

Comme le noyau dans lk est assez limité, étant donné que l'image binaire du noyau est gravée dans la puce et donc aucun moyen de la modifier . Et il convient de mentionner également que lk contient le fastbootprotocole en cours de préparation pour flasher /boot, /recovery, /systemet les /datapartitions. Il y a deux séquences à démarrer, le démarrage principal et le démarrage secondaire tels quels:

  • Démarrage primaire -> lk (selon le résultat de la logique)
  • Accédez au démarrage secondaire -> /bootou/recovery

Note latérale: Samsung aime le PBL / SBL (qui est respectivement le chargeur de démarrage principal et le chargeur de démarrage secondaire) dans leur jargon en ce qui concerne le modding. La chose à propos de Samsung, c'est que, dans certains combinés, PBL et SBL peuvent être cryptés (Samsung Wave GT-S8500 en est un exemple, où le portage d'Android était presque impossible à cause du DRM dans les chargeurs de démarrage qui était un cauchemar gérer et rendre le modding extrêmement difficile, néanmoins, cela fonctionne en quelque sorte via un exploit dans le code FOTA!)

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

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

Si vous êtes curieux, voici l' entrée Qualcomm sur le lk ci-dessus qui fait partie de la minuscule source C qui comprend un assemblage ARM et qui se trouve dans la source AOSP de JellyBean dansbootable/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;
}
t0mm13b
la source
Problème de poulet / œuf ici: je voulais une réponse à ma question afin d'affiner les cas d'utilisation en fonction de la faisabilité; vous me demandez d'abord de donner des cas d'utilisation :) Donc, je ne peux que clarifier vaguement mes objectifs pour le moment. L'une pourrait être de réaliser un chiffrement complet du disque comme en démarrant à partir d'un lecteur USB chiffré (Lok-It / dataShur / etc), de sorte que la saisie d'un code d'accès sur le lecteur évite d'avoir à saisir un mot de passe de déchiffrement sur l'appareil Android. Idéalement, cela pourrait être fait de telle sorte que, une fois le téléphone démarré, le lecteur pourrait être retiré, laissant le téléphone fonctionner correctement jusqu'au prochain redémarrage.
sampablokuper
Bon ... Intéressant - jamais entendu parler d'un tel cas comme ça - de toute façon - pourquoi? Matière à réflexion, entreriez-vous un tel mot de passe? Android ICS vers le haut a la capacité de crypter l'intégralité du volume IIRC - N'avez-vous pas examiné cela?
t0mm13b
Le mot de passe serait entré à l'aide du clavier intégré au lecteur. (Si vous ne savez pas ce que je veux dire par là, recherchez les lecteurs que j'ai mentionnés.) Et oui, j'ai examiné le cryptage intégré d'Android, mais (a) ce n'est pas sans inconvénients (voir, par exemple, la sécurité. stackexchange.com/q/10529 ; v.gd/6hOcmd ), (b) cela ne fonctionne pas sur tous les téléphones, même ceux qui ont des ROMs ICS + disponibles auprès des fabricants (par exemple certains modèles Xperia), et (c) il y en a d'autres cas d'utilisation potentiels pour lesquels la possibilité de démarrer un téléphone / une tablette à partir d'un périphérique de stockage de masse USB serait souhaitable.
sampablokuper
Pour être franc, ce n'est pas réalisable, pour commencer, il n'y a pas un tel chargeur de démarrage pour smartphone qui, simplement, d'un point de vue de haut niveau, "s'arrêtera" jusqu'à ce qu'un mot de passe soit entré! Ce que vous demandez est au-delà de ce forum et nécessite une arène spécialisée, sinon une niche de chargeurs de démarrage personnalisés pour y parvenir! Pour commencer - le chargeur de démarrage générique, lk (son en AOSP sous bootable / bootloader) est adopté de facto par Qualcomm pour leurs chipsets qui sont utilisés par des goûts de Sony, LG, Motorola, pour n'en nommer que quelques-uns ... juste dire, la question n'est pas constructive!
t0mm13b
2
En bref - il n'y a aucun moyen de le faire, vous semblez oublier que l'accent mis sur mes commentaires concernant le chargeur de démarrage et le fait que les smartphones n'ont pas de BIOS non plus ... dis simplement.
t0mm13b
7

C'est possible dans un sens, cependant. Étant donné les limitations mentionnées dans la réponse de @ t0mm13b, il est logique que le chargeur de démarrage (lk) mentionné 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 qui est connecté, charge la chaîne en mémoire et lui passe le contrôle. Cela pourrait même être intégré dans des récupérations personnalisées modernes comme TWRP qui ont à la fois OTG et (dans certains cas) le support MultiROM.

Cela a en fait été utilisé pour démarrer Ubuntu sur une tablette Nexus 9, en utilisant la méthode:

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

Maintenant, si vous le souhaitez, vous pouvez démarrer une image ROM Android compatible de la même manière, mais rappelez-vous que le lecteur OTG devrait rester connecté à l'appareil jusqu'à ce que vous décidiez de revenir au système d'exploitation natif (car toutes les applications se chargeraient à partir de, et toutes les données seraient écrites sur le lecteur flash USB, à moins que l'intégralité de la ROM Android puisse être configurée comme un disque virtuel (jamais entendu parler de Puppy Linux?), ce qui, compte tenu des capacités de mémoire actuelles des appareils Android courants et de la taille du La ROM elle-même est actuellement impraticable). Cela empêche également la charge lors du démarrage sur OTG OS, sur la plupart des appareils dotés de ports de données / chargeur unifiés.

Source: sous-forum XDA-Developers Nexus 9

Tamoghna Chowdhury
la source
Serait-il possible de le faire pour Android afin que je puisse démarrer l'aperçu N sans installer
Suici Doga
@SuiciDoga, je suppose que TWRP MultiROM prend en charge OTG Boot? Il utilise la technique AFAIK ci-dessus, juste sans tous les fastboots. Le kexec-hardbootpatch pour le noyau utilisé par TWRP MultiROM est fondamentalement le dont OTG-Chainloader-Kernelje parle.
Tamoghna Chowdhury
Maintenant, cela dépend également de l'appareil sur lequel vous voudrez peut-être essayer cet exercice. Le Nexus 9 et le Nexus Player ont un TWRP, mais le truc MultiROM ne fonctionne pas sur eux (problèmes x64 / ARM64?). IDK sur le Nexii actuel aussi.
Tamoghna Chowdhury
0

son posible et je l'ai fait sur ma tablette acer iconia !!!!

connectez un lecteur flash à votre PC et formatez en fat32 utilisez rufus pour porter l'iso / dd sur votre 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, maintenez la touche d'alimentation et appuyez sur le volume

puis à l'aide des touches de volume, passez à UDisk (votre marque de lecteur flash) ou SATA; UDISK (il ne doit pas nécessairement s'agir de votre marque USB, il peut s'agir de stockage USB) et cliquez sur la touche marche / arrêt pour confirmer

eh bien, j'ai eu beaucoup de mal à démarrer dans le menu, donc j'ai réussi à éviter le noyau pour démarrer et par là arrêter Android pour démarrer

Je pense que c'était comme ça: je me suis connecté au PC, puis j'ai supprimé tous les effets de la tablette, mais en copiant le dossier Android

le noyau a été retiré et après le démarrage, il a été reconnecté au PC avec un concentrateur USB

j'espère que j'ai aidé :)

EliteXD
la source
Ce doit être un SoC exceptionnel, qui pourrait prendre en charge l'UEFI. Peu de SoC utilisés de nos jours sur les appareils Android vous permettent de configurer l'ordre de démarrage.
Irfan Latif