原帖地址:http://blog.21ic.com/user1/2834/archives/2006/28636.html
2006/9/15几个经验
从着手这个项目以来,通过不断地看书和学习,获得了一些开发经验,现在拿出来分享。
首先说前几天遇到的memory问题:系统定制过程中,当选取的组件比较大时,得到的镜像文件将会很大,但是通过调整可以解决此类问题:
首先打开PB中的parameterview选项卡,选择其中的config.bib文件,我们会得到以下的文件:
MEMORY
; [Notification]
; Not yet implemented MULTIPlEXIP Kernel features.
; Do not "SET IMGMULTIXIP=1"
; Please check "SET IMGMULTIXIP=" so that
IMGMULTIXIP are not defined
; NK name
#define NKNAME NK
; NK Start address
#define NKSTART 8C200000
#define NKLEN 01D00000
#define RAMSTART 8E000000
#define RAMLEN 01F00000
$(NKNAME) $(NKSTART) $(NKLEN) RAMIMAGE
RAM $(RAMSTART) $(RAMLEN) RAM
; NK 80040000 01EB0000 RAMIMAGE
; RAM 8c200000 01C00000 RAM
; Common RAM areas
AUD_DMA 8c002000 00002000 RESERVED
DRV_GLB 8c010000 00010000 RESERVED
DBGSER_DMA 8c022000 00002000 RESERVED
SER_DMA 8c024000 00002000 RESERVED
IR_DMA 8c026000 00002000 RESERVED
SD_DMA 8c028000 00008000 RESERVED
EDBG 8c030000 00020000 RESERVED
CPXIPCHAIN 8c050000 00008000 RESERVED
SLEEP_BUFF 8c058000 00004000 RESERVED
DISPLAY 8c100000 00100000 RESERVED
CONFIG
COMPRESSION=ON
KERNELFIXUPS=ON
IF IMGPROFILER
PROFILE=ON
ENDIF
IF IMGPROFILER !
PROFILE=OFF
ENDIF
ROMFLAGS=0
ROMSTART=$(NKSTART)
ROMWIDTH=32
ROMSIZE=$(NKLEN)
; ROMSIZE=01EB0000
;#define CHAIN_ADDRESS 81E40000
; CHAIN $(CHAIN_ADDRESS) 00001000 RESERVED
; pdwXIPLoc 00000000 $(CHAIN_ADDRESS)
FIXUPVAR
; NK 80040000 01E00000 RAMIMAGE
; CHAIN 81E40000 00001000 RESERVED
; DRIVERS 81E41000 001BF000 RAMIMAGE
; RESERVE 8df00000 00080000
; RAM 8c200000 01D00000 RAM
注意:其中的“;”代表注释,表示这句语言无效。我们注意到有这么一段语句:
#define NKSTART 8C200000
#define NKLEN 01D00000
这代表镜像的起始地址以及大小,是使用十六进制表示的,经过计算得出大小为29M,这与我们最后得到的nk.nb0的大小是一致的。同时起始地址也是ROM的起始地址,可以得到rom的起始地址以及大小。
而 #define RAMSTART 8E000000
#define RAMLEN 01F00000
代
表RAM的起始地址和大小,常常我们得到的错误是 ram start over the rom end,即ram的起始地址越过rom的结束地址,所以我们只需要修改ram的起始地址即可。使其变大一点,当然这个要参考rom的结束地址,以及系统给
某些组件的预留空间地址,不可以盲目修改。
第二个问题:
红外组件问题:在定制过程中,针对2410开发板的组件要求加入红外组 件,但是不是许多系统都需要这个功能的,由于它已经默认到我们的BSP中了,所以我们要修改红外组件,使其功能失效,即注释掉它。同理,打开
parameterview选项卡中的platform.bib文件,找到这一段代码:
IF BSP_NOSERIAL !
irsir.dll $(_FLATRELEASEDIR)\irsir.dll NK SH
irda2410.dll $(_FLATRELEASEDIR)\ser2410.dll NK
SH
ser2410.dll $(_FLATRELEASEDIR)\ser2410.dll NK
SH
ENDIF BSP_NOSERIAL !
把关于irsir.dll的这一句代码用分号注释掉即可,这也解决了我们在没有选择红外组件时,编译报错的问题,报错一般为:could not find irsir.dll。
固定链接
http://caolingeric.spaces.live.com/blog/cns!BFC904516310C042!130.entry
定制Windows CE操作系统续
三、定制Windows CE操作系统:
我们接下来就根据项目要求来定制一个操作系统,我们将使用向导来完成定制过程:
Step 1(欢迎界面):
首先点击向导的New platform或者是点击File->New platform来进入定制向导:这是一个欢迎界面,我们可以根据这个界面了解我们需要选择的组件以及驱动程序步骤。我们直接点击Next进入下一步。
Step 2 (BSP选择):
这一步要求我们选择BSP,由于我们采用的是Samsung 2410主板,所以我们选择这一项:SAMSUNG SMDK2410: ARMV4,然后直接点击Next:
Step 3 (平台配置选项):
这一步是选择平台配置,PB提供了几种特定环境所需要的配置选项,我们所需的不在所列中,因此我们选择Custom Configuration,然后为平台命名为:ADSLTEST,点击Next:
Step 4 (设备配置):
这一步是关于设备的特性选择,因为我们开发的设备要求有显示以及外观,所以我们选择Custom Device with Shell and Graphical User Interface(GUI),然后点击 Next:
Step 5 (基础类库):
这一步是我们以后用于开发应用程序及其服务程序的基础类库的选择界面,我们选择我们所需要的:Active Template Library, C Libraries and Runtimes, Component Services中的COM相关组件,Microsoft Foundation Classes(MFC), Standard SDK for Windows CE.NET。选择好以后,直接进入下一步:
Step 6 (应用程序):
此对话框提供的都是生成的操作系统镜像中由Windows CE自带的应用程序,可以根据相应的要求,添加相应的程序。我们选择:ActiveSync中的File Sync, CAB File Installer/Uninstaller, File Viewer中的Microsoft EXCEL Viewer。然后点击Next:
Step 7 (操作系统核心服务):
这里主要选择一些通用的硬件、工具、特性等进行选择,我们选择这几项:Battery Driver, Serial Port Support, USB Host Support中的USB HID Keyboard and Mouse和 USB Storage Class Driver, Debugging Tools中的Touch Driver Test Application和Toolhelp API, Power Management中的full选项,以及Kernel Features。
Step 8 (通信服务):
这里显示了设备的通信服务及其联网功能,根据要求,我们选取:Networking Features中的Extensible Authentication Protocol, Network Bridging, Network Utilities (IpConfig, Ping, Route), TCP/IP。Networking-Local Area Network(LAN)中的Wired Local Area Network (802.3, 802.5)。Networking-Wide Area Network(WAN)中的Point-to-Point Protocol over Etherne
t
(PPPoE)。Servers中的ASP Support,Device management ISAPI Extension, WebServer Administrator ISAPI。
Step 9 (文件系统):
这里主要是对生成的操作系统镜像所支持的文件系统进行设置,我们选择:File and Database Replication中的Bit-based,File System –Internal中的RAM and ROM File System,Registry Storage中的Hive-based Registry,Storage manager中的Binary Rom Image File System和相关FAT选项。选择好以后点击Next:
Step 10 (字体):
此对话框主要是选择准备生成的操作系统镜像所支持的字体,可以不同的情况进行选择,我们不选择任何字体(系统会根据相应的情况添加必要的字体),进入下一步:
Step 11 (区域选项):
此对话框选择对非英语国家的支持,如语言,输入等,我们选择关于中文的选项: Locale Services中的National Language Support。Chinese(Simplified)。然后点击Next:
Step 12 (Internet 程序):
这里主要是选择浏览Internet所需要的程序及相关部件:我们选择:Browser Application中的Internet Explorer 6.0 for Sample Brower,Internet Explorer 6.0 for Windows CE component中的Internet Explorer HTML Application,以及URL Moniker Services,Scripting中的Jscript5.5。选择完毕后,直接进入下一步:
Step 13 (多媒体技术):
这是关于生成的操作系统的多媒体能力选项,我们可以根据自己的要求选择:Multimedia Components中的Audio中的DirectSound和Waveform Audio。然后点击Next:
Step 14 (安全设置):
这是关于安全设置内容的选项:
我们选取:Authentication Services中的NTLM和Schannel,以及Cryptography Services中的Certificates。然后点击Next:
Step 15 (操作系统外壳):
这里选择所支持的操作系统外壳与用户接口,我们选择:Shell中的Standard Shell和Command Shell,User Interface 中的controls Options B;Customizable UI;Menu Tool Tip;Network User Interface;Overlapping Menus;Software Input Panel中的Driver和Small Screen;Touch Display和Quarter VGA Resources以及Mouse。然后点击Next:
Step 16 (相关警告):
当定制完成以后,将出现一些警告或者提示,这是因为在定制的过程中,有一些组件是有风险的,系统将提示用户某些组件的风险以及注意事项,在此我们看 到了关于ActiveSync、RAS Server等组件的提示警告,在我们确信使用该组件时,直接点击Next来完成系统定制过程。
Step 17 (定制完成):
直至现在,我们就完成了一个关于项目要求的操作系统定制,我们接下来就可以通过下载到目标机中来显示这个操作系统,当然先要点击Finish来完成 定制向导。PB将通过获取变量以及属性来配置这个系统,并且建立一个文件夹位于PUBLIC目录下,关于该系统的配置文件可以在这个文件夹中找到。
四、平台编译
我们已经成功定制了一个Windows CE操作系统,定制以后还需要我们进行一些配置,来做好编译前的准备工作:
首先修改一些关于2410的特性:
1、屏蔽红外组件:
由于2410板卡支持红外特性,而我们定制的系统不需要这个特性,因此本着尽量减小镜像大小的思想,我们需要把这个组件屏蔽掉。
打开工作区中的ParameterView选项卡中的Plarform.bib文件,然后修改这一行参数:
irsir.dll $(_FLATRELEASEDIR)\irsir.dll NK SH
在这行语句前加一个“ ;”来完成对它的注释,即可屏蔽该组件。
2、增加2410网卡:
在Catalog目录中选取BSPs 中的SAMSUNG SMDK2410: ARMV4,选择其目录树下的NetworkingàLANàCS8900,然后点击右键选择“Add to the platform”,完成对网卡的添加。
3、修改LCD驱动程序:
我们开发的产品要使用320*240的TFT液晶屏,所以我们要实现对产品的驱动支持,要修改相关的驱动程序。因为2410给的BSP是关于640*480的驱动程序,我们只需要修改三个文件,就可以完成驱动程序的修改:修改的文件及其位置为:
1、 WINCE420\PLATFORM\SMDK2410\INC\s2410.c
2、 WINCE420\PLATFORM\SMDK2410\DRIVERS\DISPLAY\S3C2410LCD\s3c2410disp.cpp
3、 WINCE420\PLATFORM\SMDK2410\ KERNEL\ HAL\cfw.c
修改了这三个文件中的源代码,就可以了。具体修改程序请参照单独的技术文档。我们可以在定制结束以后再进行替换,或者也可以在定制之前进行修改,当然要在配置BSP之前进行修改,否则相关特性不能添加到工作环境中。
最后右键点击工作区中的ADSLTEST Features,选择Setting,将出现如下的对话框,我们选择Build Option选项卡,确保Enable KITL,Enable CE target control support这两个选项没有选择,因为2410的网卡CS8900,是不支持KITL的。
通过这几个步骤,我们已经完成了对平台进行编译的准备工作,接下来,我们就要对定制好的系统进行Build (编译)。点击菜单栏中buildàbuild platform即可,平台将对定制的系统进行编译,其中编译信息将在输出栏中显示,其中显示的内容主要有以下几个方面:
1、CESYSGEN阶段:
这一阶段主要是将编译过程中使用的所有头文件、用于生成DLL的DEF文件以及其它文件挑出来,这一过程为将来生成平台的SDK做准备。在这一过程中,我们将看到许多诸如:sysgen ***** =1,这表明该组件sysgen成功,其必要组件已经找到。
2、BSP阶段:
这一阶段将编译和链接图形、窗口和事件子系统、内核、OEM适配层以及设备驱动程序等。这一步用来创建NK.exe,以及创建DLL。
3、MAKING阶段:
这一阶段实际上将为平台生成最终的ROM映像,ROMImage将最终的映像生成为NK.BIN, 这个BIN文件采用二进制压缩,使其大小大约减小了一半。
等待大约10分钟左右,(编译时间与机器配置有关)就可以在输出栏中看到编译信息:build done:0 errors, ** warnings。有警告是正常的,因为某些组件是有风险的,譬如一些网络组件,所以只要没有错误,说明定制没有问题,NK.BIN已经生成。
我们可以在如下的路径找到NK.BIN和NK.nb0:WINCE420\PUBLIC\ADSLTEST\ RelDir\ SAMSUNG_SMDK2410_ARMV4Release 中找到这两个文件,我们可以使用2410提供的专用下载工具DNW把它们下载到板卡中。当然我们最终使用的是NK.BIN.
wangxinfeng6666_749290079 2011-5-26 22:42