欢迎来到天天文库
浏览记录
ID:24566141
大小:50.00 KB
页数:3页
时间:2018-11-15
《wince oal中的startup.s介绍》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、WinCEOAL中的Startup.s介绍 应该说Startup.s是OAL最开始的入口,就像EBOOT中的Startup.s一样,它也是来说,大致步骤如下: 1.设置CPU为supervisor模式 2.禁用IRQ和FIQ中断 3.关闭MMU和指令数据Cache 4.刷新Cache和TLB,清空ory控制器及时序 8.配置中断控制器,清除所有中断 9.初始化RTC 10.配置CPU的电源管理 11.设置CPU的时钟及相关的外设的时钟 12.将OEMAddressTable的起始地址写入r0寄存器 13.跳
2、转到Kernelstart中 程序最后会跳转到KernelStart中,在Private目录下的armstart.s中,这里仍然是汇编,大致步骤如下: 1.基于传入的OEMAddresstable初始化一级页表 2.使能MMU和Cache 3.为每一种ARM模式建立堆栈 4.调用ARMInit函数获得kernel.dll的入口,该函数在arminit.c中定义 5.返回kernel.dll的入口为NKStartup,在mdarm.c中定义,跳转到kernel.dll入口开始运行 6.在NKStartup中读取CPU
3、的ID判断ARMv6架构,初始化内核的全局变量 7.调用OEMInitDebugSerial初始化调试串口 8.调用OEMInit初始化相关的外设接口 9.调用OEMCacheRangeFlush刷新Cache和TLB 10.调用KernelFindMemory来划分对象存储空间和程序内存空间 11.调用kernelstart函数,它与最开始的kernelstart不同,它在armtrap.s中定义 到此应该说CPU相关的初始化基本完成了,下面就是要开始strap.s中的kernelstart继续执行 2.调用Ke
4、rnelInit函数,在nkinit.c中定义,主要完成API集的初始化,内核Heap的初始化,内存池的初始化,进程和线程的初始化,最后是映射文件的初始化 3.在执行完KernelInit之后,会跳转到FirstSchedule进行第一次系统调度,到此内核已经运行起来了。 这里把整个的初始化过程介绍了一下,实际上Startup.s只是WinCE启动最开始的部分,完成CPU级别的初始化,这段代码都是汇编,调试起来也简单也困难,简单是因为都是顺序执行的,只是初始化CPU,困难是因为没有好的调试手段,一般在这里都是通过点LED的方
5、式来判断程序执行的位置。——感谢阅读这篇文章,..,
此文档下载收益归作者所有