Chroot em uma arquitetura diferente?

4

Eu tenho uma imagem de sistema de arquivos que será usada para um processador ARM, mas eu quero instalar algumas coisas primeiro, como um Desktop, etc. Então eu quero montar o sistema de arquivos em minha máquina Linux e fazer chroot nele a partir daí, e instalar coisas nele a partir desse sistema. Isso é possível, ou as diferenças entre o software i386 e ARM me impedem?

Se for possível, como faço isso? Apenas tentando chroot [pathtorootfs] dá um erro sobre não ser capaz de encontrar o bash.

    
por Zephyr 27.06.2016 / 21:06

3 respostas

4

Você pode executar o software para uma arquitetura diferente usando QEMU e binfmt_misc . Em distribuições com suporte transparente ( eg derivados do Debian usando binfmt-support ) é bastante fácil:

  1. instale binfmt-support no sistema principal;
  2. instale os binários do modo de usuário estático do QEMU ( qemu-user-static em derivadas do Debian) no sistema principal;
  3. copie o emulador apropriado para o seu chroot, em .../usr/bin (no seu caso, provavelmente qemu-arm-static );
  4. chroot no seu sistema.

Se isso é aconselhável ou não é discutível; é certamente usado com bastante frequência para configurar cartões SD para pequenos sistemas ARM. Seja o que for que você faça, você deve se certificar de copiar somente os binários ARM para o seu chroot , além do binário QEMU acima; caso contrário, seu sistema não funcionará quando você inicializar seu dispositivo ARM com ele.

Isso tudo é bem suportado por outras ferramentas de compilação, como debootstrap e schroot , conforme documentado por exemplo por Ian Campbell .

    
por 27.06.2016 / 23:04
1

Não. Não vai funcionar. Você precisa compilar de forma cruzada o software que deseja usar; veja Cross Linux From Scratch ou instale pacotes dentro do sistema em execução em sua arquitetura / computador de destino e use o comando linha lá.

    
por 27.06.2016 / 21:44
0

É possível, mas você precisa dar alguns passos primeiro.

Obviamente, seu hardware não suporta a instrução ARM definida nativamente; Isso significa que você precisa instalar algum software que permita que seu sistema interprete as instruções do ARM e as traduza para seus equivalentes i386. qemu-user pode fazer isso.

Em seguida, você precisa configurar seu sistema para que, ao iniciar um binário ARM, ele inicie o binário qemu-user correto. Isso é possível com o subsistema binfmt-misc .

Uma explicação mais detalhada de como fazer isso em um sistema Debian pode ser encontrada em o wiki do Debian

Obviamente, porém, devido à emulação, isso vai correr bem devagar; pode não valer a pena por esse motivo.

    
por 27.06.2016 / 23:11