Main Page   Modules   Alphabetical List   Data Structures   File List   Data Fields   Globals   Related Pages  

Kernel Initialization
[Kernel]


Functions

void print_ok ()
 Print the [ OK ] tag.

void print_error ()
 Print the [ ERROR ] tag.

void k_main ()
 This is the beginning of the kernel!!! You can figure it as the init task...
Warning:
To obviate memory faults, first of all, we MUST initialize paging with the init_paging() routine.



Variables

task_tcurr_task
 A pointer to the current running task structure. Declared in task.c.

queue_tready_queue
 A pointer to ready queue. Declared in task.c.

multiboot_info_tboot_info
 The multiboot information pointer from GRUB.

dword PHYS_MEM_DIM
 The physical memory dimension. Initialized in paging.c.

int i
 Used to create initial consoles.


Detailed Description

The initialization routine.

Function Documentation

void k_main  
 

This is the beginning of the kernel!!! You can figure it as the init task...

Warning:
To obviate memory faults, first of all, we MUST initialize paging with the init_paging() routine.

Definition at line 148 of file main.c.

00149 {
00150         // First of all we MUST initialize paging!!!                    //
00151         init_paging();
00152 
00153         // Initialize video                                             //
00154         init_video();
00155         init_main_console();
00156 
00157         // Now we can print some informations...                        //
00158         kprintf("\n\r<Starting initialization>\n\r");
00159         kprintf("\n\rKernel is running at virtual address:");
00160         kprintf("\r                                             %#010x\n\r", (dword)&k_main);
00161 
00162         // Get some multiboot informations                              //
00163         boot_info = (multiboot_info_t *)PHYSICAL((dword)boot_info);
00164         if (boot_info->flags & 0x02)
00165         {
00166                 // set_color(DEFAULT_COLOR);
00167                 kprintf(        "Total amount of conventional memory:");
00168                 kprintf("\r                                             %uKB\n\r", ((dword)boot_info->mem_lower));
00169                 kprintf(        "Total amount of extended memory:");
00170                 kprintf("\r                                             %uMB\n\r", PHYS_MEM_DIM/1024/1024);
00171                 kprintf("\n\r");
00172 
00173         }
00174         else
00175         {
00176                 set_color(LIGHT_RED);
00177                 kprintf("\n\rError reading multiboot informations... halting!");
00178         }
00179 
00180         // Initialize clock                                             //
00181         kprintf("Initializing system clock...");
00182         init_clock();
00183         print_ok();
00184 
00185         // Reprogram the PIC 8259 (interrupt controller)                //
00186         kprintf("Reprogramming PIC 8259...");
00187         reprogram_PIC();
00188         print_ok();
00189 
00190         // Installing GDT                                               //
00191         kprintf("Installing kernel GDT...");
00192         install_GDT();
00193         print_ok();
00194 
00195         // Installing IDT                                               //
00196         kprintf("Installing kernel IDT...");
00197         install_IDT();
00198         print_ok();
00199 
00200         // Initialize memory manager                                    //
00201         kprintf("Initializing memory manager...");
00202         kmalloc_init();
00203         print_ok();
00204 
00205         // Initialize memory manager                                    //
00206         kprintf("Initializing DMA allocator...");
00207         dma_alloc_init();
00208         print_ok();
00209 
00210         // Initialize multitasking                                      //
00211         kprintf("Initializing multitasking...");
00212         init_multitasking();
00213         print_ok();
00214 
00215         // Initialize the Real-Time Clock                               //
00216         kprintf("Initializing Real-Time Clock...");
00217         time_init();
00218         print_ok();
00219 
00220         // Initialize the keyboard                                      //
00221         kprintf("Initializing keyboard...");
00222         init_keyboard();
00223         print_ok();
00224 
00225         // Initialize the floppy                                        //
00226         kprintf("Initializing floppy driver...");
00227         if ( init_floppy() )
00228                 print_ok();
00229         else
00230                 print_error();
00231 
00232         // Auto-mount FAT12 on the floppy                               //
00233         kprintf("Auto-mounting FAT12 file-system on floppy...");
00234         if ( Read_FAT() )
00235                 print_ok();
00236         else
00237                 print_error();
00238 
00239         // ******************* Luca Giovacchini *************************
00240         // Initialize the ide driver //
00241         kprintf("Initializing ide driver...");
00242         // init ide return error that are not critical so we will ignore that
00243         InitIde();
00244         print_ok();
00245         ShowIdeSubData();
00246         kprintf("\n\r");
00247         // **************************************************************
00248 
00249         // ********************** Filippo Brogi *************************
00250         // Initialize the ext2 file-system                              //
00251         kprintf("Auto-mounting ext2 file-system on /dev/hda1...");
00252         if ( init_ext2() )
00253                 print_ok();
00254         else
00255         {
00256                 kprintf("\n\rUnable to read the super block!!!");
00257                 print_error();
00258         }
00259         // **************************************************************
00260 
00261         // Initialize virtual consoles                                  //
00262         kprintf("Creating virtual consoles...");
00263         create_virtual_console();
00264         set_color(GREEN);
00265         print_ok();
00266 
00267         // Initialization complete                                      //
00268         kprintf("\n\r<Initialization complete>\n\r");
00269         set_color(WHITE);
00270         kprintf("\n\r*** Welcome to %s - Kernel [v%s] ***\n\r", KERNEL_NAME, KERNEL_VERSION);
00271         set_color(DEFAULT_COLOR);
00272 
00273         // Create a shell task for every console                        //
00274         for(i=1; i<=10; i++)
00275         {
00276                 curr_task->console = i;
00277                 if ( i>1 ) clrscr();
00278                 create_kthread(&shell, "MiniShell");
00279                 // create_process(&shell, &shell, 0, "MiniShell", KERNEL_PRIVILEGE);
00280         }
00281         curr_task->console=1;
00282         set_curr_console(1);
00283 
00284         // Well done!!!                                                 //
00285         auto_kill( 0 );
00286 }

void print_error  
 

Print the [ ERROR ] tag.

Definition at line 132 of file main.c.

00133 {
00134         set_color(DEFAULT_COLOR);
00135         kprintf("\r                                             [     ]");
00136         set_color(LIGHT_RED);
00137         gotoxy(49, -1);
00138         kprintf("ERROR\n\r");
00139         set_color(DEFAULT_COLOR);
00140 }

void print_ok  
 

Print the [ OK ] tag.

Definition at line 121 of file main.c.

00122 {
00123         set_color(DEFAULT_COLOR);
00124         kprintf("\r                                             [    ]");
00125         set_color(GREEN);
00126         gotoxy(50, -1);
00127         kprintf("OK\n\r");
00128         set_color(DEFAULT_COLOR);
00129 }


Variable Documentation

multiboot_info_t* boot_info
 

The multiboot information pointer from GRUB.

Definition at line 114 of file main.c.

task_t* curr_task
 

A pointer to the current running task structure. Declared in task.c.

Definition at line 110 of file main.c.

int i
 

Used to create initial consoles.

Definition at line 118 of file main.c.

dword PHYS_MEM_DIM
 

The physical memory dimension. Initialized in paging.c.

Definition at line 116 of file main.c.

queue_t* ready_queue
 

A pointer to ready queue. Declared in task.c.

Definition at line 112 of file main.c.


Generated on Fri Feb 20 15:32:23 2004 for Minirighi by doxygen1.2.18