Construindo e executando uma imagem do sistema ARM com o QEMU?

5

Estou tentando configurar uma imagem completa do sistema para o ARM ( armhf , armel ou mesmo aarch64 ) com base no Debian que pode ser executado com o QEMU. Infelizmente, todos os exemplos que encontrei na Web iniciam a imagem passando o kernel (e possivelmente o initrd se requer alguns módulos).

Mas, eu realmente gostaria de iniciar o sistema como é feito com qemu-system-amd64 , apenas dando a imagem do disco e a imagem do CD-ROM (para iniciar a instalação).

Eu posso entender que não há nenhum padrão para -machine e -cpu , mas não consigo encontrar nenhuma pista na Web sobre como fazer algo como:

#> wget \
   http://cdimage.debian.org/.../armhf/iso-cd/debian-testing-armhf-netinst.iso
...
#> qemu-img create -f qcow2 debian-armhf.qcow 20G
...
#> qemu-system-arm -machine vexpress-a9 -cpu cortex-a9     \
                   -hda debian-armhf.qcow                  \
                   -cdrom debian-testing-amd64-netinst.iso \
                   -boot d
...
#> qemu-system-arm -machine vexpress-a9 -cpu cortex-a9     \
                   -hda debian-armhf.qcow                  \
                   -net nic -net user,hostfwd=tcp::2222-:22
...

Então, eu realmente me pergunto se tal coisa é apenas possível ... E se sim, como? E se não, por quê?

    
por perror 20.09.2018 / 10:08

1 resposta

3

Essa é uma ótima pergunta e eu escolhi mergulhar em mim há um tempo atrás, apenas para mim estava usando o MIPS / MIP64.

Existem algumas questões que tornam este desafio.

Ao inicializar um host Linux, o Kernel precisa entender o hardware com o qual está trabalhando. Para algumas arquiteturas (como amd64), a descoberta do firmware é feita pelo BIOS através de "Configuração Avançada e Interface de Energia" ( ACPI ). Em outros casos, isso é feito por uma interface de firmware extensível ( EFI ) ou até mesmo pela ATAGS como uma solução muito antiga. Na maioria dos sistemas embarcados modernos, o uso do ATAGS foi substituído por um mecanismo chamado "blob da árvore de dispositivos" ( DTB ). Uma série de usuários úteis fez um trabalho muito melhor explicando a diferença do que eu .

O propósito de tudo isso é ajudar a sugerir o kernel quanto à configuração do hardware e geralmente funciona em conjunto com o gerenciador de inicialização. No seu caso, escolher entre ARM pouco endian ( armel ), ARM hard floating point ( armhf ) e ARM 64 bit ( aarch64 ) é uma decisão crítica, pois tem ramificações para a escolha de pacotes compilados , Kernel, etc, como tudo precisa estar em conformidade com a "arquitetura de conjunto de instruções" emulado ( ISA ).

Eu entendo que você quer a simplicidade de um disco em branco e uma imagem de CD, mas é por isso que não há "instaladores" dessa forma para sistemas como o Raspberry Pi *. Quando você faz o download de uma Imagem Raspbian, ela inclui um conjunto estruturado de partições que incluem um gerenciador de inicialização (das uBoot), um blob da árvore de dispositivos para o hardware correspondente e um conjunto básico de pacotes disponíveis com os repositórios de pacotes configurados.

Isto toca em outro trivia interessante ... Você já olhou para o que esta imagem ISO está fazendo quando você "instala" o Linux?

Deixe-me usar instaladores baseados no Anaconda (Fedora, RHEL, CentOS, etc) como um exemplo.

Quando você inicia a instalação, ele está inicializando um sistema mínimo ao vivo que começa a executar automaticamente o utilitário python Anaconda . O Anaconda então pede ao usuário para responder a uma série de perguntas, preenche um arquivo de configuração em seu idioma específico do domínio, e então cria um chroot e executa um conjunto de instalações de pacotes dentro daquele chroot.

Isso ... de maneira pequena, é como usar essa imagem Raspbian.

Então, o que isso significa?

Bem, primeiro, há respostas que eu recomendaria, dependendo de como você deseja prosseguir?

Se a emulação de um RPi for suficiente, deixe-me sugerir: Usando o QEMU para emular um Raspberry Pi

Se você deseja emular algo mais como um sistema baseado em "nuvem", George Hawkins mantém uma Gist com algumas ótimas instruções .

Se você realmente quer ir a partir do zero, o Usuário Debian Aurel32 mantém há anos um conjunto de imagens básicas prontas para inicializar bem como um ótimo artigo em seu blog sobre um processo similar .

    
por 26.09.2018 / 03:01