int sys__device_open ( char *dev_name, void **dev ) { ASSERT_ERRNO_AND_EXIT ( dev_name && dev, E_INVALID_HANDLE ); disable_interrupts (); *dev = k_device_open ( dev_name ); enable_interrupts (); return *dev == NULL; }
/*! * First kernel function (after grub loads it to memory) * \param magic Multiboot magic number * \param addr Address where multiboot structure is saved */ void k_startup ( unsigned long magic, unsigned long addr ) { extern device_t K_INITIAL_STDOUT; extern kdevice_t *k_stdout; /* console for kernel messages */ kdevice_t k_initial_stdout; /* default standard input and output devices for user programs */ extern void *u_stdin, *u_stdout; /* set initial stdout */ k_initial_stdout.dev = K_INITIAL_STDOUT; k_initial_stdout.dev.init ( 0, NULL, &k_initial_stdout.dev ); k_stdout = &k_initial_stdout; /* initialize memory subsystem (needed for boot) */ k_memory_init ( magic, addr ); /*! start with regular initialization */ /* interrupts */ arch_init_interrupts (); /* timer subsystem */ k_time_init (); /* devices */ k_devices_init (); /* switch to default 'stdout' for kernel */ k_stdout = k_device_open ( K_STDOUT ); u_stdin = k_device_open ( U_STDIN ); u_stdout = k_device_open ( U_STDOUT ); kprint ( "%s\n", system_info ); enable_interrupts (); /* start shell */ shell ( NULL ); kprint ( "\nSystem halted!\n" ); halt(); }
/*! * First kernel function (after boot loader loads it to memory) */ void k_startup () { extern void *k_stdout; /* console for kernel messages */ /* set initial stdout */ kdevice_set_initial_stdout (); /* 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, NULL ); arch_register_interrupt_handler ( INT_UNDEF_FAULT, k_memory_fault, NULL ); /* timer subsystem */ k_time_init (); /* devices */ k_devices_init (); /* switch to default 'stdout' for kernel */ k_stdout = k_device_open ( K_STDOUT, O_WRONLY ); kprintf ( "%s\n", system_info ); /* enable interrupts */ enable_interrupts (); stdio_init (); /* initialize standard input & output devices */ /* start desired program(s) */ hello_world (); keyboard (); timer (); /* segm_fault (); */ #if ( TURN_OFF == 0 ) kprintf ( "\nSystem halted!\n" ); halt (); #else /* power off (if supported, or just stop if not) */ kprintf ( "Powering off\n\n" ); power_off (); #endif }
int sys__device_open ( void *p ) { char *dev_name; void **dev; dev_name = U2K_GET_ADR ( *( (char **) p ), kthread_get_process (NULL) ); p += sizeof (char *); dev = U2K_GET_ADR ( *( (void **) p ), kthread_get_process (NULL) ); *dev = k_device_open ( dev_name ); return *dev == NULL; }
/*! * First kernel function (after boot loader loads it to memory) */ void k_startup () { extern void *k_stdout; /* console for kernel messages */ extern prog_info_t pi; /* set initial stdout */ kdevice_set_initial_stdout (); /* 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, NULL ); arch_register_interrupt_handler ( INT_UNDEF_FAULT, k_memory_fault, NULL ); /* timer subsystem */ k_time_init (); /* devices */ k_devices_init (); /* switch to default 'stdout' for kernel */ k_stdout = k_device_open ( K_STDOUT, O_WRONLY ); kprintf ( "%s\n", system_info ); pi.heap = kmalloc ( PROG_HEAP_SIZE ); pi.heap_size = PROG_HEAP_SIZE; /* enable interrupts */ enable_interrupts (); /* starting program routine */ prog_init ( NULL ); #if ( TURN_OFF == 0 ) kprintf ( "\nSystem halted!\n" ); halt (); #else /* power off (if supported, or just stop if not) */ kprintf ( "Powering off\n\n" ); power_off (); #endif }