Computação / Minix-Alan-HOWTO
Voltar para página de Computação
[[[ MINIX-PARA-AULA-DO-ALAN-HOWTO ]]]
Copyright (c) 2004 Bruno T. C. de Oliveira
Arthur Biazon Machado.
Mande correções/comentários/reclamações sobre esse HOWTO para
btco@linux.ime.usp.br e/ou messias@linux.ime.usp.br
VERSÃO: 1.4
CHANGELOG
2004-11-24 v1.4 - adicionadas notas sobre a nova versão do Bochs (2.1.1)
2004-09-22 v1.3 - item 19 editado para explicar melhor o processo de
recuperação de um sistema quebrado
2004-09-20 v1.2 - tópicos extras adicionados no final do howto
(sobre copiar arquivos de/para o minix)
2004-09-20 v1.1 - corrigido 'compress -d' que estava faltando no passo 16
2004-09-15 v1.0 - versão inicial
** NOTAS SOBRE A NOVA VERSÃO DO BOCHS INSTALADA NA REDE (2.1.1) *********
- no momento que você inicia o bochs agora você verá um prompt "<bochs:1>"
Esse é o debugger. Dê o comando 'c' <ENTER> para iniciar.
- Na nova versão NÃO É MAIS NECESSÁRIO utilizar hd=bios. O hd é reconhecido
sem problemas pelo Minix agora.
- Por esse motivo é possível agora bootar o Minix direto do "hd virtual"
sem a necessidade de deixar o disquete ROOT linkado como a.img
(i.e. dá para configurar o BOCHS para bootar direto da imagem de HD,
e aí basta digitar '=' no primeiro (e único) prompt do Boot Monitor)
**************************************************************************
0. Alguns avisos preliminares
O BOCHS tem um bug irritante que faz com que o teclado pare de funcionar
certo quando você desfocaliza a janela e volta para ela com Alt-TAB.
Isso acontece porque o Alt fica 'preso'. Para solucionar isso basta
apertar e soltar o Alt quando o bochs estiver focalizado. Torne isso
um cacoete.
Todas as informações aqui presentes são fornecidas 'COMO ESTÃO'. Em
nenhuma circunstância os autores serão responsabilizados pelos efeitos
adversos advindos da utilização dessas informações. Não nos culpe
se você queimar a sua máquina, contrair alguma doença incurável,
tiver queda precoce de cabelos e/ou perde neurônios, ficar
permanentemente traumatizado com o Minix, ou se macacos de três cabeças
invadirem seu domicílio como resultado da utilização das informações aqui
contidas.
1. Prepare seu diretório
[~]$ cd
[~]$ mkdir so
[~/so]$ cd so
A partir daqui, a não ser que especificado em contrário, você deverá
estar no diretório ~/so
2. Baixe os arquivos binários do Minix:
http://www.cs.vu.nl/cgi-bin/raw/pub/minix/2.0.0/i386.tar
3. Descompacte os arquivos binários no seu diretório
[~/so]$ tar -xf /caminho/para/i386.tar
[~/so]$ cd i386
[~/so/i386]$ chmod 644 *
4. Configure o bochs
[~/so]$ mkdir bochs
[~/so]$ cd bochs
[~/so/bochs]$ bximage
Responda 32MB como tamanho do disco, c.img como nome do arquivo de imagem.
Ele vai criar um c.img e dizer que os parâmetros são
- 65 cilindros
- 16 cabeças
- 63 setores por trilha
5. Faça links para as imagens de disco
[~/so/bochs]$ ln -s ../i386/ROOT ./a.img
[~/so/bochs]$ ln -s ../i386/USR ./b.img
6. Configure o bochs
[~/so/bochs]$ bochs
Digite 3 ENTER 6 ENTER 2 ENTER
(Edit Options | Memory Options | VGA BIOS Image)
Digite /usr/share/bochs/VGABIOS-elpin-2.40
Digite 3 ENTER (opção ROM BIOS Image)
Digite /usr/share/bochs/BIOS-bochs-latest
Digite ENTER para voltar ao menu de configuração
Selecione 8 (Disk options)
Selecione 4 (que diz 'disabled')
Enable this device? yes
Type of ATA device: hard disk
Path or bla bla bla: c.img
Cylinders: 65
Heads: 16
Sectors Per Track: 63
Model Name: Generic
BIOS Detection: auto
Translation type: auto
Selecione 1 (Floppy drive 0)
Filename of first floppy image: a.img
What type of bla bla? 1.44M
Is the floppy inserted or ejected? inserted
Selecione 2 (Floppy drive 1)
Filename of first floppy image: b.img
What type of bla bla? 1.44M
Is the floppy inserted or ejected? inserted
Selecione 16 (Boot From)
Boot from bla bla bla? floppy
Dê ENTER para voltar ao menu de configuração
Dê ENTER de novo para voltar ao menu principal
Selecione 4 (Save Options To)
Save to what file? .bochsrc
Selecione 6 para sair da configuração.
7. Particione sua imagem de disco (é bom particionar já de cara,
de fora do MINIX, porque o particionador do MINIX é um saco).
[~/so/bochs]$ /sbin/fdisk c.img
x (modo nerd)
c (setar cilindros)
65
h (setar número de cabeças)
16
s (setar número de setores por trilha)
63
r (voltar ao menu normal [não-nerd])
n (criar nova partição)
p (partição primária)
1
ENTER (a tecla, não digite E-N-T-E-R dã)
ENTER (vide comentário da linha anterior)
(isso faz com que a partição tome todo o espaço do disco)
t (selecionar tipo da partição)
81 (tipo Minix)
w (escrever tabela de partição para a imagem)
(ignore os erros de ioctl)
8. Inicie o MINIX
[~/so/bochs]$ bochs
ENTER
Você verá o menu de inicialização do Minix. Digite 'ESC' para
entrar na linha de comando e prossiga assim:
[ESC]
fd0> hd=bios
fd0> boot
Esse truque é necessário porque o MINIX não consegue ler o HD
simulado sozinho sem a ajuda da BIOS. Você vai precisar fazer
isso toda santa vez que for bootar o MINIX.
Finish the name of the bla bla bla: /dev/fd1
,-------------------------------------------------------------------------,
|Minix 2.0.0 Copyright 1997 Prentice-Hall, Inc. |
| |
|Executing in 32-bit protected mode |
| |
| |
|Memory size = 3658K MINIX = 295K RAM disk = 480K Available = 2884K|
| |
|RAM disk loaded. |
|Wed Sep 8 11:34:57 MET DST 2004 |
|Finish the name of device to mount as /usr: /dev/fd1 |
|/dev/fd1 is read-write mounted on /usr |
|Starting standard daemons: update. |
| |
|Login as root and run 'setup' to install Minix. |
| |
|Minix Release 2.0 Version 0 |
| |
|noname login: |
| |
`-------------------------------------------------------------------------'
Logue como 'root' e digite 'setup'
Vá dando ENTER no bla bla bla todo que ele fala até chegar no
particionador de disco chato. Digite 'q' para sair dele porque você
foi esperto(a) e já particionou seu disco no passo anterior :-)
Please finish the name of the primary bla bla bla: /dev/hd1
Interrompa o Bad Block scan porque sabemos que não tem blocos ruins
na imagem de disco :-) Para interromper pressione DEL.
By now the floppy USR has bla bla bla.
What floppy drive is it in? 1
What is the memory size bla bla bla? <ENTER>
Agora você estará de volta no prompt '#'. Digite 'halt' nesse prompt.
# halt
Isto lhe trará de volta ao Boot Monitor. Poderíamos continuar daqui,
mas vamos fechar o bochs e abrí-lo de novo para mostrar como deve
ser feito das próximas vezes com o minix já instalado.
Então feche o BOCHS clicando no botão POWER.
9. Iniciando seu Minix já instalado.
[~/so/bochs]$ bochs
ENTER
Você chegará no menu de boot. NÃO DÊ '=' ainda!
Digite ESC para entrar na linha de comando e faça o seguinte:
[ESC]
fd0> hd=bios
fd0> boot hd1
Dejá vù. Tela de boot de novo. DESTA VEZ, dê '='.
Logue como root.
10. Instalando os programas adicionais
Agora que fiz você iniciar seu Minix, feche o BOCHS. Era só para
mostrar como fazer. Essa é uma das coisas mais legais de escrever
um HOWTO. Tudo o que eu falar você vai fazer. É um poder quase
supernatural. Bwa ha ha ha ha. Agora você é uma tangerina.
Seu fruta! Volte a ser humano (ou qualquer coisa que você era antes de
virar uma tangerina).
[~/so/bochs]$ cd ../i386
[~/so/i386]$ split -b 1440k -d USR.TAZ USR.TAZ.D
Agora devem ter arquivos USR.TAZ.D00, USR.TAZ.D01, etc. no diretório.
11. Agora rode o Minix como falei antes.
[~/so/bochs]$ bochs
ENTER
[ESC]
fd0> hd=bios
fd0> boot hd1
Dejá vù
=
Logue de root.
# setup /usr
What is the size of the bla bla bla? <ENTER>
What floppy drive to use? 1
Please insert bla bla and hit return.
NÃO DÊ ENTER AINDA - VOCÊ PRECISA 'INSERIR' O DISCO
Para 'inserir' o primeiro disco, faça o seguinte (fora do bochs):
[~/so/bochs]$ ln -sf ../i386/USR.TAZ.D00 ./b.img
Agora volte no bochs e (MUITO IMPORTANTE) clique duas vezes
no ícone do DISQUETE B: (vai aparecer um X na primeira vez
que você clicar e vai desaparecer na segunda vez). Isso é necessário
para 'dizer' ao bochs que o disco foi trocado.
Agora você pode dar ENTER no bochs para continuar a instalação.
Vai chegar uma hora em tempo finito em que ele vai pedir o próximo
disco. Faça a mesma coisa, mas com USR.TAZ.D01 ao invés de USR.TAZ.D00.
E assim por diante. NÃO ESQUEÇA de clicar no botão DISQUETE B: do
bochs cada vez que você trocar de disco.
12. Tudo pronto. Lembre do ritual necessário toda santa vez que você
quiser iniciar o seu Minix (passo 9). Sem ele o Minix não vai
reconhecer o disco rígido.
13. Dica: se você acha que a emulação está muito lenta, tente utilizar
os seguintes valores para 'Emulated Instructions per second'
e 'VGA update interval':
Emulated IPS: 2000000
VGA update interval: 20000
Uma outra dica também é configurar o bochs para utilizar a SDL
(ao invés de x11 ou wx) como biblioteca gráfica. A SDL (pelo menos
para a gente) teve desempenho superior às outras duas mas faltam-lhe
alguns features (copiar e colar, por exemplo, que é raramente usado
de qualquer maneira).
[[ DICAS SOBRE HACKEAR E COMPILAR O MINIX EM SI ]]
14. Baixe o source do minix do site. Ele vai vir num arquivo SYS.TAZ,
que é um tar comprimido (via compress, não gzip). Eis a URL:
http://www.cs.vu.nl/pub/minix/2.0.0/src/SYS.TAZ
15. Faça o mesmo truque do split para fazer vários "discos" de 1440k:
[/tmp]$ wget http://www.cs.vu.nl/pub/minix/2.0.0/src/SYS.TAZ
[/tmp]$ split -b 1440k -d SYS.TAZ SYS.TAZ.D
[/tmp]$ cd ~/so/bochs
[~/so/bochs]$ ln -sf /tmp/SYS.TAZ.D00 ./b.img
[~/so/bochs]$
16. Agora inicie o Minix como já explicamos e rode os seguintes comandos
dentro do minix:
# cd /usr
# vol /dev/fd1 | compress -d | tar xv -
Este comando fará o Minix exibir um prompt para trocar de discos
e ao mesmo tempo descompactar o conteúdo dos discos com o tar.
Toda vez que for pedido num novo disco, faça o seguinte (nesse
exemplo estamos tirando o disco SYS.TAZ.D00 e colocando o
SYS.TAZ.D01):
[~/so/bochs]$ ln -sf /tmp/SYS.TAZ.D01 ./b.img
E clique duas vezes no ícone "Drive B:" do BOCHS. Isso é necessário
para informar ao BOCHS (e portanto ao Minix) que o disco dentro
do drive virtual foi trocado.
Agora basta ir trocando os discos dessa maneira e você terá
no final um diretório /usr/src com todo o fonte do Minix.
17. Hackeando o Minix: o kernel em si estará em /usr/src/kernel.
O init (programa que ele roda no boot) está em /usr/src/tools.
Para editar o código-fonte, você terá que usar algum dos editores
que vêm no Minix. Um bom editor é o elvis, que é um clone do vi
com menos features (e portanto mais leve). Naturalmente para usá-lo
você deve saber utilizar bem o vi (saber navegar pelo arquivo,
alternar entre modo insert e modo comando, juntar linhas, indentar,
etc). Não tem emacs nem nenhum desses outros editores "bonitinhos".
18. Compilando seu frankenstein: Quando você terminar de destruir o
Minix, faça o seguinte para compilar:
# cd /usr/src/tools
# make hdboot
Isso vai compilar o Minix e instalá-lo. A imagem do kernel vai
para /minix/minix-2.0.0r1 (o sufixo muda conforme você compila
novos kerneis). Quando você boota o boot monitor sempre escolhe
o kernel mais recente.
Agora reboote para ver os resultados do seu trabalho:
# halt
fd0> boot hd1
(note que a segunda linha é o prompt do Boot Monitor, que retoma
o controle depois que o Minix termina como resultado do comando 'halt')
19. Recuperando o seu sistema: se você (como a gente) acabar fazendo
o kernel parar de funcionar por causa de um bug, você não vai
conseguir bootar. Para bootar, você terá que utilizar o
Boot Monitor da seguinte maneira: no primeiro boot monitor
digite "hd=bios" e "boot hd1" como de costume. Mas no segundo,
prossiga da seguinte maneira:
fd0> image=/minix/2.0.0
fd0> boot
Isso fará o Minix bootar a imagem 2.0.0, que é a padrão "de fábrica".
[[ TÓPICOS EXTRA ]]
20. Copiando arquivos de dentro do bochs para fora: o truque é fazer o minix
achar que está escrevendo um tar num disquete, e mapear o disquete
para um arquivo usando o bochs. A idéia é mais ou menos essa: digamos
que você quer extrair o diretório /usr/src/kernel de dentro do bochs
e fazer um tar dele.
[~/so/bochs]$ dd if=/dev/zero of=/tmp/my.tar bs=1024 count=1440
[~/so/bochs]$ ln -sf /tmp/my.tar b.img
[~/so/bochs]$ bochs
<certificar-se de que o bochs está configurado para enxergar b.img
como segundo disco flexível>
# cd /usr/src
# tar cvf /dev/fd1 kernel
# halt
Pronto, agora você tem um arquivo /tmp/my.tar que tem os fontes
do diretório /usr/src/kernel do Minix.
ATENÇÃO: até que você dê halt, o arquivo /tmp/my.tar PODE ESTAR EM
ESTADO INCONSISTENTE, pois o conteúdo do arquivo pode estar
em cache no minix. Portanto, antes de utilizar o arquivo /tmp/my.tar,
é fundamentalmente necessário dar 'halt' no minix.
21. Copiando arquivos de fora do bochs para dentro. A idéia é a inversa:
fazer um tar e mapeá-lo para o disquete no bochs. Digamos que você
tem o diretório ~/so/bochs/kernel e você quer copiá-lo para dentro
do bochs.
[~/so/bochs]$ tar -cf /tmp/my.tar kernel
[~/so/bochs]$ ln -sf /tmp/my.tar b.img
[~/so/bochs]$ bochs
<certificar-se de que está configurado para enxergar b.img como
segundo disco flexível>
# cd /tmp
# tar xvf /dev/fd1
Pronto, agora você tem o diretório /tmp/kernel dentro do minix, com
os conteúdos do ~/so/bochs/kernel.
ATENÇÃO: Quando você expande um tar sem ser root (como é o caso de você
estar usando a Rede Linux como usuário comum), o dono dos arquivos
passa a ser o seu usuário. Assim, quando você refaz o tar para copiá-lo
de volta para o Minix, o usuário fica setado. Logo, dentro do Minix
o dono dos arquivos ficará incorreto (aparecerá uma UID ao invés de
'root' como dono dos arquivos). Acredito que isso não é problema,
mas se você quer ser correto é bom usar o chown.
22. Entregando o EP: acho que uma forma razoável de entregar o EP
(ATENÇÃO: não sou o monitor, estou especulando aqui) é enviar para
o Panda o arquivo tar do diretório /usr/src/kernel do minix.
Assim o monitor pode utilizar o item (21) acima para copiar o seu
tar para dentro do minix e testá-lo.