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();
}
示例#3
0
文件: startup.c 项目: kavefish/Benu
/*!
 * 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
}
示例#4
0
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;
}
示例#5
0
/*!
 * 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
}