コード例 #1
0
ファイル: main.c プロジェクト: domoritz/nupkux
int init(void)
{
	int ret = 0;
	pid_t pid;
	if (!(pid = sys_fork())) {
		set_kernel_stack(current_task->kernel_stack + KERNEL_STACK_SIZE);
		asm volatile ("int $0x80":"=a"(ret):"a"(__NR_execve), "b"("/bin/init"), "c"(0), "d"(0));
		asm volatile ("int $0x80"::"a"(__NR_exit), "b"(ret));
		for (;;);
	}
コード例 #2
0
ファイル: syscalls.c プロジェクト: aqrln/aquarius-os
void InitSyscalls(void)
{
	//KernelStack = kmalloc(STACK_SIZE);
	u32 StackTop = (u32)KernelStack + STACK_SIZE - 4;
	set_kernel_stack(StackTop);

	WriteMSR(MSR_IA32_SYSENTER_CS, 0, 0xb); // 0x8 + 0x3
	WriteMSR(MSR_IA32_SYSENTER_ESP, 0, StackTop);
	WriteMSR(MSR_IA32_SYSENTER_EIP, 0, (u32)SyscallEntry);

	register_interrupt_handler(0x80, Int80hSyscall);
	register_interrupt_handler(0x21, kbd_irq);
}
コード例 #3
0
ファイル: task.c プロジェクト: bithinalangot/seakernel
void switch_to_user_mode()
{
	/* set up the kernel stack first...*/
	set_kernel_stack(current_tss, current_task->kernel_stack + (KERN_STACK_SIZE-STACK_ELEMENT_SIZE));
	do_switch_to_user_mode();
}