Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Arquitectura de la PC
Mapa de Memoria
Mapa de Memoria (2)
Mapa de Memoria (3)
Mapa de E/S en una PC
Power On Self Test (1)
Antes de iniciar su operación el sistema verificará el correcto funcionamiento de la CPU
Chequea si el contenido de la ROM es el correcto (realiza un checksum del contenido de la ROM completa que en fábrica se ajusta de modo que el resultado del check sea cero).
Detecta el tipo de adaptador de video instalado. Lo inicializa en modotexto 80x25.Escribe en la BIOS DATA AREA los principales datos de interés para el sistema que proporciona este controlador.
Comprueba la correcta interacción con el 8042 (Controlador de teclado) y setea el modo de trabajo con los diferentes ports de E/S que proporciona este chip.
Si el Timer 1 funciona correctamente se lo programa para generar un pulso al final de la cuenta, cuenta cíclica, y duración de la misma 15 mseg aproximadamente.
Power On Self Test (2)
Comprueba el correcto funcionamiento para el canal de DMA 0.
Si los test descriptos indican que el Timer 1 y el canal 0 de DMA funcionan correctamente, entonces se dispara el refresco de memoria.
Comprueba el 8259 y lo inicializa con los valores default. El vector de Interrupción lo apunta a las rutinas de la ROM correspondientes.
Cuenta la memoria RAM y comprueba su funcionamiento
Una vez finalizada la cuenta de memoria, chequea los restantes timers y canales de DMA. Si funcionan correctamente los inicializa de acuerdo a la forma en la que van a trabajar cada uno de ellos.
Cheque el teclado y el timer tick, habilita sus interrupciones en el 8259.
Power On Self Test (3)
Testea el funcionamiento de las unidades de disco flexible y rígido. Una vez comprobado las inicializa, y escribe los resultados y principales parámetros en la BIOS DATA AREA.
Chequea si existen ports serie. Inicializa a los que encuentra y guarda resultados en BIOS DATA AREA.
Chequea si existen ports paralelo. Inicializa a los que encuentra y guarda resultados en BIOS DATA AREA.
Establece si existen extensiones BIOS. Esto es: La ROM BIOS de las PC provee un camino para integrar adaptadores de E/S con su propia ROM onboard.
Llama a la rutina Bootstrap loader para la carga del sistema operativo.
Detección de extensiones BIOS
El POST busca extensiones de BIOS. El rango de direcciones de memoria en las que
se pueden mapear estas ROMs va desde la C0000h hasta la EFFFFh.
Se busca dentro de este rango cada 2K una firma fija e igual a 55AAh. Si la encuentra asume que en esa página de 2k comienza una extensión de BIOS.
Si el POST detecta alguna ROM adicional, le transfiere temporariamente el control. La extensión de BIOS.
Detección de extensiones BIOS (2)
Inicializará el hardware para el que fue diseñada
Realizará, del mismo modo que el POST (de la ROM del sistema) un checksum, cuyo resultado debe ser 0 para que la ROM se considere de contenido válido.
Interceptará las interrupciones que necesite. Devolverá al POST el control del sistema (RET)
dejando al hardware asociado a la extensión BIOS, listo para su uso.
Extensiones BIOS: Mapa de Memoria
Boostrap Loader del BIOS
Lee el primer sector físico del disco, del que está configurado en el equipo en la secuencia de arranque.
Carga los 512 bytes en memoria RAM (0000h:7C00h)
Salta al primer byte (debe haber allí una instrucción válida)
Boostrap Loader del BIOS (2)
En ese sector debe residir un programa que sepa cargar al Sistema Operativo.
Entonces:− Debe leer del disco los archivos necesarios para
bajar a la memoria. − Para ello deben conocer la forma en que está
organizada la información en el disco− Debe descargarlos en memoria y en algún
momento transferirles la ejecución.− Esto lo hace con servicios del BIOS (en modo real)
Práctica: Primer código en modo protegido
%define KERNEL_MEMORY 8000h%define VIDEOMEM 0b8000hORG KERNEL_MEMORY ; acá nos carga nuestro
bootsectoruse16
climov eax,cr0 ;lee el registro de control 0.or al,1 ;setea el bit PE Protection Enable.mov cr0,eax ;pasa a modo protegido.jmp short $+2;vacía la cola de ejecución.
Práctica: Primer código en modo protegido
mp:in al,60h ;lee el tecladodec al ;compara con escjnz mp ;sino es esc siguemov eax,cr0and al,0feh ;resetea el PE.mov cr0,eax ;retorna a modo real.
Práctica: Primer código en modo protegido
mov ecx, 80*25mov eax,VIDEOMEMsar eax,4mov ds,axlimpiar_pantalla:mov byte [ecx * 2 2], 0mov byte [ecx * 2 1], 1Bhdec ecxjne limpiar_pantallajmp $
Uso de nasm y Linux
nasm f bin o bootsector.bin bootsector.asmnasm f bin o KERNEL.BIN kernel.asm l kernel.lstsudo mkdosfs C floppy.dsk F 12 1440sudo mount o loop t msdos floppy.dsk /mnt/pruebasudo cp KERNEL.BIN /mnt/pruebasudo umount /mnt/pruebadd if=floppy.dsk bs=512 skip=1 of=floppy1.dskcat bootsector.bin floppy1.dsk > floppy.imgsudo rm f floppy.dsk rm floppy1.dsk
Uso de bochs
<bochs:1> c – Inicia la ejecución (Dos consolas: Una de texto degub y otra
gráfica de emulación) ^c – Para la ejecución info r – Muestra los valores de los registros info cpu – Otra vista de los registros sreg s – Ejecución paso a paso n – Ejecución paso a paso, no para Call's
Uso de bochs (2)
help vb 0x1811:0x111 – Setea un Break Point blist – Veo los BP bpd 1 – Deshabilito un BP bpe 1 – Habilito un BP
Uso de bochs (3)
Magic Break Point− xchg bx,bx en el código en el punto que se desea
depurar. Archivo bochsrc requiere que esté activo
− magic_break: enabled=1
El archivo bochsrc
Configura el bochs Hay algunas poca líneas fundamentales:
− floppya: 1_44=floppy.img, status=inserted− boot: floppy− log: bochsout.txt− magic_break: enabled=1
Además de las que vienen por defecto