wince6.0启动异砦新手求助

author author     2023-04-16     240

关键词:

Windows CE6.0启动过程分析
在Windows CE 6.0中,内核(Kenerl)和OEM代码被分成oal.exe、kernel.dll和kitl.dll三个部分,其中启动代码(startup)和 OAL层的实现部分不再与内核链接生成NK.exe,取而代之的是启动代码(startup)和硬件相关且独立于内核的OAL层的实现部分编译成 oal.exe,而与内核相关且独立于硬件的OAL层代码包含在kernel.dll中;内核无关传输层(KITL)的支持代码从OAL层分离出来编译成 kitl.dll。
从表面上看,好像只是代码重新组合了一下,从帮助 文档中BSP的移植过程看好像也是这么一回事,实际上,整个Windows CE 6.0内核布局发生了很大的改变。Windows CE 6.0的启动过程也是如此,如果你想按照Windows CE 5.0的启动顺序去分析Windows CE 6.0的启动顺序,可能会走到一个死胡同。主要是因为Windows CE 6.0在启动过程中调用了kernel.dll和kitl.dll两个动态链接库的原因,而且Windows CE6.0不再编译生成KernKitlProf.exe内核文件。
从Windows CE 6.0的帮助文档可以看出,WinCE6.0的启动只与oal.exe和kernel.dll有关,至于kitl.dll,只有将操作系统编译成具有 KITL功能时才用到。分析Windows CE 6.0的启动过程实际上找到编译oal.exe和kernel.dll的源码位置。
首先看一下将WinCE6.0编译成诸如 WinCE5.0所说的基本内核情况,即kern.exe。对于oal.exe源码位置比较容易找到,因为oal.exe是启动代码与硬件相关的OAL层 实现文件编译而成,所以只需在BSP的OAL目录中便能找到。而对于kernel.dll,在BSP目录结构中,基本上无法找到kernel.dll的编 译文件,所以必须从其他方面着手。
下面为WinCE 6.0的编译日志输出文件:makeimg.out在文件复制过程的一部分:
Copying E:\\WINCE600\\OSDesigns\\xsbase270\\xsbase270\\RelDir\\XSBase270_ARMV4I_Release\\oal.exe to E:\\WINCE600\\OSDesigns\\xsbase270\\xsbase270\\RelDir\\XSBase270_ARMV4I_Release\\nk.exe for debugger Copying E:\\WINCE600\\OSDesigns\\xsbase270\\xsbase270\\RelDir\\XSBase270_ARMV4I_Release\\kern.dll to E:\\WINCE600\\OSDesigns\\xsbase270\\xsbase270\\RelDir\\XSBase270_ARMV4I_Release\\kernel.dll for debugger
从日志输出文件可以看出,在文件复制过程 中,WinCE6.0编译器将oal.exe更名为nk.exe,而将kern.dll文件更名为kernel.dll,也就是说,kern.dll文件 的实现部分就是kernel.dll的实现体。根据前面的分析,oal.exe是与硬件相关独立于内核的OAL层的实现部分,而kernel.dll为内 核相关独立于硬件的OAL层的实现部分。同样可以从最后整合后的二进制配置文件ce.bib文件中看出端倪。
; @CESYSGEN IF CE_MODULES_NK
nk.exe E:\\WINCE600\\OSDesigns\\xsbase270\\xsbase270\\RelDir\\XSBase270_ARMV4I_Release\\oal.exe NK SHZ
kitl.dll E:\\WINCE600\\OSDesigns\\xsbase270\\xsbase270\\RelDir\\XSBase270_ARMV4I_Release\\kitl.dll NK SHZ
kernel.dll E:\\WINCE600\\OSDesigns\\xsbase270\\xsbase270\\RelDir\\XSBase270_ARMV4I_Release\\kern.dll NK SHZ
; @CESYSGEN ENDIF
而kern.dll动态库在整个Windows CE6.0中没有显式编译过程,即没有一个sources文件有kern.dll的编译过程,所以只能从操作系统的编译文件Makefile中寻找其编译 过程。下面看一下$(_PUBLICROOT)\\common\\CESYSGEN\\makefile中的部分内容:
nk::$(NK_COMPONENTS) $(NK_REPLACE_COMPONENTS)
@copy $(SG_INPUT_LIB)\\oemstub.pdb $(SG_OUTPUT_OAKLIB)
@copy $(SG_INPUT_LIB)\\oemstub.lib $(SG_OUTPUT_OAKLIB)
set TARGETTYPE=DYNLINK
set TARGETNAME=kern
set RELEASETYPE=OAK
set DLLENTRY=NKStartup
set DEFFILE=NO_DEF_FILE
set TARGETLIBS=
set SOURCELIBS=%%NKLIBS%% $(SG_INPUT_LIB)\\nkmain.lib $(SG_INPUT_LIB)\\fulllibc.lib
$(MAKECMD) /NOLOGO NOLIBC=1 kern.dll
从上述代码中可以发现,原来kern.dll动态库是从oemstub.lib编译而来,而且与nkmain.lib有关。
在理顺了上述文件的相互之间的关系之后,再来分析Windows CE 6.0的启动过程可能就比较容易啦。
在理清了上述文件的关系之后,便可以分析任意一款基于ARM微处理器的Windows CE 6.0的启动过程,现在以深圳亿道电子技术有限公司开发的基于PXA270 ARM开发平台为例,分析Windows CE 6.0操作系统启动过程。
1、Startup函数:
从Windows CE 6.0的帮助文档可以看出,WinCE6.0的启动只与oal.exe和kernel.dll有关,至于kitl.dll,只有将操作系统编译成具有 KITL功能时才用到。分析Windows CE 6.0的启动过程实际上找到编译oal.exe和kernel.dll的源码位置。
oal.exe的通过Startup函数完成硬件 的初始化。Startup.s代码与该硬件平台的Bootloader启动代码共用,其中PreInit函数主要完成将ARM处理器工作模式切换到管理员 模式、同时关闭MMU,并检测系统启动原因,如果是热启动、即在该函数调用之前已经启动了Bootloader程序,相当基本硬件初始化已经完成,则直接 跳转到OALStartUp函数中;否则需要进行硬件中断屏蔽、内存、系统时钟频率、电源管理等硬件的基本初始化过程。(具体过程见代码的分析)
参考技术A Windows CE6.0启动过程分析
在Windows CE
6.0中,内核(Kenerl)和OEM代码被分成oal.exe、kernel.dll和kitl.dll三个部分,其中启动代码(startup)和
OAL层的实现部分不再与内核链接生成NK.exe,取而代之的是启动代码(startup)和硬件相关且独立于内核的OAL层的实现部分编译成
oal.exe,而与内核相关且独立于硬件的OAL层代码包含在kernel.dll中;内核无关传输层(KITL)的支持代码从OAL层分离出来编译成
kitl.dll。
参考技术B wince6.0的应用程序烧写进内核方法与wince5.0修改的地方基本一致。这里需要说明,在\WINCE600\OSDesigns\S3C6410_DEM0\RelDir\Samsung_SMDK6410_Release里的操作前提是已经编译生成NK.bin。此时再修改增加新的应用程序,只需要Make Run-Time Image既可以把应用程序写进内核。不能sysgen,否则前功尽弃。

新手求助,怎么设置服务器环境

1.配置nginx1.启动nginx服务。命令如下:[root@VM_185_51/]#servicenginxrestart2.测试nginx服务是否正常运行。如果最后显示:`index.html'saved,说明nginx服务正常。[root@VM_185_51/]#wgethttp://127.0.0.1--2013-02-2017:07:26--http://127.0.0.1/Connectingto127.0.0.1:80.... 查看详情

新手连接mongodb出错求助

参考技术A怎么连接的?出现的什么错误? 查看详情

新手求助vcenter6.0无法添加exsi6.0主机

...VCENTER所在WINDOWS系统里的所有有关VCENTER的服务有没有全部启动解决方法InternetExplorerEnhancedSecurityConfigurationmayinterferewithvCenterServer.Bydefault,InternetExplorerEnhancedSecurityConfigurationisenabledonWindowsServer2003.Toresolvethisissue,disablethiscomponentandrestar... 查看详情

新手求助squashfs读写方式挂载

参考技术A台式机硬盘如何读取或挂载至其他电脑的方法:去电子城买个转换器30元左右;并口转串口;要是没有买个50元左右的多功能转换器;那个能把并口串口都转换成USB。本回答被提问者采纳 查看详情

新手求助:ora-12569:tns:包校验和失败

参考技术A看看环境变量里面ORACLE_HOMEORACLE_SID两个参数设对了没有。我的电脑点右键属性…… 查看详情

新手求助echarts关系图

参考技术Anodes,likes不就是2个JSON数组或对象数组么。直接写一个请求,返回这2个数组给前台就好。然后前台取数组的值到对应的配置项就行了。怎么查数据,封装成数组,就不说了。 参考技术B一般没显示出来是你的1数据结构错... 查看详情

新手求助,望大神解答,用solidworksmotion运动分析时出错

参考技术A不知道你分析的是什么,一般都是你的配合太多,或者你给出的要求,模拟不出来才会使得SolidWorks判断错误。 查看详情

新手求助,如何用opencv去除小块的分散区域

参考技术A小噪点用中值滤波,或者erode+dilate也可以,你自己试着看下效果。大的洞一般是眼睛什么的,不需要补。 查看详情

qt新手求助,关于lable数组定义

参考技术A这个还是不难的,建议您在学习中参考开发文档查看每个类的属性性和方法,一般参考文档都会教你怎么做Qt有几个版本,下面我给你写个Qt4的lable简单示例#include#include#includeintmain(intargc,char*argv[])QApplicationapp(argc,a 查看详情

新手求助,aspx.cs里如何实现立即跳转网页

参考技术A在aspx.cs文件内容里添加Response.Redirect("http://www.baidu.com"); 查看详情

新手求助用seleniumide录制脚本clickandwait没有响应

参考技术A这个问题说的是点击此链接会新打开一个窗口selenium1是不支持多窗口切换的因此会卡在这里selenium2即selenium1+webdriver很好的解决了这个问题本回答被提问者和网友采纳 查看详情

新手求助,表单数据提交不到后台

参考技术A建议看下你说的表单操作步骤:首先是你要收集信息,建一个表单大师账号——点击创建新表单——选择想用的字段——点击发布——发送链接地址到群或者个人(或者发送表单二维码)——别人填写你发送的表单信... 查看详情

求助啊。。。linuxmysql启动失败。

[root@wsw~]#servicemysqldstartStartingMySQL.ERROR!TheserverquitwithoutupdatingPIDfile(/opt/msyql/data/wsw.pid).[root@wsw~]#servicemysqldstopERROR!MySQLserverPIDfilecouldnotbefound!那位大侠看看是什么原因啊没有/opt/mysql/data/wsw.pid重点检查mysql帐号对这个路径下是否有写... 查看详情

新手求助sql多条件关联查询,急盼指教

参考技术A您好:参考SQL如下:1234567SELECT*FROM表aLEFTJOIN表b表a.关联字段=表b.关联字段LEFTJOIN表c表a或表b.关联字段=表c.关联字段WHERE表a.字段=值AND表b.字段=值AND表c.字段=值 参考技术B文字虽然很多,但其实就是在A、B两个库中多条件... 查看详情

新手求助,二值化图像怎么去除面积较小的连通域

黑色矩形楼主表达看既已经二值化黑色背景直接反相除面积统计像素四周重做图像即I(PY1:PY2,PX1:PX2)参考技术A腐蚀,将小的连通域去掉,再与原图异或 查看详情

如何用js更改tr的背景颜色新手求助

有个1个table,里面有11个tr,除了第一个tr里是只有一个td(一个button,onclick="erase()")剩下的tr中都是10个td,每当按下erase的时候,要将非第一个tr中的所有cell背景设置成白色。请问如何写erase()这个方法参考技术Adocument.q... 查看详情

新手求助安装linux时出现zsh:nosuchfileordirectory:/arch

参考技术A目录不存在指定的目录/arch不存在 参考技术B当前使用的shell是zsh无文件或目录/arch 参考技术C我也遇到了这样的情况,其实目录是存在的。就是因为用zsh所以有这样的提示,我的环境Mac10.13.4,有哪位单身能解答下啊 查看详情

新手求助:安卓sql查找的函数,报错nullpointerexception

这一小节代码如下publicUsersearch(Stringusername)SQLiteDatabasesdb=helper.getReadableDatabase();Cursorcursor=sdb.rawQuery("select*fromuserwhereusername=?",newString[]username);if(cursor.moveToFirst())Stringuname=cursor.getString(cursor.getColumnIndex("username"));Stringpwo... 查看详情