WinCE6.0 OAL的特点
本文转载自http://www.cnblogs.com/we-hjb/archive/2008/10/25/1309596.html
WinCE6.0 OAL的特点WinCE6.0的OAL跟WinCE5.0中的有较大差别。了解这些差别,对我们移植OAL部分很有帮助。本文将简要介绍WinCE6.0 OAL的特点。 WinCE5.0将内核、OAL和KITL链接成一个内核可执行文件NK.exe。而WinCE6.0将这三者分开,分别对应Kernel.dll、OAL.exe和KITL.dll。显而易见,这样做最大的好处是可以单独升级这三者中的任何一个,而先前的结构则是牵一发而动全身的。WinCE5.0的OAL结构如图1所示:
WinCE6.0的OAL结构如图2所示:
图2 BOOL INTERRUPTS_ENABLE (BOOL fEnable) { return g_pNKGlobal->pfnINT_ENABLE (fEnable); } 可以看到,OAL中调用相应的内核API时,NKStub将执行对应的结构中的函数指针。所以在编译OAL时,添加NKStub.lib后就可以跟以前一样使用这些内核函数。当然NKStub也包括了KITL中的相应函数列表,所以OAL也能使用KITL中的函数。 OAL导出了列表OEMGLOBAL,其中包括了OAL函数指针和全局变量。其中有很多函数指针是必须的,如果缺少,系统将不能正常工作。而另外有些函数指针则是可选的。具体内容可查看PB帮助的相应部分。OEMGLOBAL的定义在文件:C:\WINCE600\PRIVATE\WINCEOS\COREOS\NK\OEMMAIN\oemglobal.c中。 总结一下,CE6.0的OAL从内核中独立出来,这样方便OAL的单独升级,也提高了安全性。由于内核、OAL和KITL相互独立,所以引入了NKGLOBAL和OEMGLOBAL这两个结构以支持模块间的函数调用。为了方便代码的移植,CE6.0提供了NKStub.lib和OEMStub.lib,他们做了从函数指针到函数的转换工作。所以,在移植BSP时,原来的代码可保持不变。 到这里,我们已经知道了WinCE6.0的OAL的特点。实际移植时,还需要注意OAL的目录组织。这里将5.0和6.0 OAL部分的目录组织做一个对比。
其中,6.0的OALLIB对应5.0的OAL,OALEXE对应Kern,KITL对应Kernkitl。而5.0的kernkitlprof在6.0中一般放在oallib的目录下。在移植BSP时可参照该对应关系进行目录组织。 |