Esclareça qual é o objetivo pretendido e por quê?
Os telefones Android têm seus próprios gerenciadores de inicialização e não podem ser substituídos por outros meios.
Não é como o BIOS de um PC, onde você pode alternar a ordem de inicialização para inicializar a partir de determinados dispositivos, como Network PXE, USB, HDD principal / secundário.
Editar:
Após os comentários abaixo e em relação à pergunta do OP
Existe alguma maneira de inicializar um telefone Android (por exemplo, um com funcionalidade USB OTG.) Por meio de uma unidade USB alimentada por barramento
O gerenciador de inicialização genérico (* que reside no conjunto de chips) não tem conhecimento de USB etc., pois o lk (Little Kernel) está mais preocupado em capturar pressionamentos de teclas para carregar em cadeia a recuperação ou inicializar diretamente no ambiente Android (Ao pressionar a tecla Vol + Down nesta instância) - no pseudo-código ( isto é do contexto / aspecto do lk, e também, os endereços de memória relativos à leitura das partições são codificados nesse lk, portanto saber como processar a lógica! )
O kernel lk é o padrão de fato da Qualcomm para chipsets MSM (Snapdragon) e adotado por fabricantes como Sony, Motorola, LG, Samsung e pode ser encontrado na fonte AOSP em bootable/bootloader
.
se ( A tecla Diminuir volume está pressionada? ), então
- carregar o kernel em cadeia da
/recovery
partição para um endereço específico na memória e pular para ele e iniciar a execução, criando o ambiente de recuperação
outro
- carregue o kernel em cadeia da
/system
partição para um endereço específico na memória e pule para ele e inicie a execução para exibir o ambiente Android.
fim se.
Como o kernel do lk é bastante limitado, considerando que a imagem binária do kernel é gravada no chip e, portanto, não há como modificá-lo . E também deve ser mencionado que lk contém o fastboot
protocolo em preparação para piscando /boot
, /recovery
, /system
e /data
partições. Existem duas seqüências para inicializar, inicialização primária e inicialização secundária, pois são:
- Inicialização primária -> lk (dependendo do resultado da lógica)
- Vá para Inicialização secundária ->
/boot
ou/recovery
Nota lateral: A Samsung gosta do PBL / SBL (que é o carregador de inicialização primário e o carregador de inicialização secundário, respectivamente) em seus jargões quando se trata de modificação. O problema da Samsung é que, em alguns aparelhos, o PBL e o SBL podem ser criptografados (o Samsung Wave GT-S8500 é um exemplo, em que a transferência do Android para ele era quase impossível de fazer por causa do DRM dentro dos gerenciadores de inicialização, que era um pesadelo para lidar com e fez modding-lo extremamente difícil, no entanto, é uma espécie de trabalhar através de um exploit no código FOTA!)
É por isso que não existem recursos extras, como a funcionalidade OTG ou qualquer outra coisa, como comunicações seriais, leitura de SDCard, gráficos etc., pois isso tornaria o kernel lk maior do que o pretendido. Em outras palavras, é o menor tamanho possível de kernel designado para fazer exatamente o pseudo-código acima.
Além disso, uma outra maneira de olhar para ele é isso, e isso depende da versão Android - o USB funcionalidade OTG está totalmente trouxe até dentro do ambiente Android, ou seja, quando o aparece na tela inicial familiares, em seguida, a funcionalidade do OTG está habilitado. Infelizmente não é o caso quando se olha para ele da perspectiva de lk.
Se você estiver curioso, aqui está a entrada da Qualcomm no lk acima, que faz parte da pequena fonte C que possui o assembly ARM incluído e encontrado na fonte AOSP da JellyBean embootable/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;
}
É possível, em certo sentido, no entanto. Dadas as limitações mencionadas na resposta de @ t0mm13b, faz sentido que o carregador de inicialização mencionado (lk) seja incapaz de fazer isso. Portanto, inicializamos um kernel personalizado a partir de
fastboot
(para teste), que é inicializado, habilita a funcionalidade OTG e, quando um kernel válido é encontrado no dispositivo OTG conectado, carrega-o em cadeia e transfere o controle para ele. Provavelmente, isso pode até ser integrado a recuperações personalizadas modernas, como TWRP, que têm suporte para OTG e (em alguns casos) MultiROM.Na verdade, isso foi usado para inicializar o Ubuntu em um tablet Nexus 9, usando o método:
fastboot boot <otg_chainloader_kernel>
<otg_chainloader_kernel>
inicializa e ativa o OTG e aguarda a conexão do dispositivo OTG.<otg_chainloader_kernel>
detecta um kernel Linux válido no dispositivo OTG e passa o controle para ele após carregá-lo em cadeia na memória.Agora, se você quiser, pode inicializar uma imagem compatível da ROM do Android de maneira semelhante, mas lembre-se de que a unidade OTG precisaria ser mantida conectada ao dispositivo até você decidir retornar ao SO nativo (já que todos os aplicativos carregariam de, e todos os dados seriam gravados na unidade flash USB, a menos que toda a ROM do Android pudesse ser configurada como um ramdisk (já ouviu falar do Puppy Linux?), que, dadas as atuais capacidades de memória de dispositivos Android comuns e o tamanho do A própria ROM atualmente é impraticável). Isso impede a cobrança durante a inicialização no sistema operacional OTG também na maioria dos dispositivos com portas de dados / carregador unificadas.
Fonte: subforum XDA-Developers Nexus 9
fonte
fastboot
s. Okexec-hardboot
patch para o kernel usado pelo TWRP MultiROM é basicamente o queOTG-Chainloader-Kernel
eu falo.seu posible e eu fiz isso no meu tablet Acer iconia !!!!
conecte uma unidade flash ao seu pc e formate ao fat32 use o rufus para portar o iso / dd à sua unidade flash
conecte-o ao otg e ao seu telefone / tablet .. mantenha pressionada a tecla liga / desliga e toque no volume para baixo, se não inicializar, tente segurar a tecla liga-desliga e toque no volume para cima
depois, usando as teclas de volume, mude para o UDisk (marca da sua unidade flash) ou SATA; UDISK (não precisa ser sua marca USB, pode dizer armazenamento USB) e clique na tecla liga / desliga para confirmar
bem, eu tive um problema grave ao inicializar no menu, então, de alguma forma, consegui evitar o kernel para inicializar e, com isso, interromper o android para inicializar
eu acho que era assim: eu me conectei ao pc e apaguei todos os aspectos do tablet, mas copiei a pasta Android
O kernel foi removido e após a inicialização, conectado novamente ao PC com um hub usb
bem espero ter ajudado :)
fonte