Kit de supervivencia para trabajos prácticos
Listamos aquí un material de referencia sobre un conjunto de conocimientos previos necesarios para la parte práctica de la materia.
Sin prejuicio a talleres puntuales que se planteen sobre la cursada, se recomienda el estudio individual de aquellas herramientas con las que los estudiantes estén menos familiarizados.
Software a instalar
El software indispensable para realizar los trabajos prácticos es:
- Compiladores GCC (con soporte para 32-bits) y Clang
- glibc (biblioteca estándar de C) y archivos “include” de Linux
- QEMU (virtualizador de hardware) y seabios (simulador de BIOS)
- gdb, make, git
En Debian y distribuciones derivadas, se puede instalar mediante:
1
2
sudo apt install make git gdb seabios clang libbsd-dev \
gcc-multilib libc6-dev linux-libc-dev qemu-system-x86
La versión de QEMU debe ser 2.5 o superior, y la versión de seabios 1.10 o superior.
Versión modificada de QEMU
En la arquitectura x86, el sistema se reinicia automáticamente cuando ocurre una “triple falla” (triple fault). QEMU, por omisión, obecede esta especificación.
Sin embargo, durante el desarrollo de sistemas operativos en modo protegido de x86, las triple fallas ocurren casi exclusivamente por un bug en el kernel. Por esto, es más deseable que QEMU detenga la ejecución en lugar de reiniciarse constantemente.
QEMU no ofrece soporte directo para detectar triple fallas y detener la ejecución, pero existen un set de opciones que se acercan bastante a ese propósito.
Por tanto, si en una determinada versión del desarrollo ocurre que QEMU se reinicia constantemente, se recomienda probar lo siguiente:
-
correr QEMU con las opciones:
-no-reboot -no-shutdown -d cpu_reset
(estas opciones pueden añadirse en la variableQEMUOPTS
en el archivo GNUmakefile) -
si el error reamente fue un Triple fault, se mostrará ese error en la úlltima línea del archivo qemu.log, y se podrá consultar el estado de los registros mediante el monitor de QEMU (
Ctrl-A C → info registers
)
Manejo básico de entornos Unix (WIP)
- Google-fu
- https://en.wiktionary.org/wiki/Google-fu
- Administrador de paquetes de la distribución instalada (apt, yum, etc) para instalar software.
- Shell scripting, en bash o shell de su preferencia.
- Manejo de la línea de comandos:
- man, vi, cd, ls, mkdir, chmod, chown, grep, sudo, head, tail, ps, cat, less, kill, strace
- Guía básica de la materia
- Lenguaje C:
- Manejo de punteros y memoria dinámica.
- Uso de debugger gdb.
- Compilación con gcc: https://gcc.gnu.org
- Lenguaje Assembler intel X86
- nasm (Netwide Assembler): http://www.nasm.us/
- Una referencia rápida: https://www.cs.uaf.edu/2005/fall/cs301/support/x86/index.html
- Una referencia un poco mas completa: http://www.jegerlehner.ch/intel/IntelCodeTable.pdf
- Make: uso de la herramienta y archivos Makefile
- https://www.gnu.org/software/make/manual/html_node/Quick-Reference.html
- Recomendado instalar Linux en hardware real (no máquina virtual).