Pregunta

¿Cómo se compila un C programa para un ELF formato válido (o RAW) para que pueda ser ejecutado directamente desde la memoria RAM sin ningún OS ? Supongamos que un gestor de arranque existe, que es capaz de cargar el código para cualquier ubicación en la memoria RAM y comenzar la ejecución en esa dirección. Para ser precisos, lo que debería ser el compilador ( CCG ) banderas? ¿Hay una necesidad de un archivo de mapa?

Una aplicación de ejemplo holamundo sería muy bienvenida:)

Sólo para elaborar mi punto,
dejar que el método main () sea un infinito vacío mientras bucle para asegurar que ningún SO se utilizan las llamadas específicas o estándar de la biblioteca. La O / P deseado es un truco. Con la habitual CCG Opciones el gestor de arranque definitivamente no se cargará el ejecutable diciendo que no es válido ELF formato. Sin embargo al pasar dn para el enlazador hará que sea válida una ELF . Más compilador / enlazador opciones se requiere para hacer que cuelgue y se estrella !! ¿Cuáles son exactamente esas opciones del compilador?

file.c:
int main()
{
    while(1);
}

Compilación
    gcc -c opciones -nostdinc -fno-orden interna file.c
    ld -dn -nostdlib file.o

cargas cargador de arranque a.out a la RAM y se ejecuta.

¿Fue útil?

Solución

En primer lugar, hay limitaciones a lo que puede hacer, una vez que termine su trabajo gestor de arranque. Estas limitaciones son causa de las cosas siguientes: (Suponiendo que el gestor de arranque (por ejemplo: grub), le lleva al modo protegido de 32 bits) 1. No hay paginación habilitado. Es necesario para que pueda. 2. Allí no puede interactuar con los dispositivos que usted tiene que fijar los manipuladores de IRQ.

Aquí hay un enlace clásico que he usado para aprender el arte de la programación sobre el metal desnudo ( http : //geezer.osdevbrasil.net/osd/index.htm ). Además, hay un enlace de descarga en la página ( http://geezer.osdevbrasil.net /osd/code/osd.tgz ). El archivo tar contiene granos de demostración con el aumento del nivel de complejidad. Además, se puede mirar en el archivo make (linux.mak), y obtener indicadores necesarios para gcc.

Abrí un archivo de marca al azar y se encontró que se utilizaron indicadores siguientes: gcc: opciones -nostdinc -fno-incorporado LD: -nostdlib
(Se hace una llamada explícita a enlazador, por lo tanto, ld también necesita una bandera).

El propósito banderas es decirle a gcc que no debe haber ninguna vinculación hecho con la biblioteca estándar.

Otros consejos

Coreboot puede cargar ELF autónomo. consulte "Inicialización de DRAM":

http://en.wikipedia.org/wiki/Coreboot

http://www.osdever.net/bkerndev/index.php

Este sitio responde a su pregunta, paso a paso ...

¿Se da cuenta de que si no se carga un sistema operativo debe escribir un controlador de dispositivo para funcionar con cualquier dispositivo. Eso significa que hay escritura a la pantalla sin tener que escribir un controlador para la tarjeta de vídeo en particular, no hay lectura desde el disco sin tener que escribir un controlador para que la tarjeta controladora de disco duro en particular, sin acceder al teclado, etc.

Es posible que desee ver en algo que se llama modo de pantalla completa en lugar . La idea básica es que el sistema operativo se ejecuta, se carga todo lo que necesita para su aplicación, carga su aplicación, y entonces no se puede cambiar a otra aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top