Platform builder 4.2 定制内核的一些资料(转载过来收)

1. 如何添加注册表
用的是national geode
工程是internet appliance
1.在 "File Systems and Data Store" -- "Registry Storage"內,選擇 "Hive-based Registry"
2.在 "File Systems and Data Store" -- "Storage Manager"內,選擇 "FAT File System"
在 "HARWARE SUPPORT" -- "ATAPI"
3。加环境变量BSP_ENABLE_FSREGHIVE=1
不过有个后移症,就是网络功能有问题.
那位知道“开始”->“设置”->“网络”图标没了.网络不通
PB实现CE对大容量物理内存的支持
  在PC上增加物理内存是很方便的,插上内存条后只要自检程序识别,那么桌面操作系统就能够支持。而在基于CE的产品上就没那么简单了。如果物理内存大于64MB,就要在定制内核时做一些工作。
  一旦内存管理单元(MMU)开始工作,CPU就不再直接访问物理内存了,对于运行在x86和ARM系列CPU上的CE内核来说,必须先确立物理内存地址同虚拟内存地址的映射关系。这种关系实际是在一个名为OEMAddressTable的表中定义的。CE提供了两种虚拟地址映射方法,分别为静态映射和动态映射,这个表属于静态映射方法。静态映射的虚拟地址空间只能由内核访问,而动态映射的地址空间可以由用户模式的应用程序访问。OEMAddressTable在文件%_WINCEROOT%/Public/Common/Oak/Csp/i486/Oal/ OEMInit.asm中。在这个文件的最后有一段代码:
; RAM 0x80000000 -> 0x00000000, size 64M
dd  80000000h,    0,    04000000h
dd  0,            0,    0
这段代码表示将虚拟地址80000000映射到物理地址0,大小为64MB。将04000000h改成实际的物理内存大小,然后保存。接着单击PB菜单 "Build"-"Open Build Release Directory",在命令行中先用cd命令进入上述目录,如:
cd  %_WINCEROOT%/Public/Common/Oak/Csp/i486/Oal
然后键入下列命令:
build -c
sysgen i486oal
build命令根据配置文件内容编译整个目录,sysgen批处理将build 编译的文件i486oal.lib文件复制到CE的安装目录和内核工程目录下。我安装的BSP是基于x86的,所以相应目录为%_WINCEROOT%/PUBLIC/COMMON/OAK/LIB/X86/RETAIL 和 %_PROJECTROOT%/cesysgen/oak/lib/x86/retail两个目录。上一步做完之后,接着开始修改config.bib文件。
在config.bib文件中定义内存区域。在config.bib中预设的配置没有超过64MB的,所以要自己手工添加。可根据原有的IMGRAM64配置更改,原有的IMGRAM64如下:
; 64 MB of RAM (note: AUTOSIZE will adjust boundary)
IF IMGRAM64
   NK       80220000  009E0000  RAMIMAGE
   RAM      80C00000  03000000  RAM
   UMABUF   83C00000  00400000  RESERVED
ENDIF

假如要支持128MB,更改如下:
IF IMGRAM16 !
IF IMGRAM32 !
IF IMGRAM64 !
   NK       80220000  009E0000  RAMIMAGE
   RAM      80C00000  07000000  RAM
   UMABUF   87C00000  00400000  RESERVED
ENDIF
ENDIF
ENDIF
  在这里没有更改NK的大小,只是修改了RAM的大小。在config.bib定义之后,还可以在OAL层通过变量或者函数更改物理内存的大小,适合设备可能出现增加或减小内存的情况。CE的帮助文档介绍了几种方法,这里只提一下CreateStaticMapping函数。CreateStaticMapping函数作为config.bib文件的补充,适合在用户模式的应用程序或驱动程序中调用,调用这个函数能够将指定首地址的物理内存块映射到虚拟地址空间,函数返回虚拟地址。虚拟地址范围在C400 0000 到 E000 0000之间,这是内核的地址空间,只能由内核访问。相比较VirtualCopy函数用于动态地将指定首地址的物理内存块映射到虚拟地址空间,这个虚拟地址空间一般为用户进程的地址空间,因为VirtualCopy函数被设计专用于驱动程序调用,它常被用于将一个物理内存块映射到不同的虚拟地址空间。

路漫漫其修远兮
  2005-1-3 17:50:19  [广告] 嵌入式数码相机模块,自带压缩功能,易于单片机接口。   评帖
 
 
tianjinfeng1983
 

头衔:
等级:3 排长
帖数:247
金钱:2621
积分:0
注册:2004-10-27
       ↓帖子字号 第 2 楼

--------------------------------------------------------------------------------

 
Platform Builder                                                               1 建立配置                                                               Windows CE的软硬件环境配置和调试Windows CE需要1台高性能开发工作站和1台目标调试设备。Platform Builder 3.0运行在Windows 2000或者以上版本的高性能开发工作站上。Platform Builder提供了创建和调试Windows CE映射NK.BIN的集成开发环境,如向导和工具栏,支持活动模板库(ATL)、微软基本类库(MFC)和Visual Basic,为支持的处理器家庭提供编译器、内核调试器以及各种远程调试工具。目标调试平台可以是经过适当配置以后的普通PC机,也可以是嵌入式微处理器模块。开发工作站通过以太网或者串、并行口与目标平台连接,并将Windows CE操作系统映像文件NK.BIN下载到目标平台。下载完成之后,Windows CE在目标平台启动。在开发工作站上,可以使用Platform Builder提供的调试工具查看Windows CE的运行情况。以太网和串、并行口这两种连接类型的差别如表1所列。                                                                            表1 以太网和串、并行口连接之间的差别。
以太网连接 串、并行口连接
下载速度较快 下载速度较慢
开发工作站需要以太网网卡,目标平台需要NE2000兼容的调试以太网网卡 串行口、并行口
映像文件和调试工具都使用以太网 映像文件使用并行口下载,目标平台的调试信息使用串行口传送
2 Platform Builder 3.0提供的配置文件                                           配置文件包括4种文件类型:二进制映像生成文件.BIB、注册表文件.REG、目录和文件分配表文件.DAT、数据库文件.DB。通过修改这些配置文件可以裁剪优化Windows CE。用户根据需要可以创建自己的配置文件,PB提供的主要配置文件如表2所列。
表2 配置文件列表
.BIB文件 .REG文件 .DAT文件 .DB文件
Common.bib Common.reg Common.dat Common.db
Dcom.bib Dcom.reg Servers.dat  
Msmq.bib Msmq.reg    
Platform.bib Platform.reg Platform.dat Platform.db
Project.bib Project.reg Project.dat  
Wceshellfe.bib Wceshellfe.reg Wceshellfe.dat Wceshellfe.db
Wceappsfe.bib Wceappsfe.reg Wceappsfe.dat Wceappsfe.db
Config.bib Script reg    

2.1 二进制映像生成文件.BIB
.BIB文件是文本文件,标识包含在Windows CE映像中的目标模块、组件和文件。一个.BIB文件包含4个部分:FILES、MODULES、MEMORY和CONFIG。
(1)FILES部分
FILES分配一部分内存空间给静态数据文件。这部分主要包括字体文件(.TTF)、文本文件(.TXT)、位图文件(.BMP)和声音文件(.WAV)等。例如:
;Name Path Memory Type
;------ --------------------------------------- ----------- -----
Tahoma.ttf $(_FLATRELEASEDIR).ttf NK SHU
Name:在Windows CE系统中的文件名。
Path:文件在开发工作站中的位置。
Memory:文件所属的内存区。
Type:定义文件属性。Windows CE中的文件有以下文件属性:S为系统文件、H为隐含文件、U为非压缩文件、R为压缩资源文件、C为压缩文件。1个文件可以同时具有几种属性。
上例说明NK内存区包含开发工作站的$(_FLATRELEASEDIR).ttf文件。在Windows CE系统中,tahoma.ttf的文件属性是系统隐含的非压缩文件。
(2)MODULES部分
列出加载在内存中的目标模块和组件,包括所有的可执行文件.EXE和动态链接库.DLL。例如:
;Name Path Memory Type
;------- --------------------------------------- --------- ------
device.exe $(_FLATRELEASEDIR).exe NK SH
device模块加载到内存区。Windows CE系统中device.exe具有系统和隐含属性。
(3)MEMEORY部分
把物理内存分成2个部分:数据存储区和程序存储区。例如
;Name Start address size(bytes) Type
;------- -------------- ------------ --------------
NK 80200000 00600000 RAMIMAGE
RAM 80800000 00800000 RAM
在Windows CE系统中,内存分成3种类型:RAM、RAMIMG和RESERVED。RAM规定内存大小;RAMIMG规定ROM空间;RESERVED为保留的内存空间,内核不能使用这部分内存,但是应用程序可以访问。上例说明NK的起始地址是80200000,它占有6MB内存空间,作为ROM用于数据存储区。RAM在80800000开始,占有8MB的内存空间,用于程序存储区。
(4)CONFIG部分
这部分不是必不可必的。在这部分进行一些属性设置,如是否压缩和ROM大小等。
2.2 注册表文件.REG
注册表文件建立操作系统映像的注册表入口。注册表是一个数据,存储了大量的配置信息,包括应用程序信息、设备驱动程序的配置、系统配置信息、用户参数和其它相关数据。当目标平台冷启动时,Makeimg.exe使用.REG文件创建默认注册表。Platform.REG配置与平台有关的注册表信息,如设备驱动程序入口。Project.REG设置与工程有关的注册表格。注册表文件的格式:
[HKEY_LOCAL_MACHINE]
“Launch10” = "shell.exe"
"Launch20" = "device.exe"
"Launch30" = "gwes.exe"
"Depend30" = "hex:14,00"
上述注册表入口设置规定内核在启动时必须自动运行shell.EXE和device.exe模块,gwes.EXE模块必须在device.EXE正常启动以后才能运行。
2.3 数据库文件.DB
Windows CE提供内置的轻量级数据库管理系统。Windows CE的属性数据库由1张包含记录的表组成,每个记录包含许多不同的属性,每个属性有3种信息:标志属性的ID号、类型和值。例如:
.Record:
Field:402001f:“{000214A0-0000-0000-C000-000000000046}”
Field:42020003:15
Field:42030003:2
End
属性数据库是一种平面结构,不能定义属性数据库之间的关系。使用Microsoft ActiveX Data Object for Windows CE(ADOCE)技术可以容量地访问属性数据库,甚至可以使用SQL语句查询信息。
2.4 目录分配表文件.DAT
.DAT文件定义Windows CE映像NK.NIB黑认的目录和文件结构。注意,Winodws CE不支持像Windows 9x/2000一样的盘符驱动器,而且没有当前目录的概念。例如:
root:-Directory("Program Files")
Directory("Program Files"):Directory("MY Work")
root:-Directory("My Documents")
Directory("My Documents"):-File("MyFile.doc")
生成2个根目录:Program Files和MyDocuments。Program Files有1个子目录:My Work。文件MyFile.DOC位于My Document目录中。注意MyFile.DOC必须出现在一个.BIB文件中,这样,映像文件中会有MyFile.DOC。
3 设置环境变量、生成映像文件NK.BIN
3.1 设置环境变量
在所有配置文件中,都存在条件语句IF Enviroment Value……END IF。当条件成立时,IF和END IF之间的信息包含在映像文件NK.BIN中;条件不成立时,则不包含相关模块和文件。通过设置环境变量可以添加或者删除NK.BIN中的模块和组件。以.BIB文件为例:
;Name Path Memory Type
;-------- ------------------------------------ ---------- ------
IFIMGUSB
IF CEPC_UHCI
uhci.dll $(_FLATRELEASEDIR).dll NK SH
ENDIF
IF CEPC_OHCI
ohci.dll $(_FLATRELEASEDIR).dll NK SH
ENDIF
usbd.dll $(_FLATRELEASEDIR).dll NK SH
usbhid.dll $(_FLATRELEASEDIR).dll NK SH
ENDIF
这里IMGUSB、CEPC_UHCI、CEPC_OHCI都是逻辑型环境变量。在PB中,可以使用2种方法设置环境变量。方法1:点击Platform菜单的Setting…,打开平台设置对话框,分别输入Variable和Value设置环境变量。方法2:点击Build菜单的Open Build Release Directory,打开命令提示窗口,在命令提示窗口中设置环境变量。在命令行中输入SETIMGUSB=1,动态链接库usbd.dll和usbhid.dll被包含到映像文件NK.BIN。uhci.dll和ohci.dll是否包含在NK.BIN中,取决于环境变量CEPC_UHCI和CEPC_OHCI的设置。如果SET IMGUSB=0,KN.BIN中不包含上述4个动态链接库。
3.2 Makeimg.exe工具
生成映像文件NK.BIN是平台创建过程的最后一步,也是配置Windows CE的最终目标。Makeimg.exe使用全部配置文件把目标模块和文件合并成一个惟一的Windows CE映像文件NK.BIN。图1所示为NK.BIN的生成过程。
Makeimg生成NK.BIN的具体步骤:
①全并配置文件:所有的.BIB文件合并成CE.BIB。CE.BIB包含映像NK.BIN中的所有文件;所有.REG文件合并成REGINIT.INT;所有.DAT文件合并在修改配置文件时,一定要注意CE.BIB、REGINIT.INI、INITOBJ.DAT、INITDB.INI是中间文件,修改这些文件不能配置Windows CE。
②将REGINIT.INI文件压缩成一个二进制文件DEFAULT.FDF。
③根据环境变量COUNTRY的设置,替换模块中的资源,使Windows CE映像满足特定语言的需要,最后生成二进制映像文件NK.BIN。
4 修改配置文件添加RTL8139网卡驱动
由于Windows CE具有完全不同于其它Windows操作系统的内核,在其它操作系统上运行的设备驱动程序不能在Windows CE上直接运行。原设备驱动程序代码必须经过适当修改或者全部重写以后才能在Windows CE系统上运行。Windows CE支持2种类型的设备驱动程序;本机设备驱动程序和流接口设备驱动程序。本机设备驱动程序通常与基于Windows CE的目标平台有着紧密的连接,而且每种本机设备驱动程序有精确的和特殊的目标的,这部分驱动程序一般由原始设备制造商(OEM)提供。流接口设备驱动程序是在用户一级的动态链接库(DLL),用于驱动可安装的外围部件。RTL8139网卡驱动程序是流接口设备驱动程序。使用Platform Builder或者Embedded Visual C++ 3.0生成RTL8139网卡驱动程序RTL8139.DLL.将(_FLATRELEASEDIR)中,分别修改Platform.BIB和Platform.REG。
①向Platform.BIB文件中添加下列语句:
MEMORY
RTL8139 8090000 00010000 RESERVED
MODULES
Rtl8139.dll $(_FLARTELEASEDIR).dll NK SH
②向Platform.REG中添加下列语句:
[HKEY_LOCAL_MACHINE]
“DisplayName”=“Realtek RTL8139 based Fast
Ethernet Driver”
“Group”=“NDIS”
“ImagePath” = “rtl8139.dll”
[HKEY_LOCAL_MACHINE]
“Route” = “Rmulti_sz: TL81391”
[HKEY_LOCAL_MACHINE]
“DisplayName” = “Realtek RTL8139 based Fast Ethernet Driver”
“Group” = “NDIS”
“ImagePath” = “rtl8139.dll”
[HKEY_LOCAL_MACHINE]
“BusNumber”= dword:0
“BusType”=dword:5
“ScanMethod”=dword:0
“SharedInterrupt”= dword:1
“PhysicalAddressBase”=dword:001a0000
[HKEY_LOCAL_MACHINE]
“EnableDHCP”=dword:0
;MULTI_SZ类型
“DefaultGateway”=“”
;0代表广播地址(或者255.255.255.255)
“UseZerBroadcast”=dword:0
;NULTI_SZ类型,IP地址
“IpAddress”=“202.2.4.77.16”
;MULTI_SZ类型,上面IP地址的子网掩码
“Subnetmask”=“255.255255.0”
[HKEY_LOCAL_MACHINE]
“Bind”=multi_sz:“RTL81391”
③Makeimg生成NK.BIN
在命令提示窗口输入Makeimg命令,生成新的Windows CE映像NK.BIN。下载NK.BIN到目标平台,通过以太网电缆直接连接开发工作站网卡和目标平台的RTL8139网卡。FRTL8139网卡的IP地址必须和开发工作站的IP地址在同一子网中,这样,在开始工作站运行ping命令时才会有响应。


路漫漫其修远兮
  2005-1-3 17:50:42  [广告] 综合电子论坛   评帖
 
 
tianjinfeng1983
 

头衔:
等级:3 排长
帖数:247
金钱:2621
积分:0
注册:2004-10-27
       ↓帖子字号 第 3 楼

--------------------------------------------------------------------------------

 
PB实现永久保存注册表数据
  注册表类型分为基于对象存储的注册表和基于HIVE的注册表,在定制内核的时候只能选择其中一种。从理论上讲这两种注册表都能够实现永久保存注册表数据,但是采用不同的类型会影响CE的启动顺序和启动速度,还会影响内存的使用量。我还是趋向于采用基于HIVE的注册表来实现永久保存注册表数据,这也是一个发展趋势。在讲解之前先简单描述如果CE采用基于HIVE的注册表,那么在启动时如何加载已经保存的注册表数据:
nk.exe执行,启动filesys.exe。
filesys.exe加载引导HIVE,此时引导HIVE位于nk.bin解压之后的文件中。
filesys.exe启动device.exe,之后处于等待状态,等待device.exe将包含系统HIVE的文件系统和存储设备的驱动程序加载完毕。而这个文件系统和存储设备的驱动程序存在于引导HIVE中。
device.exe加载上述所说的文件系统驱动程序和存储设备驱动程序,使之开始工作。之后device.exe处于等待状态。
filesys.exe被唤醒,加载并且安装系统HIVE。之后filesys.exe处于等待状态。
nk.exe按照系统HIVE的信息开始执行初始化工作。其中包括加载驱动程序和启动一些应用程序。其中加载驱动程序一般由device.exe执行,而启动应用程序由filesys.exe执行。这时device.exe和filesys.exe已经被唤醒。
  因为引导HIVE和系统HIVE肯定有重复的地方,所以可能出现重复加载了驱动程序或者重复启动了应用程序。为此,CE允许在描述驱动程序的注册表信息中加入防止重复的标志,而应用程序可以采用事件对象来防止重复启动,如device.exe。
下面讲述如何设置基于HIVE的注册表(假如保存系统HIVE的是FAT文件系统):
在PB中加入"Hive-based Registry",如果是Geode平台,再加入BSP_ENABLE_FSREGHIVE环境变量。
打开platform.reg,找到如下信息:
; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE/init/BootVars]
   "SYSTEMHIVE"="Documents and Settings//system.hv"
   "PROFILEDIR"="Documents and Settings"
   "Start DevMgr"=dword:0
IF BSP_ENABLE_FSREGHIVE  
   "Start DevMgr"=dword:1
ENDIF
; END HIVE BOOT SECTION

"SYSTEMHIVE"的值为系统HIVE文件的路径。"Start DevMgr"是一个布尔值,指示是否开始就执行设备管理器device.exe,按照CE帮助文档的说法,只有想把系统HIVE存储在对象存储中才在此设置为0,所以一般都要设置为1。
如果是多用户,可以在上述的注册表位置下输入"DefaultUser"="",指定默认的用户名。如果是单用户系统,可以不设置。
保证将包含系统HIVE的文件系统驱动程序的注册表信息和存储设备的驱动程序的注册表信息被包含在"; HIVE BOOT SECTION"和"; END HIVE BOOT SECTION"之间,在这两个语句之间的注册表数据全部属于引导HIVE。假如我们将系统HIVE文件system.hv存放在硬盘上,并采用FAT文件系统。那么就要将[HKEY_LOCAL_MACHINE/System/StorageManager/FATFS]
和 [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]移动到"; HIVE BOOT SECTION"下。
在"; HIVE BOOT SECTION"和"; END HIVE BOOT SECTION"之间的所有驱动程序的注册表信息中都加入下列一个标志:
"Flags"=dword:1000
这个标志是一个位掩码,它可以和其它已经存在的"Flags"或运算。值1000表示此驱动程序只加载一次,这样device.exe就不会把当前驱动程序加载两次了。
在包含系统HIVE的存储设备的驱动程序的注册表信息中,加入如下标志(假设是硬盘):
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]
"MountFlags"=dword:2
这个标志表示这个存储设备包含系统HIVE文件。
  按照如上所述设置后的内核就能实现永久存储注册表数据了。对于保存注册表数据的执行动作在此必须阐述清楚:
  正常情况下,CE能够保证重要的注册表数据能够从内存刷到(Flush)永久存储器上。但是这并不能完全保证所有数据都能完整地保存而不丢失,所以要保证万无一失,应该主动地调用RegFlushKey函数强制将内存中的数据刷到永久存储器上。这个函数的参数只有一个,就是注册表分支。CE还增加一个注册表项(如下所示),它的作用是每当函数RegCloseKey被调用时都自动调用RegFlushKey函数。
[HKEY_LOCAL_MACHINE/init/BootVars]
        "RegistryFlags"=dword:1
  如果CE在启动过程中发现系统HIVE出现错误,它会自动删除文件并创建一个默认的系统HIVE文件,如果出现下面的注册表项,说明发生了这种事情。
[HKEY_LOCAL_MACHINE]
         "RegPersisted"=dword:1

路漫漫其修远兮
  2005-1-3 17:51:17  [广告] 嵌入式数码相机模块,自带压缩功能,易于单片机接口。   评帖 

 

七: 不能出来CF卡问题解决


   是由于默认的ATAPI/IDE Storage Block Driver 生成有问题。在platform.reg 中修改如下:
    ;IF BSP_NOIDE !
 ; This registry setting sets up the template for PCI IDE support
 ;#include "$(DRIVERS_DIR)/block/atapi/geodeide.reg"
 [$(PCI_BUS_ROOT)/Template/GenericIDE]
 "Prefix"="IDE"
 "Dll"="atapi.dll"
 "Order"=dword:2
 "Class"=dword:01
 "SubClass"=dword:01
 "ConfigEntry"="GenericConfig"
 "IClass"=multi_sz:"{CDDC3621-3512-4b3f-BB6F-B4DD5E061795}"
 [$(PCI_BUS_ROOT)/Template/GenericIDE/Device0]
 "Prefix"="DSK"
 "Dll"="atapi.dll"
 "Settings"=dword:A
 "DeviceId"=dword:0
 "Ioctl"=dword:4
 "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
 [$(PCI_BUS_ROOT)/Template/GenericIDE/Device2]
 "Prefix"="DSK"
 "Dll"="atapi.dll"
 "Settings"=dword:A
 "DeviceId"=dword:2
 "Ioctl"=dword:4
 "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
 IF BSP_NOIDE !
 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Atapi]
 "Prefix"="IDE"
 "Dll"="atapi.dll"
 "FSD"="fatfsd.dll"
 ; IDE Primary master
 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Atapi/Device0]
 "Irq"=dword:0e
 "Prefix"="DSK"
 "Dll"="atapi.dll"
 "DeviceId"=dword:0
 "Ioctl"=dword:4
 "ConfigEntry"="GenericConfig"
 "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
 ; "Flags"=dword:1000
 [HKEY_LOCAL_MACHINE/System/StorageManager/FATFS]
 "CacheSize"=dword:ffffffff
 [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile]
 "Name"="IDE Hard Disk Drive"
 "Folder"="CompactFlash"
 [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/HDProfile/FATFS]
 "MountFlags"=dword:2
 "EnableCacheWarm"=dword:0
 ENDIF BSP_NOIDE !

八、Hive-base Registry 问题的解决
   在platform.reg 中修改如下
   [HKEY_LOCAL_MACHINE/init/BootVars]
   "SYSTEMHIVE"="Documents and Settings//system.hv"
   ;"PROFILEDIR"="Documents and Settings"
   "Start DevMgr"=dword:1
   "DefaultUser"="Default"
   在platform.reg 于common.reg 中搜索MountFlags, 令MoutFlags=2;

九、分辨率问题的解决

   在common.reg中搜索 GDI/Drivers 修改如下
 ;640x480x16
 IF BSP_DISPLAY_RFLAT
 [HKEY_LOCAL_MACHINE/System/GDI/Drivers]
      "Display"="ddi_rflat.dll"
     "CxScreen"=dword:280
     "CyScreen"=dword:1E0
     "BPP"=dword:10
     "Freq"=dword:3C
 ENDIF

 IF BSP_DISPLAY_FLAT
 [HKEY_LOCAL_MACHINE/System/GDI/Drivers]
      "Display"="ddi_flat.dll"
     "CxScreen"=dword:280
     "CyScreen"=dword:1E0
     "BPP"=dword:10
     "Freq"=dword:3C
 ENDIF
十、 添加4个串口
    在plartform.reg 中修改原来串口的定义为
 IF BSP_NOSERIAL !
 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial]
     "SysIntr"=dword:14
     "IoBase"=dword:03F8
     "IoLen"=dword:8
     "DeviceArrayIndex"=dword:0
     "Prefix"="COM"
     "Dll"="Com16550.Dll"
     "Order"=dword:0
     "Priority"=dword:0

 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial2]
     "SysIntr"=dword:13
     "IoBase"=dword:02F8
     "IoLen"=dword:8
     "DeviceArrayIndex"=dword:0
     "Prefix"="COM"
     "Dll"="Com16550.Dll"
     "Order"=dword:0
     "Priority"=dword:0

 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial3]
     "SysIntr"=dword:1B
     "IoBase"=dword:03E8
     "IoLen"=dword:8
     "DeviceArrayIndex"=dword:0
     "Prefix"="COM"
     "Dll"="Com16550.Dll"
     "Order"=dword:0
     "Priority"=dword:0

 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial4]
     "SysIntr"=dword:1A
     "IoBase"=dword:02E8
     "IoLen"=dword:8
     "DeviceArrayIndex"=dword:0
     "Prefix"="COM"
     "Dll"="Com16550.Dll"
     "Order"=dword:0
     "Priority"=dword:0

 [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial/Unimodem]
     "Tsp"="Unimodem.dll"
     "DeviceType"=dword:0
     "FriendlyName"=LOC_FRIENDLYNAME_SERIAL
     "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
 ENDIF BSP_NOSERIAL !

   并且修改C:/WINCE420/PUBLIC/COMMON/OAK/CSP/I486/OAL/debug.c 以防止wince4.2占用com1
  void OEMInitDebugSerial(void)
  {
    pBootArgs = (BOOT_ARGS *) ((ULONG)(*(PBYTE *)BOOT_ARG_PTR_LOCATION) | 0x80000000);

    if ( ! pBootArgs->ucBaudDivisor ) {
        pBootArgs->ucBaudDivisor = 6; // Default to 19.2 if nothing specified.
    }
    // 添加这一行
    pBootArgs->ucComPort =0 ;
    switch ( pBootArgs->ucComPort ) {
    case 1:
        IoPortBase = (PUCHAR)COM1_BASE;
        break;

    case 2:
        IoPortBase = (PUCHAR)COM2_BASE;
        break;

    case 3:
        IoPortBase = (PUCHAR)COM3_BASE;
        break;

    case 4:
        IoPortBase = (PUCHAR)COM4_BASE;
        break;

    default:
        IoPortBase = 0;
        break;

    }

    if ( IoPortBase ) {
        WRITE_PORT_UCHAR(IoPortBase+comLineControl, 0x80);   // Access Baud Divisor
        WRITE_PORT_UCHAR(IoPortBase+comDivisorLow, pBootArgs->ucBaudDivisor);
        WRITE_PORT_UCHAR(IoPortBase+comDivisorHigh, 0x00);
        WRITE_PORT_UCHAR(IoPortBase+comFIFOControl, 0x01);   // Enable FIFO if present
        WRITE_PORT_UCHAR(IoPortBase+comLineControl, 0x03);   // 8 bit, no parity
        WRITE_PORT_UCHAR(IoPortBase+comIntEnable, 0x00);     // No interrupts, polled
        WRITE_PORT_UCHAR(IoPortBase+comModemControl, 0x03);  // Assert DTR, RTS
    }

    OEMWriteDebugString(TEXT("Debug Serial Init/r/n"));

    // Turn on ether debug zones here if you need to debug edbg.
    // EdbgSetDebug(0xffff);
 }


十一、 重起机器
x86的机器,如cepc
__asm
{
cli ;Disable Interrupts
mov al, 0FEh;Reset CPU
out 064h, al
jmp near $ ;Should not get here
}


2 arm的机器,如ppc,smartphone
static void ResetWithSetSystemPowerState()
{
typedef DWORD (*SetSystemPowerStateFunction)(LPCWSTR pwsSystemState, DWORD StateFlags, DWORD

Options);
HMODULE hModule = ::LoadLibrary(TEXT("Coredll.dll"));

SetSystemPowerStateFunction f = (SetSystemPowerStateFunction)
::GetProcAddress(hModule, TEXT("SetSystemPowerState"));

#ifndef POWER_STATE_RESET
#define POWER_STATE_RESET DWORD(0x00800000)
#endif

f(NULL, POWER_STATE_RESET, 0);
::FreeLibrary(hModule);
}
当然,对x86也适用,只要是WinCE 4.0以上的版本。

十二、试程序自动运行
 common.reg中修改
 [HKEY_LOCAL_MACHINE/init]
  ; @CESYSGEN IF CE_MODULES_SHELL
         "Launch10"="shell.exe"
  "Launch80"="//CFCARD//NewMain.exe"  // 自己添加的
 ; @CESYSGEN ENDIF
 发表于: 2004-04-04 04:06 PM    发表主题: 让程序在Windows CE系统启动时自动运行-两种方法  

 --------------------------------------------------------------------------------
 
 一、快捷方式
 假定Windows CE.NET目标工程为CEPC类型,目录为E:/Project/MyWinCE,并且工程已经Build(或者Rebuild)成功;
 假定Windows CE.NET的应用为MyApp.exe
 1.将MyApp.exe复制到E:/PROJECTS/MyWinCE/RelDir/CEPC_X86Release目录下;
 2.修改MyWinCE工程的project.bib文件,在FILES Section添加
 MyApp.exe $(_FLATRELEASEDIR)/MyApp.exe NK H
 3.创建快捷方式文件MyApp.lnk(文本文件),文件内容如下:
 10#/Windows/MyApp.exe
 MyApp.lnk文件也放入E:/PROJECTS/MyWinCE/RelDir/CEPC_X86Release目录下
 4.修改MyWinCE工程的project.bib文件,在FILES Section添加
 MyApp.lnk $(_FLATRELEASEDIR)/MyApp.lnk NK H
 5.修改MyWinCE工程的project.dat文件,添加如下内容:
 Directory("/Windows/Startup"):-File("MyApp.lnk","/Windows/MyApp.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:/Project/MyWinCE/RelDir/CEPC_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
 假定程序在硬盘的某个位置,如/硬盘/MyApp/MyApp.exe,那么只需创建快捷方式文件,链接指向/硬盘/MyApp/MyApp.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。

 最后进行编辑的是 aftersound on 2004-04-05 06:59 PM, 总计第 1 次编辑
 
 返回页首      
 
 
 aftersound
 中级会员


 注册时间: 2003-10-08
 帖子: 49

  发表于: 2004-04-05 06:50 PM    发表主题: 让程序在Windows CE系统启动时自动运行-两种方法  

 --------------------------------------------------------------------------------
 
 二、注册表
 1.配置project.bib或者添加User Feature,以将<你的程序>含入NK.bin
 请参考《让程序在Windows CE系统启动时自动运行-快捷方式》
 2.配置platform.reg或者common.reg,在[HKEY_LOCAL_MACHINE/init]段添加如下类似内容:
 "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 Disk/MyApp/MyApp.exe"
 "Depend80"=hex:...
 4.<你的程序>启动失败不会影响系统
 5.参考《让程序在Windows CE系统启动时自动运行-快捷方式》
 .相关PB4.2帮助主题
 Adding a File to an Operating System
 How to Configure the Registry to Run an Application at Startup

十三、EVC远程调试时
你用EVC远程调试时首先利用platform Builder创建自己的Windows CE
平台时把Platform Manager下的Base Engine组件加入自己的平台另外还
必须添加一个Transports的通讯支持.例如选择tcp/ip在Build完平台以后,
可以通过网卡download到目标平台,这时导出SDK安装到EVC中,在EVC中Tools菜单下,
有configure platform manger,选择你刚刚导出的SDK的设备,选择属性,
在传输协议中选择tcp/ip,服务中选择manual server.
在debug应用程序中会提示用户一个命令序列,
这时在目标设备中的命令行下完整的输入提示的命令序列,
这样就可以利用EVC来远程调试了!(注意开发设备和目标设备必须在同一个网段上!

十四、字体大小
修改注册表项
[HKEY_LOCAL_MACHINE/SYSTEM/GWE/Menu/BarFnt]
    "Ht"=dword:fffffff0
[HKEY_LOCAL_MACHINE/SYSTEM/GWE/Menu/PopFnt]
    "Ht"=dword:fffffff0

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值