Tutorial QEMU mc514

Este tutorial vai guia-lo através da preparação do ambiente do qemu, utilizado nos trabalhos práticos da disciplina mc514 do 1o. semestre de 2008. O QEMU é um emulador de cpus que tem ganhado espaço hoje em dia, por ser a tecnologia utilizada como device model para as principais tecnologias de virtualização disponíveis (xen, kvm, etc)

Para as atividades, você vai precisar do código fonte de um kernel Linux. As árvores estáveis oficiais podem ser encontradas em kernel.org A priori, não haverá requisitos específicos referentes à  versão utilizada, então sinta-se a vontade para pegar qualquer uma.

Atenção! Ao clicar no número da versão, você baixará apenas o patch em relação à  versão anterior. Para baixar a árvore toda, você deve clicar em "F", (Full)

Se você está no IC: Aqui esta um link para a versão 26.24.2, provavelmente mais rápido ;-). Há também a opção de copiá-lo do home da islene, em /home/staff/islene/mc514/.

Com a árvore em mãos, descomprima-a fazendo:

tar xjvf linux-2.6.xyz.tar.bz2

O segundo passo é compilar o kernel. Um arquivo de configuração de exemplo pode ser encontrado aqui. Depois de baixar esse arquivo, faça:

cp config-exemplo linux-2.6.xyz/.config
cd linux-2.6.xyz
make bzImage -j5 (-j[numero de processadores + 1])

Caso em sua versão estejam disponíveis opções de configuração novas (não presentes na época que o .config foi gerado), você será questionado sobre elas. No geral, simplesmente apertar enter costuma funcionar ;-)

Construindo em uma máquina de 64-bits

O comando acima supõe que você está executando em uma máquina de 32-bits. (Ex, as máquinas do IC). Caso você esteja executando em uma máquina de 64-bits, a última etapa deve ser:
make ARCH="i386" CFLAGS="-m32" bzImage -j5

Inicializando sua máquina virtual

Você pode encontrar aqui uma imagem de disco pronta, preparada especificamente para a disciplina (disco.img).


Se você está no IC: Há links no public_html da islene e na área da islene (/home/staff/islene/mc514/disco.img)

Com ela em mãos, inicie o qemu com o seguinte comando:

qemu -hda /tmp/disco.img -kernel arch/x86/boot/bzImage -append "ro root=/dev/sda console=ttyS0 console=tty0" -serial file:/tmp/serial.log

Obs: Se sua versão do kernel não for suficientemente recente, você poderá ter um diretório "arch/i386/" no lugar de "arch/x86".

Note que a saída serial de sua maquina virtual será direcionada para o arquivo /tmp/serial.log

Na tela de login, use as seguintes informações:

sem um terminal gráfico

Por padrão, o qemu abrirá uma janela SDL. Se você estiver logado remotamente ou por algum outro motivo não desejar saída gráfica, execute:
qemu -hda /tmp/disco.img -kernel arch/x86/boot/bzImage -append "ro root=/dev/sda console=ttyS0" -nographic

opcional

por simplicidade, o kernel fornecido vem sem suporte a carga de módulos, e initrd. Caso você queira, depois de habilitado, um initrd pode ser passado com a opção -initrd para o qemu.

desligando a máquina

Você pode desligar a máquina virtual procedendo da mesma forma que faria para desligar uma máquina física normal. Em particular,
init 0
é suficiente.

Outras tecnologias:

Existem também outras tecnologias interessantes. A maioria delas não pode ser utilizada no IC, por necessitarem de acesso de root. Ainda assim, coloco aqui os links para quem se interessar em usar em casa, ou simplesmente saber mais