You are on page 1of 18

Universidad Privada del Norte Sistemas Operativos

2014






















PRCTICA

Compilacin de MINIX


















Universidad Privada del Norte Sistemas Operativos
Pgina - 1
NDICE

1 OBJETIVOS ................................................................................................................................................... 2
2 BREVE DESCRIPCIN DEL EMULADOR QEMU ARRANCANDO MINIX3 ........................................ 2
2.1 Arranque de la mquina virtual QEMU con MINIX3 ............................................................................. 2
2.2 Intercambio de archivos con archivo imagen de disquete ....................................................................... 5
3 MODIFICACIN DEL CDIGO FUENTE DEL NCLEO DE MINIX ..................................................... 9
4 RESUMEN DE CONOCIMIENTOS.............................................................................................................11
5 PARA SABER MS ......................................................................................................................................11
6 ANEXOS........................................................................................................................................................12
6.1 Manual del editor elvis ...................................................................................................................... 12
6.2 Manual del editor mined .................................................................................................................... 15

Universidad Privada del Norte Sistemas Operativos
Pgina - 2
1 OBJETIVOS
Los principales objetivos de esta prctica son:
Familiarizarse con los aspectos bsicos del emulador QEMU.
Recompilar MINIX introduciendo un cambio muy simple en el cdigo fuente del ncleo.
2 BREVE DESCRIPCIN DEL EMULADOR QEMU ARRANCANDO MINIX3
El emulador QEMU permite simular una mquina virtual tipo PC con arquitectura IA32 (x86)
y ejecutar cdigo 8086 directamente sobre la CPU del computador. Sobre esta mquina
virtual se pueden arrancar diversos sistemas operativos como: Linux, MINIX, Microsoft
Windows, etc. En este sentido, es similar a otros entornos como VMware Workstations.
Una forma de arrancar un sistema operativo, sea MINIX, sobre una mquina virtual QEMU es
utilizar una imagen de disco un archivo preparado especialmente como si de un disco de
arranque se tratase- de tal forma que si algo va mal, los errores quedan circunscritos al
contenido de dicho archivo sin afectar al resto del sistema.
2.1 Arranque de la mquina virtual QEMU con MINIX3
En la carpeta que hemos copiado, nos aparecer los archivos necesarios:

Seleccionar los dos archivos mencionados en el punto anterior y copiarlos en nuestro
escritorio tal y como se refleja en la figura de la pgina siguiente.
Universidad Privada del Norte Sistemas Operativos
Pgina - 3
Arrancar un terminal para trabajar en modo comando, para ello, hacer click en el icono
rotulado Terminal.
Teclear cd Escritorio para ubicarnos en el directorio donde tenemos la imagen de
MINIX y del disquete vaco. Comprobarlo tecleando ls.
Ahora ya podemos arrancar una mquina virtual QEMU con una imagen de disco con
MINIX. Para ello, teclear qemu fda disquete.img minix3-qemu-original.img.
Al principio del arranque, durante unos pocos segundos, tendremos una ventana con
un aspecto como el siguiente:

Las opciones que figuran al final nos permiten seleccionar la imagen del ncleo de
MINIX que deseamos arrancar. En nuestro caso, en tanto en cuanto no modifiquemos
el ncleo, slo tenemos una imagen, la original, que es la que arrancar sin necesidad
de indicar nada. Finalmente, acaba quedando una ventana con el aspecto siguiente:
Universidad Privada del Norte Sistemas Operativos
Pgina - 4

Entrar como el usuario root. No pedir palabra clave.
Una vez dentro del sistema, podr comprobarse que estamos en un sistema tipo UNIX
tecleando comandos como: pwd, para ver el directorio en el que se est; ls, para ver el
contenido del directorio; who, para saber quin est en el sistema; cd, para moverse
por la jerarqua de directorios; ps, para ver qu procesos estn ejecutndose, etc.
Ubicado en el directorio de entrada, /root, vamos a crear un archivo de texto que
denominaremos nombres y cuyo contenido sern dos lneas, cada una de ellas con el
nombre y apellidos de uno de los miembros del grupo (si se trata de una nica persona,
repetir el nombre en la segunda lnea). Para crear el archivo, puede utilizarse un editor
tipo vi llamado elvis o un editor tipo Windows denominado mined (consultar
los anexos para ver una breve descripcin de ambos editores).
Comprobar que se ha creado el archivo correctamente. Para ello, mostrarlo por
pantalla con el comando: cat nombres.
Ahora vamos a salir del sistema y comprobar que no hemos perdido los cambios que
hemos realizado. Para ello, teclear el comando halt. Nos aparecer un prompt nuevo
indicando d0p0s0> que hace referencia al monitor sobre el que se ejecuta MINIX.
Teclear el comando off para dar por terminada la sesin QEMU.
Si nos fijamos en el escritorio, seguimos teniendo el archivo minix3-qemu-
original.img que contendr la imagen de disco original con la que habamos
arrancado, pero modificada por las acciones que acabamos de realizar. En concreto,
esta imagen tendr el archivo nombres que acabamos de crear. Cuando estemos
trabajando en las prcticas, si queremos llevarnos el trabajo realizado, debemos
copiarnos esta imagen en una memoria USB, ya que cuando nos salgamos del puesto
de trabajo esta imagen debera borrarse. Desde luego, otra opcin es guardarlo en
nuestra carpeta privada del servidor. Si en otra sesin posterior queremos seguir
trabajando a partir de donde lo habamos dejado, antes de arrancar QEMU, debemos
copiar la imagen de la sesin anterior en el escritorio.
Este proceso queda reflejado grficamente en la figura siguiente:
Universidad Privada del Norte Sistemas Operativos
Pgina - 5

2.2 Intercambio de archivos con archivo imagen de disquete
Si queremos trabajar en casa con un PC y no tenemos QEMU instalado, la imagen Minix-
qemu.img que nos hemos podido traer del laboratorio no nos es de gran utilidad. Para
permitir, al menos, poder editar los archivos sobre los que estemos trabajando, lo ideal es
podrselos llevar y traer en un formato compatible con Windows dado que la gran mayora de
los alumnos que tiene computador dispone de dicho sistema operativo.
Lamentablemente, la versin de MINIX que utilizamos reconoce la disquetera como medio
para el intercambio de archivos con el exterior, pero no el USB. Como hoy en da la mayora
de los porttiles ya no llevan disquetera, vamos a utilizar un archivo configurado como una
imagen de disquete vaco. Esta imagen puede manipularse en Windows con una utilidad de
drive virtual de disquete como la que puede obtenerse en la pgina web de la asignatura,
aunque, en general, ni siquiera necesitaremos esta utilidad.
El archivo disquete.img es, precisamente, una imagen de disquete vaco que nos permitir
llevarnos archivos especficos a casa en vez de toda la imagen de disco MINIX.
Para poder manipular esta imagen de disquete desde MINIX, utilizaremos el comando mtools
como veremos ms adelante- que permitir leer archivos Windows desde el disquete as
como grabar archivos de MINIX al disquete en formato Windows.
Al salir de MINIX-QEMU, como veremos ms adelante, podremos montar el archivo
disquete.img y copiar los archivos que queramos en una memoria USB para podrnoslos
llevar con nosotros, tal y como se muestra en la figura siguiente:
Universidad Privada del Norte Sistemas Operativos
Pgina - 6

Posteriormente, podremos traer los archivos modificados en la memoria USB y transferirlos a
la imagen de disquete para tenerlos accesibles cuando arranquemos MINIX-QEMU.
Si nuestro PC tiene Linux, basta con llevarse el archivo con la imagen de disquete
disquete.img y montarla, para poder editar los archivos que contenga.
Ahora vamos a probar todo esto que acabamos de contar.
Comprobar que tenemos en el escritorio los archivos Minix-qemu.img y
disquete.img.
Abrir un terminal y situarse en el escritorio tecleando: cd Desktop.
Arrancar QEMU con el comando:
qemu -fda disquete.img Minix-qemu.img
Entrar al sistema MINIX.
El comando mtools permite realizar operaciones sobre un disquete formateado con
DOS o Windows en formato FAT. Para ver los comandos disponibles, teclear: mtools.
Para comprobar que el disquete est vaco, teclear: mtools dir a:
Para grabar en el disquete el archivo nombres, teclear: mtools copy nombres a:
Para comprobar que ahora tenemos el archivo en el disquete, teclear: mtools dir a:
Para comprobar que el contenido del archivo grabado en el disquete es el correcto,
teclear: mtools type a:nombres
Salir del sistema (halt + off)
Ahora, desde Linux, podremos ver el contenido de la imagen de disquete
disquete.img montndolo previamente con el comando:
sudo mount disquete.img /mnt -t msdos -o loop=/dev/loop0,umask=000
Universidad Privada del Norte Sistemas Operativos
Pgina - 7
Desde el terminal podemos situarnos en /mnt y ver que tenemos el archivo nombres
con el contenido correcto. Tambin podemos abrir la carpeta /mnt desde el entorno
grfico si nos es ms cmodo.
Editar el archivo /mnt/nombres (usando el vi o un editor grfico como kwrite) y
escribir una tercera lnea con el nombre la asignatura.
Igual que modificamos un archivo existente en el disquete.img (nombres), podemos
incorporar otro archivo. Teclear cp /etc/hosts /mnt/hosts.
Ahora intentaremos ver que accedemos a los cambios realizados en el disquete.img
desde MINIX. Para ello, antes de arrancar MINIX debemos desmontar el archivo
imagen de disquete tecleando:
sudo umount /mnt
Arrancar MINIX y comprobar (comando mtools) que tenemos accesibles los cambios
hechos en LINUX en el entorno MINIX sobre QEMU.
El archivo disquete.img o cualquiera de los archivos que contenga el mismo,
podremos copirnoslo a una memoria USB si queremos llevrnoslo a nuestro PC de
casa.
Para desmontar una memoria USB, seleccionar nuestra memoria USB y dar
Extraccin segura tal y como se ve a continuacin:
Universidad Privada del Norte Sistemas Operativos
Pgina - 8

Si nos llevamos el archivo disquete.img y lo modificamos, recordar que luego
podremos incorporarlo a nuestro entorno MINIX con el comando: mtools copy
a:nombres nombres








Universidad Privada del Norte Sistemas Operativos
Pgina - 9
3 MODIFICACIN DEL CDIGO FUENTE DEL NCLEO DE MINIX
Lo primero que necesitamos para recompilar MINIX son los archivos fuente del sistema.
Dichos archivos fuente se encuentran bajo el directorio /usr/src. En particular, los archivos
correspondientes al ncleo (kernel), se encuentran en el directorio /usr/src/kernel.
El cambio que queremos introducir en el proceso de recompilacin es aadir un mensaje que
aparecer en el arranque del sistema MINIX. El mensaje incluir el nombre de los alumnos en
maysculas para que sea fcil de identificar en el arranque. El mensaje a escribir ser:
KERNEL DE NMAT1-NOMBRE1, NMAT2-NOMBRE2.
Para realizar esta parte de la prctica, hacer lo siguiente:
Arrancar QEMU con la imagen MINIX, da igual que sea la original o la modificada en
la parte anterior. Fijarse bien en algn mensaje que se muestre antes de pedir al
usuario su login de entrada al sistema, ya que este mensaje puede servir para
localizar el punto del cdigo donde hay que escribir el nuevo mensaje.
Entrar al sistema como root y situarse en el directorio que contiene el cdigo fuente
del kernel /usr/src/kernel.
Ejecutar el comando ls para ver el contenido del directorio y anotar las extensiones
de todos los archivos que se vean y explicar qu tipo de archivos son (basta con
indicar los que se reconozcan).




Editar el archivo main.c para incluir el nuevo mensaje. La sentencia que se utiliza para
mostrar los mensajes del kernel es kprintf.
Indicar en qu funcin se ha localizado la sentencia kprintf que escribe el mensaje
identificado en el arranque y que nos ha servido de gua:



Escribir a continuacin la sentencia includa en el cdigo para mostrar el nuevo
mensaje que debe aparecer durante el arranque del sistema:


Universidad Privada del Norte Sistemas Operativos
Pgina - 10
Una vez modificado el archivo fuente, tenemos que dar la orden de compilacin. Para
ello, situarse en el directorio /usr/src/tools. En este directorio existe un archivo
llamado Makefile que contiene las reglas para compilar, construir nuevas imgenes
del sistema, etc. Gracias al contenido de este archivo, no hay que preocuparse de qu
archivos hay que recompilar y en qu orden, ni de dnde deben quedar los archivos
generados, ya que toda esta informacin est previamente especificada en forma de
reglas. Teclear: make install [Nota: La primera vez tarda bastante]
Indicar qu saludo (prompt) muestra MINIX tras la recompilacin:


Si la compilacin ha ido bien, el prompt del sistema ser #, en caso contrario ser
*.
Las imgenes del ncleo, tanto la original como la que acabamos de generar, se
guardan en el directorio /boot/image. Listar el contenido de dicho directorio para
comprobar que tenemos dos imgenes. Recordar que cuando arrancamos MINIX, la
opcin 1 del men de arranque coge la imagen original y la opcin 3 la ltima imagen
generada.
Si la recompilacin ha ido bien, salir del sistema y reiniciar con la nueva imagen
tecleando los comandos:
o halt // Para detener el sistema MINIX
o main // Para arrancar el sistema MINIX desde el monitor
En principio no hace falta teclear ninguna opcin en el men de arranque ya que por
defecto se toma la opcin 3 que es la que arranca la imagen recin modificada, pero es
mejor indicar la opcin deseada. Si todo se ha hecho bien, deber verse el mensaje
introducido antes de la peticin de login. En caso contrario, arrancar con la imagen
original opcin 1 del men de arranque del monitor- y repetir todo el proceso.









Universidad Privada del Norte Sistemas Operativos
Pgina - 11
4 RESUMEN DE CONOCIMIENTOS
Cuestiones relativas a QEMU
Para arrancar una sesin QEMU hacer doble click en el icono Minix QEmu.
Se arranca con la imagen Minix-qemu.img del escritorio o en su defecto de una
imagen guardada en un servidor.
En el men de arranque: la opcin 1 carga la imagen original y la opcin 3 carga la
ltima imagen generada.
Comandos tiles del monitor de mquina virtual (prompt d0p0s0>):
o main // Para arrancar MINIX
o off // Para terminar la sesin QEMU
Si nos desaparece el cursor, probar a teclear <Ctrl><Alt>
Algunos comandos bsicos de MINIX
cat Muestra el contenido de un archivo
cd Cambio de directorio
elvis Editor tipo vi para realizar cambios en los archivos fuente
halt Para detener el sistema MINIX
ls Listado de archivos existentes en un directorio
make Para construir una imagen nueva del sistema segn las reglas de un archivo
Makefile
mined Editor tipo Windows para realizar cambios en los archivos fuente
ps Para ver qu procesos estn ejecutndose
pwd Directorio actual
who Para saber quin est en el sistema
Algunas opciones del comando mtools para trabajar con el disquete
mtools // Comandos mtools disponibles
mtools dir a: // Contenido del disquete
mtools type a:<archivo> // Muestra contenido archivo de disquete
mtools copy <archivo> a: // Copiar de MINIX a disquete
mtools copy a:<archivo> <archivo> // Copiar de disquete a MINIX
5 PARA SABER MS
http://www.minix3.org/ Pgina oficial de MINIX 3
http://wiki.qemu.org/Index.html Pgina oficial de QEMU
http://www.samba.org Pgina oficial de Samba
Pgina oficial de la asignatura para instalar QEMU y MINIX 3 sobre Windows
Universidad Privada del Norte Sistemas Operativos
Pgina - 12
6 ANEXOS
6.1 Manual del editor elvis
NAME
elvis, ex, vi - The editor


SYNOPSIS
elvis [flags] [+cmd] [files...]


DESCRIPTION
Elvis is a text editor which emulates vi/ex.

On systems which pass the program name as an argument, such
as UNIX and MINIX 3, you may also install elvis under the
names "ex", "vi", "view", and "input". These extra names
would normally be links to elvis; see the "ln" shell com-
mand.

When elvis is invoked as "vi", it behaves exactly as though
it was invoked as "elvis". However, if you invoke elvis as
"view", then the readonly option is set as though you had
given it the "-R" flag. If you invoke elvis as "ex", then
elvis will start up in the colon command mode instead of the
visual command mode, as though you had given it the "-e"
flag. If you invoke elvis as "input" or "edit", then elvis
will start up in input mode, as though the "-i" flag was
given.


OPTIONS
-r To the real vi, this flag means that a previous edit
should be recovered. Elvis, though, has a separate
program, called elvrec(1), for recovering files. When
you invoke elvis with -r, elvis will tell you to run
elvrec.

-R This sets the "readonly" option, so you won't acciden-
tally overwrite a file.

-t tag
This causes elvis to start editing at the given tag.

-m [file]
Elvis will search through file for something that looks
like an error message from a compiler. It will then
begin editing the source file that caused the error,
with the cursor sitting on the line where the error was
detected. If you don't explicitly name a file, then
"errlist" is assumed.

-e Elvis will start up in colon command mode.

-v Elvis will start up in visual command mode.

-i Elvis will start up in input mode.

Universidad Privada del Norte Sistemas Operativos
Pgina - 13
-w winsize
Sets the "window" option's value to winsize.

+command or -c command
If you use the +command parameter, then after the first
file is loaded command is executed as an EX command. A
typical example would be "elvis +237 foo", which would
cause elvis to start editing foo and then move directly
to line 237. The "-c command" variant was added for
UNIX SysV compatibility.


FILES
/tmp/elv*
During editing, elvis stores text in a temporary file.
For UNIX, this file will usually be stored in the /tmp
directory, and the first three characters will be
"elv". For other systems, the temporary files may be
stored someplace else; see the version-specific section
of the documentation.

tags This is the database used by the :tags command and the
-t option. It is usually created by the ctags(1) pro-
gram.

.exrc or elvis.rc
On UNIX-like systems, a file called ".exrc" in your
home directory is executed as a series of ex commands.
A file by the same name may be executed in the current
directory, too. On non-UNIX systems, ".exrc" is usu-
ally an invalid file name; there, the initialization
file is called "elvis.rc" instead.


SEE ALSO
ctags(1), ref(1), elvrec(1), elvis(9).

Elvis - A Clone of Vi/Ex, the complete elvis documentation.


BUGS
There is no LISP support. Certain other features are miss-
ing, too.

Auto-indent mode is not quite compatible with the real vi.
Among other things, 0^D and ^^D don't do what you might
expect.

Long lines are displayed differently. The real vi wraps
long lines onto multiple rows of the screen, but elvis
scrolls sideways.


AUTHOR
Steve Kirkendall
kirkenda@cs.pdx.edu
Many other people have worked to port elvis to various
operating systems. To see who deserves credit, run the
:version command from within elvis, or look in the system-
specific section of the complete documentation.
Universidad Privada del Norte Sistemas Operativos
Pgina - 14
Algunos comandos tiles del vi:

i Pasar a modo insercin
<Esc> Salir del modo insercin
k Mover cursor hacia arriba
j Mover cursor hacia abajo
l Mover cursor hacia la derecha
h Mover cursor hacia la izquierda
r Reemplaza un caracter
R Reemplaza caracteres hasta pulsar <Esc>
d< > Borra un caracter. < > significa espacio
dw Borra una palabra
dd Borra una lnea
3dd Borra tres lneas
. Repite la accin anterior
u Deshace la accin anterior
/cadena Buscar la cadena de caracteres indicada
n Repetir la bsqueda anterior
Y Copia una lnea al buffer
3Y Copia tres lneas al buffer
p Pega el contenido del buffer
:q! Salir sin salvar
:w Guardar los cambios realizados hasta el momento
ZZ Salir salvando


































Universidad Privada del Norte Sistemas Operativos
Pgina - 15
6.2 Manual del editor mined
Command: mined - MINIX editor
Syntax: mined [file]
Flags: (none)
Examples: mined /user/ast/book.3 # Edit an existing file
mined # Call editor to create a new file
ls -l | mined # Use mined as a pager to inspect
listing

Mined is a simple screen editor. At any instant, a window of 24
lines is visible on the screen. The current position in the file is
shown by the cursor. Ordinary characters typed in are inserted at the
cursor. Control characters and keys on the numeric keypad (at the
right-hand side of the keyboard) are used to move the cursor and perform
other functions.

Commands exist to move forward and backward a word, and delete
words either in front of the cursor or behind it. A word in this
context is a sequence of characters delimited on both ends by white
space (space, tab, line feed, start of file, or end of file). The
commands for deleting characters and words also work on line feeds,
making it possible to join two consecutive lines by deleting the line
feed between them.

The editor maintains one save buffer (not displayed). Commands are
present to move text from the file to the buffer, from the buffer to the
file, and to write the buffer onto a new file. If the edited text
cannot be written out due to a full disk, it may still be possible to
copy the whole text to the save buffer and then write it to a different
file on a different disk with CTRL-Q. It may also be possible to escape
from the editor with CTRL-S and remove some files.

Some of the commands prompt for arguments (file names, search
patterns, etc.). All commands that might result in loss of the file
being edited prompt to ask for confirmation.

A key (command or ordinary character) can be repeated n times by
typing ESC n key where ESC is the 'escape' key.

Forward and backward searching requires a regular expression as the
search pattern. Regular expressions follow the same rules as in the
UNIX editor, ed. These rules can be stated as:

Any displayable character matches itself.

. (period) matches any character except line feed.

^ (circumflex) matches the start of the line.

$ (dollar sign) matches the end of the line.

\c matches the character c (including period, circumflex, etc).

[string] matches any of the characters in the string.

[^string] matches any of the characters except those in the
string.

[x-y] matches any characters between x and y (e.g., [a-z]).

Universidad Privada del Norte Sistemas Operativos
Pgina - 16
Pattern* matches any number of occurrences of pattern.


Some examples of regular expressions are:

The boy matches the string 'The boy'
^$ matches any empty line.
^.$ matches any line containing exactly 1 character
^A.*\.$ matches any line starting with an A, ending with a
period.
^[A-Z]*$ matches any line containing only capital letters (or
empty).
[A-Z0-9] matches any line containing either a capital letter or a
digit.
.*X$ matches any line ending in 'X'
A.*B matches any line containing an 'A' and then a 'B'


Control characters cannot be entered into a file simply by typing
them because all of them are editor commands. To enter a control
character, depress the ALT key, and then while holding it down, hit the
ESC key. Release both ALT and ESC and type the control character.
Control characters are displayed in reverse video.

The mined commands are as follows.

CURSOR MOTION
arrows Move the cursor in the indicated direction
CTRL-A Move cursor to start of current line
CTRL-Z Move cursor to end of current line
CTRL-^ Move cursor to top of screen
CTRL-_ Move cursor to end of screen
CTRL-F Move cursor forward to start of next word
CTRL-B Move cursor backward to start of previous word

SCREEN MOTION
Home key Move to first character of the file
End key Move to last character of the file
PgUp key Scroll window up 23 lines (closer to start of the file)
PgDn key Scroll window down 23 lines (closer to end of the file)
CTRL-U Scroll window up 1 line
CTRL-D Scroll window down 1 line

MODIFYING TEXT
Del key Delete the character under the cursor
Backspace Delete the character to left of the cursor
CTRL-N Delete the next word
CTRL-P Delete the previous word
CTRL-T Delete tail of line (all characters from cursor to end of
line)
CTRL-O Open up the line (insert line feed and back up)
CTRL-G Get and insert a file at the cursor position









Universidad Privada del Norte Sistemas Operativos
Pgina - 17
BUFFER OPERATIONS
CTRL-@ Set mark at current position for use with CTRL-C and
CTRL-K
CTRL-C Copy the text between the mark and the cursor into the
buffer
CTRL-K Delete text between mark and cursor; also copy it to the
buffer
CTRL-Y Yank contents of the buffer out and insert it at the
cursor
CTRL-Q Write the contents of the buffer onto a file

MISCELLANEOUS
numeric + Search forward (prompts for regular expression)
numeric - Search backward (prompts for regular expression)
numeric 5 Display the file status
CTRL-] Go to specific line
CTRL-R Global replace pattern with string (from cursor to end)
CTRL-L Line replace pattern with string
CTRL-W Write the edited file back to the disk
CTRL-X Exit the editor
CTRL-S Fork off a shell (use CTRL-D to get back to the editor)
CTRL-\ Abort whatever the editor was doing and wait for command
CTRL-E Erase screen and redraw it
CTRL-V Visit (edit) a new file


Author

Mined was designed by Andy Tanenbaum and written by Michiel
Huisjes.

You might also like