kmain.c

Go to the documentation of this file.
00001 
00006 #include "routix/system.h"
00007 #include "routix/paging.h"
00008 #include "routix/segm.h"
00009 #include "routix/debug.h"
00010 #include "routix/8259.h"
00011 #include "routix/8254.h"
00012 
00013 #include "routix/task.h"
00014 #include "drivers/fat.h"
00015 #include "routix/kalloc.h"
00016 #include "routix/syscalls.h"
00017 #include <routix/kstdio.h>
00018 #include "fs/blockcache.h"
00019 
00020 // Puntero a pagina de wrappers de usuario
00021 addr_t *exit_addr;
00022 void init_MM_base(void);
00023 void init_MM (void);
00024 void init_all_memory (dword memoria);
00025 dword contar_memoria (void);
00026 
00027 void inicializarInterrupciones (void);
00028 void start_scheduler (void);
00029 void floppy_cache_init (void);
00030 void entrada_de_inicio (void);
00031 void init_time (void);
00032 
00033 void init_var (void);
00034 
00035 
00036 void kmain (void)
00037 {
00038         /* Deshabilitamos todas las interrupciones */
00039         mascarasPics(0xff,0xff);
00040 
00041         init_MM();
00042 
00043         /* Seguimos la ejecución en la dirección virtual */
00044         __asm__("aca: jmp aca+5+0xc0000000");
00045 
00046         /* Acomodamos el stack pointer a su valor virtual
00047          * 0x200000    es el TOP FISICO  del STACK
00048          * 0xd8000000  es el TOP VIRTUAL del STACK */
00049         __asm__ __volatile__ ("movl $0x200000, %%eax\n\t" \
00050                               "subl %%esp, %%eax\n\t"     \
00051                               "movl %%eax, %%esp\n\t"      \
00052                               "movl $0xd8000000,%%eax\n\t" \
00053                               "subl %%esp, %%eax\n\t"
00054                               "movl %%eax, %%esp" : : : "eax" );
00055 
00056 
00057         clrscr();
00058         puts("Inicializando kernel....\n");
00059 
00060         puts("Inicializando Controladores Programables de Interrupciones...\n");
00061         inicializarPics(0x20,0x28);
00062                 
00063         puts("Kmalloc Inicializando...\n");
00064         kprintf("Memoria fisica %d Megabytes\n",memoria);
00065 
00066         inicializacion_kmalloc(memoria, KERNEL_END );
00067         puts("Kmalloc Inicializacion completa\n");
00068 
00069         /* Mapea linealmente el resto de la memoria fisica (a partir de los 4Mb en adelante) */
00070         init_all_memory(memoria);
00071 
00072 
00073         puts("Inicializando interrupciones\n");
00074         inicializarInterrupciones();
00075 
00076         puts("Inicializando 8254\n");
00077         init_8254();
00078 
00079         puts("Inicializando Rejoj\n");
00080         init_time();
00081 
00082         // Inicialización del cache de bloques
00083         start_block_cache(memoria);
00084 
00085         // Ubicar un directorio de páginas para las tareas en modo kernel
00086         USER_PDT = kmalloc_page();
00087         copy_page ((void *)USER_PDT, (void *)KERNEL_PDT);
00088         unsigned long *puntero = (unsigned long *)USER_PDT;
00089         int i;
00090         // A los 2 primeros GB de memoria los pongo como Supervisor Only
00091         for (i=0 ; i<PAGINA_SIZE ; i++)
00092                 puntero[i] = puntero[i] & 0xfffffffb;
00093 
00094 
00095         // Inicialización del scheduler
00096         puts("Inicializando el scheduler\n");
00097         start_scheduler();
00098 
00099         /*
00100         extern dev_fat_t dev_fat[1];            //Estructura para dispositivos con fs FAT
00101     dev_fat[0].boot_leido = FALSE;              
00102         dev_fat[0].fat_levantada = FALSE;
00103         floppy_cache_init();
00104         */
00105         
00106         kprintf("Task Struct Size: %d\n", sizeof(task_struct_t));
00107 
00108         // Habilitamos solo teclado, timertick y floppy
00109         enable_irq(0);
00110         enable_irq(1);
00111         enable_irq(6);
00112 
00113         // Inicializar variables USER-KERNEL (moemntaneas) definidas en sysmisc.c
00114         init_var();
00115 
00116 
00117 
00118         entrada_de_inicio();
00119 
00120 }
00121 

Generated on Sun May 30 18:38:34 2004 for Routix OS by doxygen 1.3.6