⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 msLinux v1.0 可以在arm ads 下仿真运行的linux
💻 C
字号:
/* MShowTec - www.mshowtec.com
** msLinux main.c ver1.0
** 20051221 lmjx create limiao@mshowtec.com
** 
*/
#define MSLINUX_MAIN_C

#include "Align.h"
#include "sched.h"
#include "align.h"
#include "fork.h"
#include "sys.h"
#include "sem.h"
#include "msg.h"
#include "kernel.h"
#include "dev.h"
#include "tty.h"

#define TASK0_STACK_SIZE		(ALIGN4B(1025)-4+1)

DEFINE_TASK_STACK(stack0,TASK0_STACK_SIZE);
struct task_struct *sleep;

void delay_test(int tic)
{
	while(tic-->0){
		__asm{nop};
	}
}

void test0()
{
	while(1){
		semaphore_take(USER_SEM_TEST_0);
		show_stat();
		semaphore_give(USER_SEM_TEST_1);
	}
}

void test1()
{
	semaphore_give(USER_SEM_TEST_0);
	while(1){
		semaphore_take(USER_SEM_TEST_1);
		printk("test1 get semaphone\r\n");
		delay_test(100000);
		semaphore_give(USER_SEM_TEST_0);
	}
}

void test2()
{
	while(1){
		__asm{nop};
	}
}

void init(void)
{
	int pid,i;

	printk("[ms-linux]:init \r\n");
	
	while(1){
		if ((pid=_sys_fork())<0) {
			printk("Fork failed in init\r\n");
			continue;
		}
		if (!pid) {
			sys_setsid();
			test0();
			sys_exit(0);
		}
		if (!_sys_fork()) {
			test1();
			sys_exit(0);
		}
		if (!_sys_fork()) {
			test2();
			sys_exit(0);
		}
		while (1)
			if (pid == wait(&i))
				break;
		printk("\n\rchild %d died with code %04x\n\r",pid,i);

	}
	sys_exit(0);	/* NOTE! _exit, not exit() */
}

void Task0(void)
{
	int i;
	int irq_save;

	printk("[ms-linux]:First task - task0 start\r\n");
	
	mslinux_enable_irq();
	
	if(!_sys_fork()){
		init();
	}	
	
	for(;;){
		sys_pause();
	}
	
}

void user_semaphore_init()
{
	semaphore_init(USER_SEM_TEST_0,1,0);
 	semaphore_init(USER_SEM_TEST_1,1,0);	
	semaphore_init(USER_SEM_TEST_2,1,0);	
}

/* void start_kernel(void)
** lmjx 051222 ver1.0
**/
void start_kernel(void)
{
	mem_init();
	trap_init();
	time_init() ;
	sched_init();
	dev_init();
	//dev_user_init();

	tty_register();
	ioctrl(DEV_TTY,IOCTRL_INIT,0);

	printk("\r\nwww.mshowtec.com\r\n\r\n");
	printk("Welcom to ms-Linux World\r\n");
	printk("[ms-linux]:Start kernel %s\r\n",MSLINUX_KERNEL_VER);
	
	mslinux_semaphore_init();
	mslinux_message_init();

	user_semaphore_init();
	
	task0.stack.p_SP = (long)(task_stack0+TASK0_STACK_SIZE-1);
	task0.stack.p_TopOfStack = (long)task_stack0;
	task0.stack.L_Stack_SZ = TASK0_STACK_SIZE;
	task_stack0[0] = 0x55;
	move_to_user_mode(task0.stack.p_SP,Task0);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -