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.
la source
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.
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.
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
/recovery
partition 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érationautre
/system
partition 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 fastboot
protocole en cours de préparation pour flasher /boot
, /recovery
, /system
et les /data
partitions. Il y a deux séquences à démarrer, le démarrage principal et le démarrage secondaire tels quels:
/boot
ou/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;
}
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:
fastboot boot <otg_chainloader_kernel>
<otg_chainloader_kernel>
démarre et active OTG et attend la connexion du périphérique OTG.<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
la source
fastboot
s. Lekexec-hardboot
patch pour le noyau utilisé par TWRP MultiROM est fondamentalement le dontOTG-Chainloader-Kernel
je parle.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é :)
la source