loadkernel.c

来自「ADS环境下的类似linux内核的操作系统」· C语言 代码 · 共 112 行

C
112
字号
/* MShowTec - www.mshowtec.com
** msLinux loadkernel.c ver1.0
** 20051221 lmjx create limiao@mshowtec.com
** 
*/

#define MSLINUX_LOADKERNEL_C

#include "cpu_reg.h"

void set_cs_cfg(void)
{
	
}

void set_timer_cfg(void)
{
	//timer
	*(unsigned long*)ARM7_TDATA = 10;
	*(unsigned long*)ARM7_TRELOAD = 10;
	*(unsigned long*)ARM7_TCNT = 0;
	*(unsigned long*)ARM7_TMOD = 3;

}

void set_uart_cfg(void)
{

}

void set_kbd_cfg(void)
{

}


void set_sys_cfg(void)
{

}

void set_int_cfg(void)
{
	//interrupt ctl
	*(unsigned long*)ARM7_INTMASK = 0;
	//KBD
	//kbd enable,use extInt1,subIntNO.=0
	*(unsigned long*)ARM7_KBDCON = 3;
	
	//Touch
	//touch enable,use extInt1,subIntNO.=1
	*(unsigned long*)ARM7_TOUCHCON = 0x103;

}



void init_memorry()
{

 unsigned char *psrc,*pdst;
 unsigned long sz,i;
  /* INITIALISED DATA from ESRAM region */
  psrc = (unsigned char*)&Load$$ESRAM$$Base;
  pdst = (unsigned char*)&Image$$ESRAM$$Base;
  sz = (unsigned long)&Image$$ESRAM$$Length;
  for(i=0;i<sz;i++)
  	*pdst++ =*psrc++;
  	
 pdst = (unsigned char*)&Image$$ESRAM$$ZI$$Base;
 sz = (unsigned long)&Image$$ESRAM$$ZI$$Length;
 for(i=0;i<sz;i++)
 	*pdst++ = 0;
 	
  /* INITIALISED DATA from MEMORY region */
  psrc = (unsigned char*)&Load$$MEMORY$$Base;
  pdst = (unsigned char*)&Image$$MEMORY$$Base;
  sz = (unsigned long)&Image$$MEMORY$$Length;
  for(i=0;i<sz;i++)
  	*pdst++ =*psrc++;
  	
 pdst = (unsigned char*)&Image$$MEMORY$$ZI$$Base;
 sz = (unsigned long)&Image$$MEMORY$$ZI$$Length;
 for(i=0;i<sz;i++)
 	*pdst++ = 0;
 
}


void loadkernel()
{  
	int i,x,y;
	unsigned short NandId;
	char outbuf[40];

	set_cs_cfg();
	set_timer_cfg();
	set_uart_cfg();
	set_kbd_cfg();
	set_sys_cfg();
	set_int_cfg();
	
	init_memorry();
	start_kernel();
		
	printk("can not run to here\r\n");
	for(;;);
	
	return;	
}

⌨️ 快捷键说明

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