关闭

基于2410/2440让程序在Windows CE系统启动时自动运行(含platform.reg .dat .bib介绍)

385人阅读 评论(0) 收藏 举报

关于系统程序的启动顺序(自启动方法一)

1. 假定Windows CE.NET目标工程目录为E:\ SMDK2440,并且工程已经Build成功,假定Windows CE.NET的应用程序为MyApp.exe并存放在本地硬盘 E 盘下;

2. 修改MyWinCE工程的project.bib文件,在MODULES添加如下内容:MyApp.exe E:\MyApp.exe NK H

3. 创建快捷方式文件MyApp.lnk,文件内容如下:10#\Windows\MyApp.exeMyApp.lnk文件也放入E:\目录下;

4. 修改MyWinCE工程的project.bib文件,在FILES 添加如下内容:MyApp.lnk E:\MyApp.lnk NK H

5. 修改MyWinCE工程的project.dat文件,添加如下内容: Directory("\Windows\Startup"):-File("MyApp.lnk","\Windows\MyApp.lnk")

6. Platform Builder IDE:【Build】->【Make Image】(记得千万不要Build或者Rebuild)

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

关于系统程序的启动顺序(自启动方法二)

采用这种方法的前提是你要启动的应用程序已经编译进了NK.nb0或者NK.bin中了。

具体方法及说明如下:

platform.reg或者common.reg,在[HKEY_LOCAL_MACHINE\init]段添加如下类似内容: "LaunchXX"="<你的程序>" "DependXX"=hex:YY,ZZ,...其中XX是十进制的数字,表示<你的程序>的启动顺序标识;YY,ZZ是Least Significant的十六进制数字,表示<你的程序>所依赖(先于<你的程序>运行)的程序的启动顺序标识。

来看两个系统的例子:

[HKEY_LOCAL_MACHINE\init];

 @CESYSGEN IF CE_MODULES_SHELL

"Launch10"="shell.exe";

@CESYSGEN ENDIFIF IMGTINY !;

 @CESYSGEN

IF CE_MODULES_DEVICE

 "Launch20"="device.exe";

@CESYSGEN

ENDIF;

@CESYSGEN

IF CE_MODULES_GWESIF NOGUI !

 "Launch30"="gwes.exe"

"Depend30"=hex:14,00

ENDIF

Launch10、Launch20、Launch30表示了系统在启动时会先加载“shell.exe”,然后再加载“device.exe”和”gwes.exe”,而且可以看到”gwes.exe”的启动还有依赖“device.exe”,即只有在“device.exe”完全启动后“gwes.exe”才能启动。如果我们要在系统启动时候也启动自己的程序可以像如下设置:例如: "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的程序。注意Launch后面的数值不能和系统默认的某个程序的值一样,不然在编译的时候就会报错。修改完后只要 PlatformBuilder IDE->Build->MakeImage,生成新的NK.bin就可以了,不用重新编译。

去掉系统启动 explorer项

Windows CE.NET的桌面确实漂亮,但是如果我们的嵌入式系统使用微软的桌面,总让我感觉不伦不类。因此,要想个办法,让我们的程序开机启动,把微软的那个桌面给替换掉。其中使用startup的快捷方式再加上隐藏任务栏的方法,效果非常的好,但是每次启动的时候,总是微软的桌面先出来,再启动我们的程序,感觉还是不爽。

有一种方法如下:

1) 首先新建工程,把你的应用程序放到内核里面去(前面介绍了如何做);

2) 编译平台;

3) 修改E:\SMDK2440\RelDir\SAMSUNG_SMDK2440_ARMV4IRelease\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)否则就前功尽弃了。

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

原理说明:

1.将自定义的文件打包进NK.bin中的方法有两种 一种是编辑project.bib文件。在FILES Section描述文件的名称,源文件的路径,文件在目标系统中的属性。在上面, MyApp.exe $(_FLATRELEASEDIR)\MyApp.exe NK H 表示将你所建工程如:E:\SMDK2440\RelDir\SAMSUNG_SMDK2440_ARMV4IRelease 目录下的文件MyApp.exe文件打包进NK.bin,并且此文件将处在Kernel内存区,文件属性类型为隐藏。 第二种方法是添加User Feature。PlatformBuilder IDE->FeatureView->在"MyWinCE Features"上Right Click鼠标->Insert User Feature->指向想打包的文件。无论采用哪种打包方法,在启动的Windows CE系统中,文件都在\Windows目录下。下一步就是根据需要重新组织文件系统的目录结构。

2.组织文件系统的目录结构的途径在于修改project.dat文件添加文件目录结构的描述。描述的语法如下:root:-Directory("<目录名>") 表示在root目录(\)下创建目录Directory("\<目录名>"):-Directory("<子目录名>") 表示在指定目录下创建子目录Directory("\("<目录名>\<子目录名>"):-File("<文件名>.<扩展名>","\Windows\<文件名>.<扩展名>") 表示在指定目录下创建\Windows目录下文件的拷贝,显示名称是<文件名>.<扩展名>。

3.应用程序并不一定需要打包进NK.bin假定程序在硬盘的某个位置,如\硬盘\MyApp\MyApp.exe,那么只需创建快捷方式文件,链接指向\硬盘\MyApp\MyApp.exe就是了。整个过程简单来说就是,想清楚应用程序将会出现在哪个目录下,创建正确的快捷方式文件,修改目标系统目录组织配置,最后将应用程序和相应的快捷方式文件打包进NK.bin。ARMCE备注:

1 最好不要修改common.reg,需要改动在platform.reg中做,platform.reg中的注册表内容会覆盖common.reg的,如果改动了common.reg编译起来就比较麻烦了

2 改动了platform.reg需要手动将其从platform拷贝到release目录,这样才可以直接执行makeimg,因为makeimg是不会拷贝files目录下的东西的

3 lnk文件的内容可能有些问题,标准格式为{number}#{link}其中:{number}为#后面所有字符的长度,也即字节数{link}为指向的exe的路径如:16#\Windows\cmd.exe23#"\Windows\dmacnect.exe"

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

以上转自:http://www.armce.cn/bbs/thread-65-1-2.html

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:399200次
    • 积分:2966
    • 等级:
    • 排名:第11867名
    • 原创:0篇
    • 转载:101篇
    • 译文:0篇
    • 评论:32条
    最新评论