打印

基于ARM的Windows CE内核启动分析

[复制链接]
4209|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
high|  楼主 | 2007-12-30 22:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
写点小文,,或许有帮助.到下面链接获得更好阅读效果.
http://groups.google.com/group/wince_cn/web/armwindows-ce?hl=zh-CN

基于ARM的Windows CE内核启动分析
移植或者创建一个BSP,也许需要先熟悉Windows CE的内核启动过程.


目录
基于ARM的Windows CE内核启动分析    1
1.startup.s    2
2.KernelStart    2
2.1 ARMInit()    3
2.1.1 OALIntrInit    3
2.1.2 OALTimerInit    4
2.1.2.1 Variable Tick Scheduler    4
2.2 KernelInit()    4
2.3 FirstSchedule    5































 
1.startup.s    
内核入口点startup.S,内核从这里启动.因为内核经过bootloader加载,内核运行时候,已经由bootloader完成了硬件的基本初始化(关闭watchdog, pll设置等等)所以,startup.S的任务比较简单,只是将oemaddrtab_cfg.inc里面的g_oalAddressTable数组地址作为参数,传递给KernelStart,这个数组用来描述和实现物理地址到虚拟地址的映射.





(. + 8)是流水线处理.KernelStart()位于
PRIVATEWINCEOSCOREOSNKKERNELARMarmtrap.s




2.KernelStart

    






ARMInit()位于本目录的mdram.c文件.
KernelInit()位于PRIVATEWINCEOSCOREOSNKKERNELkwin32.c中.
FirstSchedule()位于armtrap.s的一个label.
主要关注ARMInit()和KernelInit(),前一个进行目标板的初始化,后一个负责内核的初始化.FirstSchdule()开始调度第一个程序.




2.1 ARMInit()
先看看ARMInit()它的几个关键性动作如下:







KernelRelocate()是进行重定位.KernelFindMemory()是查找系统可用内存,并分成应用内存和object store两部分.这2个函数都已由MS自己实现.我们需要添加的函数是名字以OEM开头的函数.
OEMInitDebugSerial()初始化一个调试口,我们一般使用一个串口来作为调试口,这个函数需要自己实现,在 PLATFORMSMDK2440ASrcKernelOaldebug.c中定义这个函数.比如可以将串口0设置为调试口,在这个函数中对串口0进行初始化.

OEMInit()是一个比较重要的函数,








OALCacheGlobalsInit()在PLATFORMCOMMONSRCARMCOMMONCACHEinit.s中实现,这部分代码以PQOAL的形式提供.
OALIntrInit()初始化中断.
OALTimerInit()初始化定时器TIMER4,作为系统时钟(tick),
configGPIO()初始化gpio口,设置相关寄存器.
InitDisplay()初始化LCD.有时候,我们希望在oal启动和内核加载期间显示一副等待图片或者显示**,为达到这个目的,需要先初始化LCD.
OALKitlStart()准备启动KITL.
此外,在ARMInit还会通过调试口打印一些基本信息,开始时候打印”Windows CE Kernel for ARM….”字样, 中间打印处理器类型等等信息.结束时候打印” ARMInit done.”

2.1.1 OALIntrInit
调用OALIntrMapInit()初始化2个数组g_oalSysIntr2Irq,g_oalIrq2SysIntr,这2个数组表征irq和逻辑中断SysIntr的映射关系.
然后初始化中断寄存器,
最后,留一个接口给oem: BSPIntrInit(),如果oem需要在这个阶段初始化一些中断,可以定义这个函数并实现.




2.1.2 OALTimerInit
这个函数比较重要. 都知道所有WinCE系统都需要一个定时器来提供一个heartbeat,
 






g_oalTimer包含各种系统时钟相关的变量.

curridlehigh, curridlelow,这2个32位的DWORD变量合起来实现一个64位的计数器,反映了系统处于空闲模式(Idle mode)的时间。一般在OEMIdle()函数内更新。用户程序通过调用GetIdleTime()函数可以得到这个值。

初始化内核函数指针:pQueryPerformanceFrequency, pQueryPerformanceCounter.通过这两个函数实现高精度的计时器. 这两个函数的原型也已经由PQOAL实现.

初始化TIMER4作为系统时钟.TIMER4是一个16bit的定时器.此函数将TIMER4设置成为自动转载模式.

2.1.2.1 Variable Tick Scheduler

可变的系统时钟节拍,这个是WinCE5.0中增加的新的性能.
每一次定时器中断时候,内核分析所有线程后决定切换到哪个线程运行.假如所有线程都在等待状态,系统将进入idle状态.在这个状态的时候,任何中断都会唤醒系统重新开始调度.一般系统大部分时间是处于idle状态的,内核会调用OEMIdle()进入idle状态,我们已经知道这个状态会被任何中断唤醒. 在以前的版本中,系统中断(即上面的TIMER4中断)每毫秒产生一次,查看系统是否需要重新调度. 为了节电,不希望中断那么频繁.于是WinCE5.0中,在调用OEMIdle()之前会先调用pOEMUpdateRescheduleTime().通过这个函数重新设置侠义次系统时钟中断的时间.
2.2 KernelInit()
再看看KernelInit()函数













    不过多关注KernelInit().
2.3 FirstSchedule
位于armtrap.s的一个label.开始第一个线程调度.整个内核开始运行.

相关链接:http://groups.google.com/group/wince_cn/web/armwindows-ce?hl=zh-CN

相关帖子

沙发
老狼| | 2008-1-2 00:54 | 只看该作者

怎么没人捧场呀?

支持一下!继续!

使用特权

评论回复
板凳
hotpower| | 2008-1-2 01:52 | 只看该作者

很好~~~俺也喜欢WINCE~~~因为按喜欢WINAPI...

有机会跑跑WINCE~~~

使用特权

评论回复
地板
老狼| | 2008-1-2 17:06 | 只看该作者

我现在算是看透了,还是裸奔最爽!

但是用wince做界面,的确效率快呀,改动起来也方便!外加触摸屏,说实在的,就是傻瓜都会操作,写说明书省事儿多了,

使用特权

评论回复
5
high|  楼主 | 2008-1-2 19:15 | 只看该作者

有没有弄个.net mf

据说都不要mmu.

使用特权

评论回复
6
yangfanyh| | 2008-1-2 21:41 | 只看该作者

不错

不错

使用特权

评论回复
7
老狼| | 2008-1-2 23:13 | 只看该作者

.NET Micro Framework

没用过,你用过?

使用特权

评论回复
8
老狼| | 2008-1-3 20:35 | 只看该作者

老大,这个东东不太好!

我看了这个东东资料,感觉不太好,不是实时的,没太大意思。本意是哪种CPU都可以用,连8位机都可以用,8位机上操作系统,有点扯蛋。低档的设备上操作系统,没啥搞头,还不如直接裸奔,wince 的最大看点就是界面,感觉上这个还不如上 uc/os or threadx.

使用特权

评论回复
9
high|  楼主 | 2008-1-3 22:40 | 只看该作者

这个不是操作系统也不需要操作系统吧

我那天看资料好像是这么说的.

使用特权

评论回复
10
老狼| | 2008-1-4 00:04 | 只看该作者

在.NET MF中,操作系统倒成了可选的组成部分

来源链接:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1515918

2月12日,微软发布了.NET家族中的新成员——.NET Micro Framework(简称.NET MF)。而就在短短的几天之内,这款新品已经收到业界的广泛关注。

.NET MF面向的是CPU处理能力和存储能力极其有限的设备。虽然微软拥有Windows CE、Windows XP Embedded和.NET Compact Framework,可以完成绝大多数嵌入式开发,但对于更普遍的家用电器领域(如电视、手表、洗衣机等),这些平台还是显得太大了些。可以想象,给你的电冰箱装块硬盘是多么搞笑的事。而.NET MF的出现,则标志着微软又向百姓生活迈进了一步,让所有家电都“智能”起来,已经是一个不远的梦。因为所需要的仅仅是便宜的,ARM处理器和一些RAM、Flash存储器。

够了。Anders Liu是搞技术的,至少目前还是,作评论和展望不是Anders的强项。目前很多关于.NET MF的介绍都是面向业界的新闻、评述性的,而本文中Anders Liu将从技术人员的角度上,对.NET MF进行简要介绍。本文主要介绍的是.NET MF的技术特性,暂时还不包含开发技术。因为Anders也是刚刚接触这个东西不久。

概述

.NET MF是微软最新推出的嵌入式平台、专门用于处理能力和存储能力都更加有限的设备。既然微软已经拥有.NET Compact Framework(简称.NET CF),为什么还要再提供.NET MF呢?设备的限制是一个很重要的原因,.NET CF毕竟还是要求设备有比较强的处理和存储能力。两者重要的一个区别在于,.NET CF需要有Windows CE系列OS的支持才能得以运作,而.NET MF则提供了一个可引导的运行时环境。

在.NET MF中,操作系统倒成了可选的组成部分。在本文后面内容中,Anders Liu还会提及这一点。

既然.NET MF是可引导的,那么它实际上也相当于一个带有运行时环境的操作系统。那么,它又和Windows CE、Windows XP Embedded操作系统有哪些区别呢?下面的表格对比了几种平台的区别。

 
 .NET Micro Framework
 Windows CE
 Windows XPe
 
Example Devices
 Sensor Nodes, Aux displays, Health Monitoring, Remote Controls, Robotics
 GPS Handhelds, PDAs,

Automotive, Set Top Boxes
 Thin Clients, ATMs, Kiosks
 
Device Features
 Connected, Small, Wearable, Graphical UI
 Connected, Graphical UI, Server, Browser, RAS, DirectX
 PCclass performance,

PC networking
 
Footprint
 250-500KB managed code

Full featured
 300KB+ without managed code

12MB with managed code
 40MB + Depending on features
 
Power
 Very low power
 Low power
 Mains power
 
CPU
 ARM7, ARM9, No MMU
 X86, MIPS, SH4, ARM,

with MMU
 X86
 
Real-time
 Not Real-time
 Hard Real-time
 Real-time capable through 3rd party extensions
 
Managed vs. Native Code
 Managed via .NET Micro Framework,

native code through interop only.
 Supports both,

managed code requires .NET Compact Framework
 Supports both, managed code

requires .NET Framework
 


 

表1:各种嵌入式平台对比(资料来源:http://msdn2.microsoft.com/en-us/embedded/bb278106.aspx)

 

从上表可以看出,无论是资源占用还是耗电,.NET MF都要优于另外两种OS。但是,我们也看到了,在实时性方面,.NET MF并不是一款实时的运行时环境。这可能需要我们注意的一个重要方面。

 

在工业应用中,实时性往往是评判一个嵌入式系统的重要因素,这就意味着,.NET MF并不适用于重要的控制领域。不过,一般工业用系统都不会面临硬件过分有限的困境,完全可以使用WinCE或XPe作为基础OS。

 

反观民用领域,嵌入式应用正在逐渐渗透人们的生活。而当面对普通消费者时,评判一个嵌入式系统的重要标准——AndersLiu认为——就应该是:低成本。这包括两个方面,一是低的造价(软硬件成本,价格),另外一方面就是易用(这可以理解为学习成本和时间成本)。毕竟老百姓买不起和机床一样价格的洗衣机,也不希望像操作机床那样操作微波炉。

 

因此,民用嵌入式设备往往通过较低的硬件配置来降低价格,并通过适量(通常比较少)的按键和显示内容来降低使用复杂度。而这一切,都是.NET MF得以大显身手的地方。

 

可以看出,微软关于.NET MF的定位还是相当明确的——面向民用低成本嵌入式市场。下图是一两年前流行过一阵的新闻图片,传闻Gates腕上的SmartWatch中安装的,就是.NET MF的原型。

 



 

图1:Bill Gates和Smart Watch(资料来源:http://www.microsoft.com/presspass/press/2003/jan03/01-08ces2003overallpr.mspx)

 

下图给出了.NET MF的技术架构。相较于.NET Framework,.NET MF多出了CLR之下的PAL(平台适配层,Platform Adaptation Layer)和HAL(硬件适配层,Hardware Adaptation Layer,这两层使得.NET MF可以直接运行在硬件上,并提供基本的Timer、IO和内存管理等功能。而HAL也可以通过OS代替,在硬件资源相对充裕的情况下,这可以降低.NET MF的设计复杂度,并提供更多功能。

使用特权

评论回复
11
老狼| | 2008-1-4 00:05 | 只看该作者

图2:NET MF技术架构

使用特权

评论回复
12
老狼| | 2008-1-4 00:37 | 只看该作者

high:我犯错误了。

得学习呀,得向老大学习!我一直以为微软的东西就一定得有操作系统!只看到不是实时的,就妄下断言!我错了,我有罪!

老大,你下载了吗?哪天下载玩玩!

Microsoft .NET Micro Framework SDK 2.0 SP1

Microsoft® .NET Micro Framework 综合了托管代码的可用性和更高的效率以及优秀的Visual Studio开发工具,为嵌入式程序开发人员提供了简便的方法.
该SDK支持利用C#开发代码,设备I/O,调用.NET libraries,完全兼容Visual Studio开发环境(该版本需要Visual Studio 2005 SP1以上)
该下载包含完整的SDK,可以让你直接编写代码并运行在扩展设备上,并部署到真实设备.




相关链接:http://down.zdnet.com.cn/detail/9/81562.shtml

使用特权

评论回复
13
high|  楼主 | 2008-1-4 19:29 | 只看该作者

那个vs2005的sp1恐怖的要死!

上次安装过一次.太变态了.太痛苦了.

使用特权

评论回复
14
老狼| | 2008-1-4 23:02 | 只看该作者

真冷呀!

他娘的,就俺俩人,你打板,我来唱,连个看客都没有!连你那两个小弟都不来。老hotpower 也不来!

使用特权

评论回复
15
老狼| | 2008-1-4 23:06 | 只看该作者

改名吧。没出路了!

就叫 wince驱动开发/编程。

使用特权

评论回复
16
john1986| | 2008-1-4 23:43 | 只看该作者

没办法

写给高手看滴,俺们这些菜鸟没法懂啊

使用特权

评论回复
17
liguojun06| | 2008-3-9 14:37 | 只看该作者

行行好啊

你们几位老大可不可以写点简单易懂的啊,让像我这类的菜鸟一看就忽地医生对WCE有了感觉的那种东东啊,不然得话你们就是说的再好我们也像听天书啊!!嘿嘿!!!
 

使用特权

评论回复
18
sasinop| | 2008-3-9 22:15 | 只看该作者

先占着慢慢看 呵呵

其实对用户来说只要 关心OEM 就可以

使用特权

评论回复
19
sasinop| | 2008-3-9 22:17 | 只看该作者

呵呵

还有裸奔是方便,对地层来说,控制方便,加上系统,老烦呢

但为了二次开发或应用层开发,还是用系统的好嘿嘿

使用特权

评论回复
20
xiaoaihua| | 2008-3-10 20:38 | 只看该作者

来凑个热闹!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

1078

帖子

0

粉丝