Crea Tu Sistema Operativo
Enviado por Fercho1993 • 10 de Octubre de 2012 • 1.545 Palabras (7 Páginas) • 460 Visitas
Crea tu Sistema Operativo desde cero original. No es unWindows Desatendido ni un *NIX modificado.
Copyright (C) 2002 Krishnakumar R.
Traducido y adaptado por mí (no Repost) esto es lo más básico en otro post agregaré más cosas.
Este artículo es un tutorial práctico para la construcción de un pequeño sector de arranque. La primera sección contiene la teoría de lo que ocurre en el momento que se enciende el ordenador. También explica nuestro plan. La segunda sección le dice todas las cosas que usted debe tener a mano antes de seguir adelante, y la tercera sección se ocupa de los programas. (Estas dos secciones comentadas, la segunda y tercera se publicarán en otro post) Nuestro programa de inicio, en realidad, no va a arrancar Linux, pero mostrará algo en la pantalla.
0. Resumen:
El microprocesador controla el equipo. Al iniciar la computadora, el microprocesador trabaja como un 8086. A pesar de que usted pueda tener un nuevo, de marca Pentium, sólo tendrá la capacidad de un 8086. Desde este punto, podemos utilizar algún software del procesador y cambiar al modo protegido infame. Sólo entonces podremos utilizar la potencia máxima del procesador.
0.1 Nuestro objetivo
Inicialmente, el control está en manos de la BIOS. Esto no es sino una colección de programas que se almacenan en la memoria ROM. BIOS realiza el POST (Power On Self Test). Esto comprueba la integridad de la computadora (si los periféricos funcionan correctamente, si el teclado está conectado, etc.) Esto es cuando usted oye los sonidos de la computadora (si es nueva la computadora, hará menos ruido, aún así lo hace). Si todo está bien, la BIOS selecciona un dispositivo de arranque. Se copia el primer sector (sector de arranque) del dispositivo, para hacer frente a la ubicación 0x7C00. El control se transfiere a esta ubicación. El dispositivo de arranque puede ser un disquete, CD-ROM, disco duro u otro dispositivo de su elección. Aquí tomaremos un disquete como el dispositivo de arranque. Si hubiéramos escrito algo de código en el sector de arranque del disquete, nuestro código sería ejecutado ahora. Nuestro papel es claro: sólo escribiremos algunos programas para el sector de arranque del disquete.
0.2 El Plan
Primero escribe un pequeño programa en 8086 de montaje (no se asusten, yo le enseñaré cómo escribirlo), y copiarlo en el sector de arranque del disquete. Para copiarlo, vamos a utilizar un código de un programa de C. Inicie el equipo con ese disquete, y luego, a disfrutar. Lo probaremos en una máquina virtual, ya que algunas computadoras o portátiles no tienen disquetera. Si tiene disquetera y un disquet, lo puede probar en su computadora.
0.3 Cosas que usted debe tener
as86
Este es un ensamblador (compilador). El código de ensamblador se escribe, después se convierte en un archivo/objeto con esta herramienta/aplicación.
ld86
Este es el vinculador. El código objeto generado por AS86 se convierte en verdadero código de lenguaje de máquina gracias esta herramienta. El lenguaje de máquina será la forma que entiende 8086.
gcc
El compilador de C. De momento tenemos que escribir un programa en C para transferir nuestro sistema operativo en el disquete.
Linux: cualquier distribución Linux. Para instalar estos paquetes debe de saber instalar paquetes desde los repositorios oficiales de su distribución. Normalmente estos paquetes ya están incluidos en la distribución.
Otros: un disquete formateado (utilizaremos una imagen .img para usarlo en la máquina virtual)
Un disquete se utiliza para almacenar el sistema operativo (sus archivos). Esto también es nuestro dispositivo de arranque.
Máquina virtual o computadora con disquetera.
Los puntos 0.X eran importante leerlos. Aunque no os interesen si los leen ahorraremos problemas.
Empecemos
1. Empecemos
1.1 El sector de arranque
Inicie su editor favorito y escriba o copie estas líneas.
entry start
start:
mov ax,#0xb800
mov es,ax
seg es
mov [0],#0x41
seg es
mov ,#0x1f
loop1: jmp loop1
Este es un programa en lenguaje ensamblador AS86 que va a entender. La primera declaración especifica el punto de entrada donde el control debe entrar en el programa. Estamos diciendo que el control debe ir inicialmente para comenzar la etiqueta. La línea 2 muestra la ubicación de la etiqueta de inicio (no se olvide de poner ":" después de la salida). La primera instrucción que se ejecutará en este programa es la declaración que acaba después de la puesta.
0xb800 es la dirección de la memoria de vídeo. El # es para representar un valor inmediato. Después de la ejecución de
mov ax, # 0xb800
El registro ax contendrá el valor 0xb800,
...