/*! * First kernel function (after boot loader loads it to memory) */ void k_startup () { extern console_t K_INITIAL_STDOUT, K_STDOUT; extern console_t *k_stdout; /* console for kernel messages */ /* set initial stdout */ k_stdout = &K_INITIAL_STDOUT; k_stdout->init (0); /* initialize memory subsystem (needed for boot) */ k_memory_init (); /*! start with regular initialization */ /* interrupts */ arch_init_interrupts (); /* detect memory faults (qemu do not detect segment violations!) */ arch_register_interrupt_handler ( INT_MEM_FAULT, k_memory_fault ); arch_register_interrupt_handler ( INT_UNDEF_FAULT, k_memory_fault ); /* switch to default 'stdout' for kernel */ k_stdout = &K_STDOUT; k_stdout->init (0); kprintf ( "%s\n", system_info ); /* enable interrupts */ enable_interrupts (); stdio_init (); /* initialize standard output devices */ /* start desired program(s) */ hello_world (); segm_fault (); #if ( TURN_OFF == 0 ) kprintf ( "\nSystem halted!\n" ); #ifdef PL190 /* testing uart (arm) interrupts */ void uart0_echo_test_start (); uart0_echo_test_start (); suspend(); #endif halt (); #else /* power off (if supported, or just stop if not) */ kprintf ( "Powering off\n\n" ); power_off (); #endif }
static void run_all ( char *argv[] ) { kprintf ( "\nStarting program: hello_world\n\n" ); hello_world (argv); kprintf ( "\nStarting program: timer\n\n" ); timer (argv); #if 0 kprintf ( "\nStarting program: keyboard\n\n" ); keyboard (argv); kprintf ( "\nStarting program: segm_fault\n\n" ); segm_fault (argv); #endif kprintf ( "\nStarting program: arguments\n\n" ); char *args[] = { "first", "second", "third", NULL }; arguments (args); }