Título: Bootloader 32-bit y segmentación Publicado por: lweb20 en 2 Septiembre 2012, 04:53 am Buenas.
Les cuento que hace un tiempo comencé a aprender asm (assembly) por motivos que me pareció bastante interesante poder decirle a la computadora lo que quería y esta lo hacía sin ningún límite :o, así que como los sistemas de 32-bit como windows (por cierto tengo win8 de 64bits que no me deja hacer mucho...) y linux estaban limitados quise hacer un programa que corriera al inicio de la computadora, que muestre un mensaje y algo más... ;) Bueno la cosa es que estuve a full averiguando ;-), imprimiendo manuales completos de asm.. y bueno he aprendido varias cosas pero existen algunos temas que no los entiendo por nada >:( como son La Segmentación que se requiere creo yo en el bootloader y en un kernel ( digo kernel porque queria un bootloader y un archivo ejecutable ). Digo esto debido a que por ejemplo quiero mostrar un mensaje y no lo muestra o lo hace incompleto. He programado con FASM MASM y NASM pero más me gusta el nasm ya que es multisistema (así se llama creo). Ya estaba trabajando en un minisistema operativo (resaltando "mini") que muestre un mensaje y pida una o mas teclas y todo funciona a la "perfección" a excepción que no puedo trabajar con 32 bits. Cuando intento entrar al famoso modo protegido lógicamente no me deja usar interrupciones ya que está "protegido". Al tener este problema investigué y encontré algunos temas (en inglés por cierto) que tengo que escribir directamente en la memoria pero tampoco no me funciona... Bueno esas son todas mis dudas por el momento. :) Lo que quiero hacer en conclusión es un bootloader de 16 bits que lea un kernel.bin y este kernel pase de 16 bits a 32 bits y muestre un mensaje. NADA MÁS :xD ¿Alguien me podría explicar por favor? y disculpen la molestia ;D Título: Re: Bootloader 32-bit y segmentación Publicado por: zu-zu en 4 Septiembre 2012, 23:11 pm Sería mucho mejor que publicaras el código conflictivo, información de la VM que estas usando para hacer pruebas, arquitectura, etc.
Título: Re: Bootloader 32-bit y segmentación Publicado por: Khronos14 en 4 Septiembre 2012, 23:38 pm ¿Tienes algo hecho? Básicamente, primero tienes que comprender el sistema de archivos FAT12. A mi me llevó un poco y construí mi propia herramienta para crear imágenes FAT12:
http://sourceforge.net/projects/fat12maker/ Luego, usando NASM hice el bootstrap para el sector 0 de mi imagen del disquete. Este se encarga de leer todas las entradas del directorio raiz y busca el archivo Stage_2.bin. Una vez que encuentra la entrada, lee el StartingCluster. Almacenamos ese valor y cargamos en memoria toda la FAT, y empezamos a cargar sectores en memoria según el StartingCluster y los siguientes... Lo único que te queda luego es hacer un jump al buffer y listo! Ahora estas en el Stage_2, entrar en modo protegido es bastante sencillo: tienes que crear la GDT, poner a 1 el bit menos significativo de CR0 y hacer un jump: Código
En http://wiki.osdev.org/Main_Page tienes mucha información, pero claro, hay que buscar en inglés. Saludos. |