导航:首页 > 软件知识 > wince如何设置程序自启动

wince如何设置程序自启动

发布时间:2023-04-04 17:54:07

❶ 在wince怎样启动自启动自己写的程序

1、注册表
1.配置project.bib或者添加User Feature,以将<你的程序>含入NK.bin
请参考《让程序在Windows CE系统启雹培清动时自动运行-快捷方式》
2.配置platform.reg或者common.reg,在[HKEY_LOCAL_MACHINEinit]段添加如下类似内容:
"LaunchXX"="<你的程序>"
"DependXX"=hex:YY,ZZ,...
其中XX是十进制的数字,表示<你的程序>的启动顺序标识;YY,ZZ是Least Significant的十六进制数字,表示<你的程序>所依赖(先于<你的程序>运行)的程序的启动顺序标识。
例如:
"Launch80"="MyApp.exe"
"Depend80"=hex:1E,00
语意为程序MyApp.exe的启动顺序标识是80,它依赖标识为30(即001E)的程序。
如果<你的程序>不依赖其他程序,那么不需要添加"DependXX"=hex:YY,zz,...指示;
如果<你的程序>依赖多个程序,那么在"DependXX"指示中指明;
eg.
"Launch80"="MyApp.exe"
"Depend80"=hex:0A,00,1E,00
语意为MyApp.exe程序的启动依赖标识为10和30的程序。
3.PlatformBuilder IDE->Build->MakeImage,生成新的NK.bin

说明:
1.如果<你的程序>是别的程序所依赖的程序,那么在<你的程序>的代码中需要添加如下代码
SignalStarted(XX);
以通告操作系统<你的程序>已经运行,否则依赖<你的程序>的程序将不会运行。
一般SignalStarted加在InitInstance成员函数的最后(MFC CE)或者while(GetMessage(...))之前(C SDK)
2.不要重复使用启动顺序标识,依赖方程序的启动顺序标识应大于被依赖方程序。
3.如果不想让<你的程序>包含在NK.bin中,同时又想让它自动启动,那么请明确指出<你的程序>的路径,同时确保文件系统驱动程序先运行。
eg.
"Launch80"="Hard DiskMyAppMyApp.exe"
"Depend80"=hex:...
4.<你的程序>启动失败不会影响系统
5.参考《让程序在Windows CE系统启动时自动运行-快捷方式》
6.相关PB4.2帮助主题
Adding a File to an Operating System
How to Configure the Registry to Run an Application at Startup
一、快捷方式
假定Windows CE.NET目标工程为CEPC类型,目录为E:ProjectMyWinCE,并且工程已经Build(或者Rebuild)成功;
假定Windows CE.NET的应用为MyApp.exe
1.将MyApp.exe复制到E:PROJECTSMyWinCERelDirCEPC_X86Release目录下;
2.修改MyWinCE工程的project.bib文件,在FILES Section添加
MyApp.exe $(_FLATRELEASEDIR)MyApp.exe NK H
3.创建快捷方式文件MyApp.lnk(文本文件),文件内容如下:
10#WindowsMyApp.exe
MyApp.lnk文件也放入E:PROJECTSMyWinCERelDirCEPC_X86Release目录下
4.修改MyWinCE工程源前的project.bib文件,在FILES Section添加
MyApp.lnk $(_FLATRELEASEDIR)MyApp.lnk NK H
5.修改MyWinCE工程的project.dat文件,添加如下内容:
Directory("WindowsStartup"):-File("MyApp.lnk","WindowsMyApp.lnk")
6.Platform Builder IDE->菜单Build->MakeImage(记中做得千万不要Build或者Rebuild,否则你就要重新来一遍)
到此得到的NK.bin就包含了应用程序MyApp.exe和MyApp.lnk,并且MyApp程序会在系统启动时自动运行。

说明:
I.将自定义的文件打包进NK.bin中的方法有两种,
一种是编辑project.bib文件。
在FILES Section描述文件的名称,源文件的路径,文件在目标系统中的属性。在上面,
MyApp.exe $(_FLATRELEASEDIR)MyApp.exe NK H
表示将E:ProjectMyWinCERelDirCEPC_X86Release目录下的文件MyApp.exe文件打包进NK.bin,并且此文件将处在Kernel内存区,文件属性类型为隐藏。
第二种方法是添加User Feature。
PlatformBuilder IDE->FeatureView->在"MyWinCE Features"上Right Click鼠标->Insert User Feature->指向想打包的文件。
无论采用哪种打包方法,在启动的Windows CE系统中,文件都在Windows目录下。下一步就是根据需要重新组织文件系统的目录结构。
II.组织文件系统的目录结构的途径在于修改project.dat文件,添加文件目录结构的描述。描述的语法如下:
root:-Directory("<目录名>") 表示在root目录()下创建目录
Directory("<目录名>"):-Directory("<子目录名>") 表示在指定目录下创建子目录
Directory("("<目录名><子目录名>"):-File("<文件名>.<扩展名>","Windows<文件名>.<扩展名>") 表示在指定目录下创建Windows目录下文件的拷贝,显示名称是<文件名>.<扩展名>。(记得上面提到打包的文件在Windows目录下吗?呵呵,我想你明白了)
III.应用程序并不一定需要打包进NK.bin
假定程序在硬盘的某个位置,如硬盘MyAppMyApp.exe,那么只需创建快捷方式文件,链接指向硬盘MyAppMyApp.exe就是了
IV.相关PB42帮助主题
Adding a File to an Operating System
Creating a Shortcut File and Adding It to the OS
Organizing Files Within an OS

整个过程简单来说就是,想清楚应用程序将会出现在哪个目录下,创建正确的快捷方式文件,修改目标系统目录组织配置,最后将应用程序和相应的快捷方式文件打包进NK.bin。

WinCE 自启动应用程序的方法
【假定】:
PC机的IP地址为:192.168.0.32 subnet mask:255.255.255.0
设备机的IP地址为:192.168.0.200 subnet mask:255.255.255.0
【确定】:
PC机与设备机通信正常;
PC机装有Platform Builder(4.2) 软件;
PC机装有WinCE.net配套的SDK ;
设备机装有Wince.net(4.2)操作系统;
【方法一】:
步骤一:建立连接。
运行PC机上的Platform Builder 软件,打开Tools->Remote Registry Editor,弹出Windows CE Remote Registry Editor对话框,同时弹出Select a windows CE Device。如果PC机上装有SDK,在Select a windows CE Device对话框中就会出现SDK所对应的设备,如TDMVBNET Device。

选中“TDMVBNET Device”,点击“OK”按钮,出现以下两个对话框:

打开设备机的“开始”->“运行”,在对话框内输入:cmd,进入命令画面,在符号>后输入:CEMGRC.EXE /S /T:TCPIPC.DLL /Q /D:192.168.0.32:1865,回车即可。
点击PC主机上的对话框“Manual Server-Action”上的“OK”按钮,在Windows CE Remote Registry Editor对话框里添加了TDMVBNET Device设备,表示PC机和设备机连接正常。

步骤二:修改注册表。
打开TDMVBNET Device,在[HKEY_LOCAL_MACHINEinit]段添加如下内容:
“Launch70”=”Hard Diskkingview ouchvew.exe”
“Depend70”=hex:14 00
“Launch80”=”Hard DiskkingviewKV_FTP_Server.exe”
“Depend80”=hex:14 00 3C 00

步骤三:保存注册表信息。
打开设备机的“开始”->“挂起”,数秒钟后重启设备机。

【方法二】:
步骤一:建立连接。同方法一。
步骤二:修改注册表。
打开TDMVBNET Device,在[HKEY_LOCAL_MACHINE ExplorerShell Folders]段修改:
将“StartUp”=”Windows” 修改为:
“StartUp”=”Hard DiskStartUp”。
步骤三:保存注册表信息。
打开设备机的“开始”->“挂起”,数秒钟后重启设备机。
步骤四:添加应用程序。在可移动设备(CF卡)里添加目录StartUp,将应用程序如KV_FTP_Server.exe,Tochvew.exe的快捷方式拷到StartUp目录下,重启设备机。

❷ wince6.0怎么设置自动启动

有两个地方启动程序:
1. 在注册表HKLM\Init上加入键值:Launch99="你的程序名(可以是绝对路径)",如果你的程序要依赖别的程序,还要加入:Depend99=依赖程序的启动序号(梁滑知让握可以看看Init下其它程序的启动顺序)
2.好像是在HKLM下有个WBT,里面有个地方也可以加入启动程序,每次注销都会重新启动一遍,而Init只有在重新开机时才启动。
你要启动的程橡消序,可以放在你的flash卡上(Init需要加入绝对路径),或者加入bib文件,编译进内核。

❸ 如何在wince启动时自启动程序

修改注册表[HKEY_LOCAL_MACHINE\init]
“Launch80〃=”app.exe”
“Depend80〃=hex:14,00,1e,00

这个是设定启动顺序,launch后面的猜纤银数字竖衡越大的越是后启动,Depend80后面的指定依赖项,为16进制,上面的语句表明依赖项为launch20 定义的device.exe和穗宴launch30中定义的gwes.exe, 注意Launch后面的数字范围为0到99

❹ 在wince怎样启动自启动自己写的程序

修改注册表即可,比如
[hkey_local_machine\init]
"歼神launch50"="explorer.exe"
"depend50"森返=hex:14,00,
1e,00
把这个explorer.exe改成你的应用氏春亏程序(比如:myapp.exe)就可以了;
其中50是启动时的顺序,depend50"=hex:14,00,
1e,00
这个事对启动的依赖,一般直接用这句改50即可。

❺ windows ce关闭自启动

WinCE实现开机自启动应用程序有两种方手嫌法:

a). AutoRun文件夹启动

./ 在WinCE系统内 ”FlashDisk” 目录下,或者外部SD/USB盘根目录下,创建名为 ”AutoRun” 的目录,将所需要开机启动的应用放进去即可,“Launcher.exe”每次开机或者外部SD/USB盘插入时候会自动执行这个目录里面的程序。

./ “蠢薯银AutuRun” 文件夹里面的应用程序可以直接是可执行程序(.exe),也可以是快捷方式(.lnk),或者是批处理文件(.bat)。如何在WinCE下创建快捷方式请参考这里。

./ 最后,如果同时需要隐藏WinCE原带宴始桌面,请如下修改注册表;如需重新恢复桌面,请参考这里。

❻ 如何使WINCE启动时自动运行应用程序

复制应用程序,打开我的设备-进入启动文件夹-粘贴快捷方式到这伍派个文件夹目录腔岩贺。重启枣卖后开机就可以自动启动应用程序了

❼ 如何让WINCE系统启动直接运行自己的程序

WINCE系统启动直接运行自己的程序
1. 假定Windows CE.NET目标工程目录为D:\WINCE420\PUBLIC\MyWinCE,并且工程已经Build成功,假定Windows CE.NET的应用程序为MyApp.exe; 2. 将MyApp.exe复制到
D:\WINCE420\PUBLIC\MyWinCE\SAMSUNG_SMDK2410_ARMV4Release目录下; 3. 修改MyWinCE工程的project.bib文件,在FILES Section添加如下内容:
MyApp.exe $(_FLATRELEASEDIR)\MyApp.exe NK H
4. 创建快捷方销则基式文件MyApp.lnk,文件内容如下: 10#\Windows\MyApp.exe MyApp.lnk文件也放入
D:\WINCE420\PUBLIC\MyWinCE\SAMSUNG_SMDK2410_ARMV4Release目录下; 5. 修改MyWinCE工程的project.bib文件,在FILES Section添加如下内容:
MyApp.lnk $(_FLATRELEASEDIR)\MyApp.lnk NK H
6. 修改MyWinCE工程的project.dat文件,添加如下内容:
Directory("\Windows\Startup"):-File("MyApp.lnk","\Windows\MyApp.lnk")
7. 修改MyWinCE工程的platform.bib文件,在FILES Section添加如下内容:
MyApp.exe $(_FLATRELEASEDIR)\MyApp.exe NK H
MyApp.lnk $(_FLATRELEASEDIR)\MyApp.lnk NK H
8. Platform Builder IDE:【Build】->【Make Image】(记得千万不要Build或者Rebuild)
9. 成功后,得到的NK.bin(或NK.nb0)就包含了应用程序MyApp.exe和MyApp.lnk,当把相应的内核烧入开发板MyApp程序就会在系统启动时自动运行。
虽然MyApp可以盯键自己启动了,但每次启动的时候,总是微软的桌面先出来,再启动我们的程序,感觉还是不伦不类。对此,我们可以使用startup的快捷方式再加上隐藏任务栏的方法,效果非常的好,具体操作是:
1) 首先新建工程,把你的应用程序放到内核里面去(前面介绍了如何做);
2) 编译平台;
3) 修改shell.reg的文件:在文件中有这样一行: [HKEY_LOCAL_MACHINE\init] "Launch50"="explorer.exe" "Depend50"=hex:14,00, 1e,00
把这个explorer.exe改成你的应用程序(比如亏谨:MyApp.exe)就可以了; 4) Platform Builder IDE:【Build】->【Make Image】(记得千万不要Build或者Rebuild)

var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);

5) 成功后,得到的NK.bin(或NK.nb0)就包含了应用程序MyApp.exe和MyApp.lnk,当把相应的内核烧入开发板MyApp程序就会在系统启动时自动运行。

WinCE 应用程序开机自动运行的又一种方法

发布日期:2007-5-24 9:29:21 作者:未知 出处:不详

近日在开发过程中遇到WinCE应用程序开机自动运行的问题,在网上找了找,发现大概有以下三种方法:
1、 将应用程序和应用程序快捷方式添加到映像里,再将快捷方式添加到StartUp目录下,这样当系统运行后应用程序就能自动运行;
2、 直接替换Wince的SHELL,即修改注册表:
[HKEY_LOCAL_MACHINE\init] "Launch50"="explorer.exe" "Depend50"=hex:14,00, 1e,00
把这个explorer.exe改成你的应用程序(比如:MyApp.exe);
3、 把应用程序加入到映像,修改注册表:
[HKEY_LOCAL_MACHINE\init] "Launch80"="MyApp.exe" "Depend80"=hex:1E,00
可以设置启动顺序和依赖程序;
以上方法都可行,但是都存在一个问题,就是应用程序是集成到NK里面的,也就是说每次升级应用程序都要重新编译下载内核,很麻烦,尤其在程序调试阶段,大家都希望把应用程序放在SD卡上,这样更新起来比较容易;据说通过第三种方法可以实现,即修改"Launch80"="MyApp.exe"为
"Launch80"="\STDCard\MyApp.exe"( STDCard为SD卡目录),但是我试了一下没有成功,因为Launch80运行时SD卡的文件驱动还没有加载,找不到MyApp.exe

var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
文件。同样,采用快捷方式加载SD卡里的应用程序也不可行。
所以我采用了另一种方法,自己编了一个小程序,比如叫ShellExe.exe,将此程序加入到映像里,通过StartUp快捷方式调用ShellExe,ShellExe再去调用SD卡里的应用程序,具体实现步骤如下: 1、 在eVC下编译如下代码:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ WIN32_FIND_DATA fd; HANDLE hd=INVALID_HANDLE_VALUE; int iCount = 20; while(iCount--) { hd=::FindFirstFile(lpCmdLine,&fd); Sleep(500); if(INVALID_HANDLE_VALUE!=hd) break; } if(0==iCount) return 0; FindClose(hd); SHELLEXECUTEINFO ShExeInfo={0}; ShExeInfo.cbSize=sizeof(SHELLEXECUTEINFO); ShExeInfo.fMask=SEE_MASK_NOCLOSEPROCESS; ShExeInfo.hwnd=NULL; ShExeInfo.lpVerb=NULL; ShExeInfo.lpFile=lpCmdLine; ShExeInfo.lpParameters=L""; ShExeInfo.lpDirectory=NULL; ShExeInfo.nShow=SW_SHOW; ShExeInfo.hInstApp=NULL; ShellExecuteEx(&ShExeInfo); return 0;}
生成ShellExe.exe的可执行文件,此段代码主要功能是查找指定的应用程序,然后执行;下面这段代码可以保证在SD卡文件系统正确加载后才去执行应用程序;
while(iCount--){ hd=::FindFirstFile(lpCmdLine,&fd); Sleep(500); if(INVALID_HANDLE_VALUE!=hd) break;} 文件的名称和路径由命令行参数指定: ShExeInfo.lpFile=lpCmdLine;
2、 新建一个快捷方式,如Autorun.lnk,按如下方式编辑其内容:
21#\windows\shellexe.exe \stdcard\MyApp.exe 其中\stdcard\MyApp.exe应用程序的绝对路径;
3、 将MyApp.exe和Autorun.lnk添加到NK里,方法是在project.bib文件内加入如下内容:
ShellExe.exe f:\WINCE420\PBWORKSPACES\LioetEnTer\RelDir\ShellExe.exe NK SAutorun.lnk f:\WINCE420\PBWORKSPACES\LioetEnTer\RelDir\Autorun.lnk NK S
注意:ShellExe.exe的属性不能带H(隐藏).
4、 在project.dat里加入如下内容:
Directory("\Windows\Startup"):-File("Autorun.lnk","\Windows\Autorun.lnk")
5、 选择Make Image生成映像(当然Build也可以,就是慢点儿),烧到FLASH里,开机运行,可以看到SD卡里的MyApp.exe被正确执行。
总结
这种方法用起来比较方便,ShellExe.exe不用每次都重新编译,只要根据应用程序路径修改Autorun.lnk即可,可以加载Flash、U盘、SD卡里的应用程序。调试及升级应用程序就不用重新烧写内核了

❽ 如何让WINCE系统启动直接运行自己的程序

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) @ $(SG_INPUT_LIB)\oemstub.pdb $(SG_OUTPUT_OAKLIB) @ $(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函数中;否则需要进行硬件中断屏蔽、内存、系统时钟频率、电源管理等硬件的基本初始化过程。(具体过程见代码的分析) $(_PLATFORMROOT)\xsbase270\src\common\Startup\Startup.s LEAF_ENTRY StartUp bl PreInit tst r10, #RCSR_HARD_RESET beq OALStartUp tst r10, #RCSR_GPIO_RESET bne Continue_StartUp bl xlli_mem_init ;初始化内存控制器 ldr r0, =xlli_PMRCREGS_PHYSICAL_BASE; ldr r0, [r0, #xlli_PSPR_offset]; mov r1, r10; bl XllpPmValidateResumeFromSleep; cmp r0, #0; bne Failed_Sleep_Resume; Sleep_Reset ldr r0, =xlli_PMRCREGS_PHYSICAL_BASE; ldr r0, [r0, #xlli_PSPR_offset]; mov r1, r10; b XllpPmGoToContextRestoration; Failed_Sleep_Resume ldr r1, =xlli_RCSR_SMR bic r10, r10, r1 Continue_StartUp bl xlli_intr_init; ;初始化中断控制器 bl EnableClks; ;使能内核时钟(内存/OS定时器/FFART时钟之需) bl OALXScaleSetFrequencies ;设置系统频率 bl xlli_mem_Topt bl xlli_mem_restart ;复位内存,使其处于工作模式 bl xlli_ost_init ;初始化操作系统定时器 bl xlli_pwrmgr_init ;初始化电源管理 bl xlli_IMpwr_init ;初始化内部存储器 b ENTRY_END 2、OALStartUp函数: 在系统硬件初始化完毕之后,Startup调用 OALStartUp函数,OALStartUp函数主要完成将OEMAddressTable表传递给内核;然后调用KernelStart函数跳转到 内核OEMAddressTable表的主要作用表的每一个入口都定义了一个内存中的物理位置、内存的大小以及映射这物理地址的静态虚拟地址; ◆静态虚拟内存地址被定义在缓冲存储器的范围之内; ◆内核可以创建非缓冲的内存地址指向到相同的物理地址; ◆对于同一物理地址,既有一个缓冲的虚拟内存地址,也有一个非缓冲的虚拟内存地址; ◆OEMAddressTable最后必须以0结尾; ◆对于MIPS和SHx类型的CPU,物理地址与虚拟地址的映射由CPU完成,无需创建OEMAddressTable $(_PLATFORMROOT)\xsbase270\src\Inc\ Oemaddrtab_cfg.inc): $(_PLATFORMROOT)\xsbase270\src\oal\OalLib\Startup.s 3、KernelStart函数主要作用: ◆完成OEMAddressTable表中的物理地址到虚拟地址和虚拟地址到物理地址之间的映射; ◆对存储器页表和内核参数区存储空间(RAM或DRAM)进行清零处理。 ◆读出CPU的ID号,内核需要根据该ID决定ARM的MMU处理,因为ARMV6和ARMV6之前的ARM处理器的MMU处理过程有所区别; ◆设置并开启MMU和Cache,因为在Startup函数关闭MMU和Cache; ◆设置ARM处理器工作模式的SP指针,ARM处理器共用7种不同的工作模式 (USER、FIQ、IRQ、Supervisor、Abort、Undefined、System),除用户模式(USER)和系统模式 (System)之外,其他5种工作模式都有具有特定的SP指针寄存器(ARM处理器称其为影子寄存器); ◆读取内核启动所需要的KDataStruct结构体; ◆调用ARMInit函数重新定位Windows CE内核参数pTOC和初始化OEMInitGlobals全局变量; ◆利用mov pc, r12指令跳转到kernel.dll的入口位置,即NKStartup函数中。 $(_PRIVATEROOT)WINCEOS\COREOS\NK\LDR\ARM\armstart.s 4、ARMInit函数: 在ARMInit之前,系统仍无法使用全局变量, 因为系统的全局还在ROM区域,对于操作系统而言,出于安全考虑,只有XIP程序才有读取ROM区域数据的权利,对于大部分Windows CE 操作系统,只有将数据拷贝到RAM区域后才能进行读写,ARMInit函数中通过调用KernelRelocate函数对pTOC全局变量重新定位,定位 之后,对内核启动所需要的KDataStruct结构体进行初始化,其中OEMInitGlobals便是交换oal.exe和kernel.dll之间 的全局指针,ARMInit函数返回kernel.dll的入口位置。并在KernelStart函数最后利用mov pc, r12指令跳转到kernel.dll的入口位置,即NKStartup函数中。 $(_PRIVATEROOT)WINCEOS\COREOS\NK\LDR\ARM\arminit.c 5、NKStartup函数: 硬件平台初始化完成后,oal.exe的启动任务基本完成,余下的启动工作由内核相关且独立于内核的OAL层实现体kernel.dll接管。kernel.dll主要作用: ◆从结构体参数KDataStruct * pKData提取内核启动时所必须的全局变量,同时初始化内核全局变量; ◆定位对Windows CE 6.0特有的OEMGLOBAL结构体的初始化函数OEMInitGlobals地址,该结构体构建了内核和OAL层之间进行通信的桥梁。在 OEMGLOBAL结构体定义了OAL层所必须的函数,该结构体在oemglobal.c文件中被初始化,并被编译在OEMMain.lib和 OEMMain_StaticKITL.lib两个库中,如果OAL链接这两个库,则必须要有该结构体中函数实现体; ◆通过调用ARMSetup设置物理地址和非缓冲的虚拟内存地址的映射、ARM中断向量以及内核模式所需要的堆栈。 ◆调用OEMInitDebugSerial函数初始化调试串口; ◆调用OEMInit进行平台初始化; 需要注意的时,NKStartup函数调用OEMInitDebugSerial和 OEMInit函数的过程与Windows CE 6.0之前的版本完全不同,这是因为在Windows CE 6.0以前的版本中,由于内核(kernel)、OAL和KITL编译在一个可执行的文件中,它们之间的共享变量只需简单利用extern关键字申明便可 相互之间进行访问,而在Windows CE 6.0中,由于内核(kernel)、OAL和KITL被编译成不同的可执行文件,变量之间的相互访问无法使用extern关键字实现共享,即内核无法使 用extern DWORD varX方法访问OAL层的变量varX,当然OAL层的实现体同样无法通过同样的方式访问内核变量。为实现内核和OAL访问共享信息,Windows CE 6.0定义了OEMGLOBAL和GLOBAL两个结构体。 在 Windows CE 6.0的内核启动时,OS找到OAL的入口位置,然后调用入口函数与全局块进行指针交换,这样内核才能使用OAL层中的信息,同样OAL层才能访问内核(kernel)导出的函数。 所以上述两个函数的调用实际上通过OEMGLOBAL结构体实现的。实际调用位置为$(_PRIVATEROOT)\winceos\coreos \nk\oemstub\oemstub.c中的OEMInitDebugSerial和OEMInit,这两个函数中通过OEMGLOBAL结构体指针 访问OAL层中的OEMInitDebugSerial和OEMInit。 首先看一下将WinCE6.0编译成诸如WinCE5.0所说的基本内核情况,即kern.exe。对于oal.exe源码位置比较容易找到,因为 oal.exe是启动代码与硬件相关的OAL层实现文件编译而成,所以只需在BSP的OAL目录中便能找到。而对于kernel.dll,在BSP目录结 构中,基本上无法找到kernel.dll的编译文件,所以必须从其他方面着手。 调用KernelFindMemory()函数分割RAM区域,在Windows CE操作系统中,RAM空间主要分为存储内存和程序内存,存储内存主要为文件的存储空间,包括内核文件和复制到系统中所有目标文件,程序内存为运行程序时所需要的存储空间。 ◆KernelStart ()启动内核。 $(_PRIVATEROOT)\WINCEOS\COREOS\NK\KERNEL\ARM\mdarm.c void NKStartup (struct KDataStruct * pKData) { 。。。。 } 6、KernelSstart函数: 这里的KernelStart函数与前面的KernelStart函数的属于两个完全不 同的函数,NKStartup函数中调用的KernelStart函数为$(_PRIVATEROOT)\WINCEOS\COREOS\NK \KERNEL\ARM\armtrap.s文件中的KernelStart函数,主要完成调用内核初始化函数KernelInit,并跳转到操作系统的 第一个启动的任务。 LEAF_ENTRY KernelStart ldr r4, =KData ; (r4) = ptr to KDataStruct ldr r0, =APIRet str r0, [r4, #pAPIReturn] ; set API return address mov r1, #SVC_MODE msr cpsr_c, r1 ; switch to Supervisor Mode w/IRQs enabled CALL KernelInit ; initialize scheler, etc. mov r0, #0 ; no current thread mov r1, #ID_RESCHEDULE b FirstSchele ENTRY_END 7、KernelInit函数: Windows CE 6.0的内核初始化函数同其他版本的内核初始化函数基本相近,主要完成在启动第一个线程前对内核进行初始化,主要包括API函数集初始化、堆的初始化、初始化内存池、进程初始化、线程初始化和文件映射初始化等操作。 void KernelInit (void) 。。。{ } 8、FirstSchele: FirstSchele函数为Windows CE操作系统启动过程中最后无条件跳转的一个函数,windows CE进行第一个调度,实际为一个空闲线程,因为windows CE系统还没有完成启动,只有当windows CE完全启动并进入稳定状态,然后启动文件系统filesys.dll,设备管理device.dll,窗体图像子系统gews.dll和shell程序 explore.exe。

❾ Wince程序中如何控制程序的开机启动和禁止

清理启动项:
方法一、
1、并明世按住键盘上微软徽标键的同时,按下 R 键,就会弹出”运行“的界面,输入”msconfig“点击确定;
2、进入”系统配置“的界面后,选择”启动“选项卡,将不需要开机槐腔启动的软件前面的勾取消,然后点击确定;绝肢
方法二、使用电脑管家清理启动项。
1、点击“启动项”
2、禁用不必要的启动项即可。

阅读全文

与wince如何设置程序自启动相关的资料

热点内容
济阳县第七人民医院技术怎么样 浏览:455
江油市五金工具市场在哪里 浏览:278
程序与编程有什么区别 浏览:630
换机后数据如何转移 浏览:212
活禽市场用什么脱毛 浏览:476
武汉有哪些有名的菜市场 浏览:988
自媒体怎么找好的产品 浏览:143
什么是感性的眼镜产品 浏览:97
重庆丝网交易市场在哪个区 浏览:456
广州的玉石市场在哪里 浏览:332
魔兽世界转代理的时候是什么版本 浏览:109
大盘连续多少交易日破万亿 浏览:221
临沂土杂市场在哪里有卖烧烤炉的 浏览:291
如何选出一行数据最大值 浏览:680
服装招代理需要多少钱 浏览:793
净水机水处理技术用什么 浏览:604
复制拼多多产品用什么软件 浏览:708
油烟净产品什么颜色 浏览:273
泰同代理怎么样 浏览:111
boss小程序怎么视频面试 浏览:731