Tutorial: Bochs

Tutorial: Bochs
Para quem não conhece, o Bochs é um emulador de micros x86. Ele simula um PC completo dentro de uma janela. Assim você pode rodar simultaneamente qualquer sistema operacional, sem o risco de danificar o seu computador, já que estará usando uma máquina virtual. É ideal para testar aqueles projetos de sistemas operacionais experimentais que existem no SourceForge. O próprio Bochs está no SourceForge: http://bochs.sourceforge.net.

Ele é muito similar ao VMWare, porém é de graça. O Bochs tem alguns extras, que precisam ser habilitados no momento da compilação. Uns são bastante estáveis e até poderiam fazer parte da distribuição binária, outros não estão lá porque são experimentais, como o suporte às instruções x86-64 da AMD.

Apesar do Bochs e o VMWare realizarem a mesma tarefa, eles usam uma técnica de simulação diferente. O VMWare recebe as instruções da máquina virtual e repassa para a máquina real, é o que chamam de virtualização. Já o Bochs, simula todas as instruções da máquina virtual na real, a vantagem disso é que o Bochs roda em outras arquiteturas além do x86: Sparc, Alpha, PowerPC e MIPS. Não importa qual seja a plataforma usada para rodar o Bochs, ele sempre simula um x86.

A desvantagem dessa portabilidade toda é o baixo desempenho, já que ele terá que executar várias instruções na máquina real para simular uma instrução na máquina virtual. Para resolver esse problema do desempenho, existe o Plex86, que também está no SourceForge: http://plex86.sourceforge.net. Ele usa uma técnica de virtualização similar ao do VMWare. O projeto mantido por Kevin Lawton, o autor original do Bochs, ainda está num estágio bem recente de desenvolvimento, mas já rendeu algumas melhorias ao Bochs.

Baixando

A forma mais comum de distribuir um software livre é através do código fonte, mas isso pode não ser conveniente para muita gente, principalmente os usuários do Windows. Você pode baixar os binários já compilados para a sua plataforma, existem versões para Windows, Linux e MacOSX.

Se você usa o Linux pode baixar os fontes e compilar você mesmo, não é muito difícil, basta ter os pacotes de desenvolvimento, e você poderá incluir opções que não estão presentes na distribuição binária. Outras versões de Unix também funcionarão de maneira similar ao Linux, mas nestes casos a única opção é compilar os fontes, não existem binários prontos para outras versões de Unix.

O Windows é uma péssima plataforma de desenvolvimento, portanto tentar compilar os fontes no Windows não deve ser uma tarefa muito fácil, a não ser que você use o cygwin.

Instalando

Se você baixou o instalador para Windows, é concordar com a licença (LGPL), selecionar os pacotes. O DLX Linux Demo é uma versão compacta do Linux com apenas 10MB para demonstrar o funcionamento do Bochs. É uma boa idéia instalar ele, basta marcar a opção, assim, se você não conseguir lidar muito bem com o Bochs, pelo menos você poderá ver ele funcionando :-).
bochs01
Em seguida selecione a pasta de destino e clique em “Install”. Pronto! Você já pode ver o DLX Linux em funcionamento.
bochs02
Esta versão para Windows não tem todos os recursos, você teria baixar os fontes e recompilar para adicionar suporte à rede, etc.

Para os usuários de Linux é bem fácil, basta instalar o RPM. O RPM inclui todos os módulos como plugins, basta satisfazer as dependências. Para as distribuições não baseadas no RPM o alien pode contornar o problema. Você pode também compilar os fontes, assim você pode adicionar as otimizações para o seu processador, já que o RPM não inclui nenhuma otimização.

Com os fontes basta descomprimir, e usar os famosos comandos “./configure; make; make install”. Você pode modificar as opções de compilação adicionando-as ao comando “./configure“. Por exemplo: “./configure –enable-all-optimizations –enable-host-specifics-asms –with-wx” ira ativar todas as otimizações e habilitar o uso de uma interface gráfica (veja detalhes mais adiante).
bochs03
Você não precisa ser root para compilar, porém você terá de se tornar root ao instalar (o comando “make install”). Mas lembre-se de que você pode instalar no seu diretório pessoal (home) simplesmente adicionando “–prefix ~” ao comando “./configure” e não esquecendo de colocar o “$HOME/bin” no path: export PATH=”$HOME/bin:$PATH”. Assim você não precisa se tornar root e deixa o resto do sistema intacto.

Por favor, lembre-se de que para compilar você precisa dos pacotes de desenvolvimento.

O DLX Linux está apenas nas distribuições binárias, se você baixou os fontes, baixe também o RPM e instale usando –nodeps. Neste caso, certifique-se de rodar o Bochs que você compilou, não o que veio no pacote RPM.

Se tudo ocorreu bem, você poderá rodar o DLX Linux com o comando “bochs-dlx”. Da primeira vez que você rodar ele vai pedir para você confirmar a cópia de um arquivo de 10MB, aceite e em pouco tempo você verá o DLX Linux em ação. Na tela de login basta digitar root como nome de usuário, neste Linux o root não tem senha.

Configurando

Existem três métodos para configurar o Bochs, podendo inclusive ser utilizados juntos. A forma tradicional é através de um arquivo de texto simples. Existe uma interface em modo texto e uma gráfica. Esta última é a mais fácil de usar, porém não está incluída na distribuição binária para Windows, talvez nas próximas versões.
bochs04
Quando você der o comando “bochs” ele irá ler um arquivo de configuração no diretório atual, em seguida em $HOME. O arquivo pode ser .bochsrc, bochsrc, bochsrc.txt ou, no Windows, bochsrc.bxrc. Você também pode especificar um outro qualquer. No Windows, o instalador (opcional) registra a extensão .bxrc, portanto basta um duplo clique no arquivo.

O Bochs inclui um arquivo de exemplo muito bem comentado, o arquivo “bochsrc-sample.txt“. Repare nas opções “config_interface” e “display_library”.

Para configurar usando a interface gráfica, você precisará do wxWindows. Caso ele não esteja incluído na sua distribuição, você pode baixar em http://www.wxwindows.org. Existem várias versões, baixe a versão GTK. O wxWindows é multi-plataforma, mas não está incluído o suporte ao wxWindows na distribuição binária para Windows e como compilar no Windows é muito trabalhoso, é pouco provável que você consiga usar a interface gráfica no Windows.

A não ser que você vá rodar diretamente do disquete ou do cd-rom, você terá que criar um disco virtual para a sua máquina virtual. O Bochs usa uma simples imagem de disco para criar o disco virtual, a única restrição é que você terá de informar o número de cilindros, cabeças e setores. Note que é uma imagem de disco, não de partição, não basta você copiar /dev/hda1 para um arquivo usando o dd, você teria que copiar /dev/hda para um arquivo em outro disco. Apesar de nas versões Unix ser possível, não é aconselhável usar um disco real diretamente.

O Bochs traz um utilitário para a criação de imagens de disco, o bximage, que cria também imagens de disquetes e informa os parâmetros para configuração. Ele cria uma imagem vazia, você deve posteriormente particionar e formatar o “disco”.
bochs05
O disquete e o cd-rom podem ser usados diretamente, bastando inserir no drive, ou você pode criar uma imagem deles também. A vantagem de criar uma imagem é um melhor desempenho, principalmente no caso dos disquetes, já que o disco rígido é muito mais rápido. Mas se você for usá-los apenas umas poucas vezes não faz muita diferença.

Com o suporte ao wxWindows, ao rodar o Bochs (use o comando “bochs -n ‘config_interface: wx‘”) você terá esta tela:
bochs06
Não há muito o que falar sobre os menus, exceto o Edit. É lá que está tudo o que você vai precisar. Em Floppy disk 0 e 1 você configura seus disquetes, pode ser um disco real ou uma imagem. Nos ATA Channels são os discos e cdroms, para usar a imagem criada com o bximage ficaria assim:
bochs07
Você pode até especificar o seu “modelo” de disco. Para usar o cdrom que estiver no drive, habilite o segundo disco do ATA Channel 0 e use o nome do dispositivo, pode ser /dev/cdrom, d: ou outra coisa, depende do seu sistema, você também pode usar uma imagem de disco (o famoso ISO):
bochs08
Selecione o dispositivo de boot:
bochs09
Configure a memória:
bochs10
Note que $BXSHARE expande para a pasta compartilhada do Bochs, exceto por um pequeno bug: use o menu file para salvar e em seguida ler a configuração que ele irá expandir corretamente. Existem duas versões da VGA BIOS a elpin e uma lgpl. Apesar de mais estável, a elpin suporta apenas resoluções até 640×480 com 16 cores. Já a lgpl suporta modos VESA de até 1024×768 com 256 cores. O nome lgpl naturalmente se refere a Licença Geral Pública Menor GNU.

Você pode ter problemas com o mapeamento do teclado, no meu caso basta especificar o mapa “x11-pc-us.map“. Não sei como o Bochs se comporta com um teclado ABNT-2. Como eu costumo usar e testar muitos programas experimentais, portanto evito o uso desses modelos de teclado.
bochs11
Agora use um cdrom ou um disquete de boot e vá em Simulate/Start e instale seu sistema operacional. O instalador vai agir normalmente, como se fosse um micro de verdade, com todas as capacidades e limitações, e até dando uns paus de vez em quando :-). Como o Bochs simula um PC completo perfeitamente, é possível até rodar o Bochs dentro do Bochs, mas você terá de ser bastante generoso quanto ao hardware se quiser tentar isso.

Na página do Bochs existem algumas imagens de disco com sistemas operacionais já instalados, prontos para o uso. Naturalmente são sistemas de livre distribuição. Basta baixar, descomprimir o arquivo configurar o Bochs para usar aquela imagem e dar o boot apartir do disco rígido. Por uma questão de desempenho e economia de espaço eles não incluem interfaces gráficas.

Usando o arquivo de configuração, você terá algo semelhante a esse:
bochs12
Para trocar informações entre o hospedeiro e o parasita (é assim que eu gosto de traduzir host e guest neste caso) você pode usar as mtools, usar os recursos de rede, ou gravando imagens de disquetes.

Os recursos de rede são especialmente interessantes. Você pode ter uma rede heterogênea (Windows, OS/2, Linux, *BSD, etc.) num único computador, ou colocar computadores virtuais na rede para testes. Mas para usar esses recursos você terá de fazer um pouco mais de esforço.

É necessário configurar a rede, veja o arquivo de exemplo “bochsrc-sample.txt”. Ler a documentação também ajuda :-). É necessário ser root para usar o suporte à rede, no Windows já sabe: a rede não está incluída nos binários. Naturalmente você terá de configurar também os clientes e servidores. Você pode testar o Samba, por exemplo, mesmo tendo um único micro, como eu.

O Bochs não tem o recurso de tela cheia, os usuários de Windows vão ficar chupando o dedo. No Linux você pode usar a biblioteca svgalib ou o recurso de múltiplas resoluções do X.

Aqui estou rodando o FreeBSD 4.7, Windows 95 e Minix 2.0.3 no meu RedHat Linux 7.3:
bochs-fwm

Mais configurações

O Bochs esconde várias opções avançadas que podem ser habilitadas (ou desabilitadas, trocando –enable-* por –disable-*) durante a compilação. Estas opções devem ser adicionadas ao comando “./configure”. O ideal é ler o manual, mas aqui vão algumas dicas:

  • –enable-cpu-level={3, 4, 5, 6}

Emula um 386, 486, Pentium ou Pentium Pro. O suporte ao Pentium Pro ainda é incompleto.

  • –disable-fpu

Desabilita o FPU, usado com a opção anterior é interessante para testar se determinado aplicativo roda num 386 ou 486 sem FPU.

  • –enable-sb16

Emula uma placa de som Sound Blaster. Necessita de ser configurado também no bochsrc (mesmo que usando a interface gráfica).

  • –enable-ne2000

Habilita a placa de rede. Também precisa ser configurado no bochsrc.

  • –enable-vbe

Adiciona suporte às extensões VBE, assim você pode ter resoluções de até 1024×768 com 256 cores. Você terá de usar a VGAROM lgpl para isso.

  • –enable-host-specifics-asms

Faz uso de instruções assembly inline específicas do x86. Algo semelhante a técnica de virtualização do VMWare. Acho que isso ainda não está plenamente funcional, já que é mais o terreno do Plex86.

  • –enable-all-optimizations

Habilita todas as otimizações que os desenvolvedores acreditam que sejam seguras. Junto com a opção anterior, pode melhorar o desempenho.

  • –enable-x86-64

Adiciona suporte, ainda parcial, às instruções x86-64 da AMD.

  • –enable-mmx

Adiciona suporte às instruções MMX.

  • –enable-sse={1, 2}

Adiciona suporte às instruções SSE ou SSE2.

  • –enable-debugger
  • –enable-iodebug
  • –enable-x86-debugger
  • –enable-external-debugger

Adiciona suporte a várias modalidades de debuggers. Muito útil para depurar kernels e programas que rodam durante o boot. O GeekOS, por exemplo, usa esse recurso (http://geekos.sourceforge.net).

  • –enable-processors={1, 2, 3, … 15}

Emula um sistema multiprocessado (SMP) com até 15 processadores. Note que isso não aumenta a velocidade da simulação, na verdade diminui, já que é necessário simular diversos processadores. Você vai precisar de instalar um sistema operacional que suporte multiprocessamento para testar esse recurso, caso contrário ele vai agir exatamente como um sistema monoprocessado normal.
bochs-smp

  • –with-rfb

Usa o protocolo RFB para exportar a tela para um cliente VNC (na mesma, ou em outra estação da rede). Funciona, mas ainda tem alguns bugs principalmente em relação ao uso do mouse.
bochs-vnc

Um uso interessante para os programadores, é testar seus softwares em diversas configurações de “hardware”.

Apesar da configuração não ser tão fácil quanto no VMWare e apresentar algumas limitações (principalmente quanto ao desempenho), o Bochs possui muitos recursos interessante que não estão presentes no VMWare e o melhor de tudo: é software livre.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X