loadkernel.c

来自「msLinux v1.0 可以在arm ads 下仿真运行的linux」· C语言 代码 · 共 106 行

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

#define MSLINUX_LOADKERNEL_C

#include "cpu_reg.h"
#include "kernel.h"

void start_kernel(void);

void set_cs_cfg(void)
{	
 
}

void set_timer_cfg(void)
{
	*IRQEnableClear = ~0;      // Clear/disable all interrupts

  	*Timer1Control = 0;        // Disable counters by clearing the control bytes
  	*Timer2Control = 0;

	*Timer1Clear = 0 ;         // Clear counter/timer interrupts by writing to
  	*Timer2Clear = 0 ;         // The clear register - any data will work

  	*Timer1Load = 0x4000;        // Load counter values 
  	*Timer2Load = 0xffff;    

	*Timer1Control = (TimerEnable   |   // Enable the Timer                  
					TimerPeriodic |   // Periodic Timer producing interrupt
					TimerPrescale8 ); // Set Maximum Prescale - 8 bits                
                      
  	*Timer2Control = (TimerDisable);   // Disable the Timer   
}

void set_uart_cfg(void)
{

}


void set_sys_cfg(void)
{

}

void set_int_cfg(void)
{
	*IRQEnableSet = (IRQTimer1 | IRQTimer2 | IRQProgrammed); // Enable interrupts
}



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 load_kernel()
{  
	set_cs_cfg();
	set_sys_cfg();
	set_timer_cfg();
	set_uart_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 + -
显示快捷键?