wince基础学习

从网友那粘贴过来的,只是为了和大家分享学习一下:


WinCE BSP中的DAT文件介绍
DAT文件用于在WinCE启动的时候,定义文件系统的结构,也就是定义有哪些文件夹,哪些文件在什么位置等。每次冷启动的时候,Filesys模块会根据.dat文件中的内容来创建目录以及目录下的文件。


 


在BSP中我们可以找到platform.dat。在创建一个WinCE的工程以后,可以在工程目录下面找到project.dat。可以在这两个.dat文件中定义我们所需的根目录以及相应的子目录和文件,当然Windows文件夹及其包含的子文件夹除外。用户可以通过定义快捷方式的方法来引用Windows目录下的文件。


 


关于DAT文件的具体格式,来举个例子:


root:-Directory("My Documents")


root:-Directory("Program Files")


Directory("/Program Files"):-Directory("My Projects")


Directory("/Program Files"):-Directory("Accessories")


Directory("/Program Files"):-Directory("Communication")


Directory("/Program Files/My Projects"):-File("My Project Program", "/Windows/Myproj.exe")


root:-File("/control.lnk", "/Windows/control.lnk")


 


简单解释一下,上面的内容是先创建My Documents和Program Files两个根目录,然后在Program Files下面创建My Projects,Accessories和Communication三个子目录,然后拷贝被定义在Windows目录下的存在于ROM中的Myproj.exe文件到My Projects目录下面,且名字为My Project Program。这里需要说明的一点就是,像Myproj.exe这样的文件都是从ROM中拷贝出来的,所以必须在BIB文件中包含了该文件。最后一行意思是在根路径下创建control.lnk,该文件来自ROM中的control.lnk文件,是一个快捷方式文件。


 


对上面的一些格式做个解释:


 


1.Root Directory的语法格式:


root:[-Directory("dir_name")] [-Permdir("dir_name")]


[-File("target_filename", "source_location")]


 


root:表示根目录。


-Directory(“dir_name”):定义根目录下的目录名。


-Permdir(“dir_name”):定义一个永久的目录,用户是不能通过RemoveDirectory函数删除的。


-File(" target_filename", " source_location"):定义一个目标文件,该文件从ROM中拷贝过来。target_filename为目标文件的文件名,source_location为ROM中的文件,指Windows目录下的某路径下的文件名。


 


 


2.Directory的语法格式:


Directory("dir_name"):[-Directory("dir_name")]


[-File("target_filename", "source_location")]


 


Directory(“dir_name”):表示目录名。”/”表示根目录。


-Directory(“dir_name”):表示目录下的路径,就是子目录。


-File(" target_filename", " source_location"):定义一个目标文件,该文件从ROM中拷贝过来。target_filename为目标文件的文件名,source_location为ROM中的文件,指Windows目录下的某路径下的文件名。


 
 WinCE BSP的BIB文件介绍
在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File。在WinCE的编译过程中会用到BIB文件,应该是在最后的Makeimg阶段。所有的BIB文件会被合并成CE.bib文件,然后Romimage.exe会根据BIB文件中的描述来决定哪些文件最终被包含到WinCE image中。当然,BIB文件还决定了WinCE设备内存的分配,其中定义了WinCE image占用哪块内存,Framebuffer占用哪块内存等。


 


在BIB文件中分为4大项:MEMORY项,CONFIG项,MODULES项和FILES项。下面分别作个解释:


MEMORY:定义了内存分配的相关设置,一般在BSP中的config.bib文件中。


CONFIG:在最后的Makeimg阶段,为Romimage.exe提供一些生成WinCE image的配置属性。该项是可选的,一般也在BSP中的config.bib文件中定义。


MODULES:定义了一些会被打包到WinCE image中的模块或者文件,比如dll,exe等。这些文件会被Romimage.exe标记为加载到RAM中或者XIP。我们可以在这里添加自己的WinCE应用程序或者模块,但是不要添加Managed Binaries,一般指.NET的程序。


FILES:定义了一些操作系统会用到的其他的文件,比如字体文件,图片等。这些文件也会在WinCE运行的时候被加载到RAM中。


 


 


下面会详细介绍上面的4大项:


 


1.       MEMORY项


一般都在config.bib文件中定义,开头会有MEMORY的字样。这里定义了为WinCE image以及其他模块预留的RAM,同时也定义了WinCE可以使用的RAM。具体格式如下:


MEMORY
    NAME    Start Address        Memory Size        Type
 
NAME:该内存区域的名字,必须是唯一的。
Start Address:该内存区域的起始地址,用十六进制表示。
Memory Size:该内存区域的大小,用十六进制表示。
Type:内存区域的类型。包涵的多种类型如下。


 


类型值
描述
FIXUPVAR
用于在WinCE编译的Makeimg阶段,就初始化一个内核中的全局变量。
NANDIMAGE
当创建了一个使用BinFS的image的时候,NAND设备上的WinCE kernel重定向到RAM中的区域,当系统访问该区域的时候,BinFS会负责访问Nand设备上相应的位置,并返回数据给系统,实际上就是在Nand设备上面实现了XIP的功能。
RAM
定义了被WinCE系统使用的RAM区域,这块内存必须是连续的,这里有一点要注意就是从硬件的角度来说,这块内存不能跨越两片SDRAM,也就是说整个区域空间必须在一片硬件SDRAM上。
RAMIMAGE
定义了一块内存区域用于加载WinCE image,实际上WinCE启动以后,image会被拷贝到这块内存区域上面运行。一个image只能有一个连续的RAMIMAGE区域。
RESERVED
这块内存区域会被预留出来,一般用于Frambuffer或者是DMA Buffer,或者是一块共享内存用于EBOOT传递参数给WinCE系统。
EXTENSION
定义了一块WinCE image中的区域作为ROMHDR extension的数据区域。
 


 


2.CONFIG项


一般在config.bib文件中定义,定义了一些额外的配置参数,其中一些对于WinCE image来说也很重要。具体格式如下;


CONFIG
    ITEM=Parameter
 
ITEM
描述
AUTOSIZE
允许未被使用的WinCE image的RAM被用作WinCE系统的RAM。默认值为ON。
COMPRESSION
允许Romimage.exe压缩WinCE image中的可写入部分。默认值为ON。
BOOTJUMP
定义了跳转跳转页在RAMIMAGE空间的地址。而不是默认情况下的RAMIMAGE的首地址。默认值为NONE。
FSRAMPERCENT
定义了文件系统使用的内存的百分比。默认值为0x80808080。
Byte 0:第一个2MB中,每1MB所包含的4KB的倍数。
Byte 1:第二个2MB中,每1MB所包含的4KB的倍数。
Byte 2:第三个2MB中,每1MB所包含的4KB的倍数。
Byte 3:剩下的内存中,每1MB所包含的4KB的倍数。
KERNELFIXUPS
定义了Romimage.exe是否重新定向内核的可写入区域。默认值为ON,内核的可写入区域被重新定向到RAMIMAGE的起始位置。
OUTPUT
定义了最终生成的image存放的路径。默认为%_FLATRELEASEDIR%。
PROFILE
定义了是否在WinCE image中包含profiler的结构和符号。默认值为OFF。
RESETVECTOR
重新指定跳转页的位置,一般针对MIPS芯片从0x9FC00000开始引导的问题。
ROMFLAGS
内核标记位,可以进行组合:
0x01表示禁用按需分页。
0x02表示禁用完全内核模式,完全内核模式表示所有的线程都运行在内核模式。
0x10表示只信任ROM MODULES中的模块。
0x20表示停止刷新TLB。
0x40表示按照/base链接选项中的地址加载DLL。
ROMSTART
指WinCE image在内存中的起始地址。
ROMSIZE
指WinCE image的大小。
ROMWIDTH
指数据总线的宽度。
ROMOFFSET
指定一个偏移量来修改.bin文件中的每一个记录的地址。一般用于ROM中的.bin文件加载到RAM来运行的情况,主要是表示存储.bin的位置和运行.bin的位置不一样。
SRE
使Romimage.exe产生一个.sre文件。默认值为OFF。
X86BOOT
定义是否插入一条跳转指令,在x86复位向量地址的时候。
 


 


3.MODULES项和FILES项


该项列出了所有被包含在WinCE image中的模块以及文件,以及这些模块和文件以什么方式被加载到内存中。具体格式如下:


MODULES
    Name    Path            Memory            Type
 
Name:模块的名字,比如一个dll或者exe文件的文件名。
Path:路径,一般都是WinCE的工程的Release目录。
Memory:指定该模块被放在哪个区域,一般都是NK区域。
Type:定义了文件的类型。具体如下:
 


类型
描述
S
系统文件。
H
隐藏文件。
R
只压缩模块的资源部分。
C
压缩模块的所有部分。
D
禁止调试。
N
模块是不可信任的。
P
告诉Romimage.exe不需要检查CPU的类型。
K
告诉Romimage.exe必需固定该模块的内核地址。有该标记的模块只能被LoadKernelLibrary函数加载。
X
告诉Romimage.exe对该模块签名。
M
运行时加载整个模块,不要按需分页。
L
告诉Romimage.exe不要分离ROM DLL。
 


一般FILES项的Type只支持S,H,N,D几个类型,而MODULES项的Type是都支持的。
 
举个例子吧:
    INIT.EXE            %_WINCEROOT%/RELEASE/INIT.EXE            NK    SH
    MYDLL.DLL        %_WINCEROOT%/RELEASE/MYDLL.DLL       NK    SHC
 
 
对于BIB文件来说同样支持“条件编译”,我们可以通过设置环境变量来选择性地将某些模块打包到WinCE image中。一般在BSP中,对于一些驱动模块的环境变量我们IF来进行条件判断。而对于WinCE的系统模块来说,一般都是SYSGEN变量,应该使用@CESYSGEN IF来判断。
 
 
我们在BSP的开发中最常见的主要就是eboot.bib,config.bib,platform.bib和project.bib。下面简单介绍一下:
project.bib:该文件主要自创建的WinCE工程中所需的一些文件。
platform.bib:该文件包含了和硬件平台相关的文件,主要以驱动程序为主。
config.bib:该文件描述了WinCE系统的内存的配置。
eboot.bib:该文件描述了WinCE的eboot的内存的配置。
 
还有其他的一些bib文件,在WinCE系统编译后都会背拷贝到工程的release目录下面。比如common.bib,ie.bib等。这些文件列出了WinCE的组件相关的文件,根据用户订制的系统,会被选择性的打包到WinCE image中。
 


 WinCE BSP中的Dirs文件和Sources文件
1.  Dirs文件


关于Dirs文件,就是指定要编译的路径,这个地球人都知道。还是简单介绍一下。按照文档上面介绍有三种定义:DIRS,DIRS_CE和OPTIONAL_DIRS。


 


DIRS:就是指定要编译的目录。


DIRS_CE:只有目录下的源代码用于WinCE的映像文件时,才编译该目录。


OPTIONAL_DIRS:指定可以选择编译的目录。比如:OPTIONAL_DIRS=proj1,如果想编译proj1目录,可以设置BUILD_OPTIONS=proj1,然后运行build命令就可以了。


 


举个例子:


DIRS= common /


            drivers /
            oal /
            bootloader
表示需要编译common,drivers,oal和bootloader目录。
 
 
DIRS=* 
表示编译当前的所有目录。
 
 
 
2. Sources文件
在WinCE BSP中会看到很多sources文件,一般会和源代码放在同一个目录,当然不是绝对的。这些sources文件里面就是定义了一些宏,主要用于告诉Build.exe在编译源代码的时候应该如何编译和链接,告诉Nmake.exe如何编译源代码以及最后生成什么类型的文件。
 
下面具体介绍一下:
 
TARGETNAME:最后编译完后生成的目标文件的名字,不包括扩展名。
TARGETTYPE:生成的文件的类型。具体值如下:
        LIBRARY,一个.lib文件
        DYNLINK,一个.dll文件
        PROGRAM,一个.exe文件
RELEASETYPE:该宏设置两个环境变量RELEASEDIR和RELEASELIBDIR,就是设置编译后生成文件存放的路径。具体值如下:
        PLATFORM,生成的文件在PLATFORM/<BSP NAME>/<Target>
        LOCAL,生成的文件在当前路径下
        CUSTOM,生成的文件在TARGETPATH指定的位置
        MANAGED,生成的文件在%_PROJECTROOT%/OAK/<Target>/Managed
        OAK, SDK, DDK,生成的文件在%_PROJECTROOT%/Oak/<Target>  
TARGETPATH:当上面的RELEASETYPE=CUSTOM的时候,该宏指定路径
SOURCELIBS:静态链接。函数的实体被链接过来,生成一份拷贝
TARGETLIBS:动态链接。函数的地址被链接过来,系统执行时会加载该库
INCLUDES:指定额外的要搜索的头文件的路径
SOURCES:指定要被编译的文件
ADEFINES:指定汇编器要使用的参数
CDEFINES:指定编译器要使用的参数
LDEFINES:指定连接器要使用的参数
RDEFINES:指定资源编译器Rc.exe的参数
DLLENTRY:指定dll的入口函数
DEFFILE:指定该模块的.def文件
EXEENTRY:指定可执行文件的入口函数
SKIPBUILD:不做实际的build操作,直接返回成功
WINCECOD:编译后生成一个.cod的汇编文件,用于查看汇编代码调试
WINCECPU:用于说明为指定的CPU编译,这样被编译出来的目标文件会被放在_TGTCPU环境变量所指定的子目录下面,一般该宏在sources.cmn中定义。
WINCEMAP:编译后生成一个.map文件,用于调试
WINCEOEM:设置该值表示需要使用WinCE下的一些公用的库和头文件,该值一般在BSP中的sources.cmn中定义。
WINCETARGETFILE0:用于告诉编译系统在编译当前路径下的源码文件之前,要先由Build.exe编译的目标文件。
WINCETARGETFILES:用于告诉编译系统在链接当前路径下所有的目标文件之前,要先由Build.exe编译的目标文件。
WINCE_OVERRIDE_CFLAGS:用于定义用户自己的编译器参数取代默认的编译器参数。
 
 
举个例子:
TARGETNAME=serial_smdk2410
TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM
TARGETLIBS=$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /
        $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/ceddk.lib
 
SOURCELIBS=$(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/serpddcm.lib /
        $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/com_mdd2.lib
 
DEFFILE=serial.def
DLLENTRY=_DllEntryCRTStartup
 
SOURCES= ser_smdk2410.cpp /
        pdds3c2410_ser.cpp
 
需要编译的文件为ser_smdk2410.cpp和pdds3c2410_ser.cpp,DEF文件为serial.def,DLL的入口函数是_DllEntryCRTStartup,静态连接serpddcm.lib和com_mdd2.lib两个库,动态链接coredll.lib和ceddk.lib两个库,最终编译为dll文件,文件名为serial_smdk2410.dll。
 
 
最后总结一下,Dirs文件会和Sources文件配合使用,但是他们不可能存在同一个目录下面。Dirs文件指定编译目录,Sources文件指定如何编译。






 WinCE BSP中的REG文件和DB文件


1.       REG文件
注册表文件,这个和Windows操作系统中使用的注册表文件基本一样,在BSP中主要是Platform.reg,该注册表文件描述了和硬件平台相关的配置,大部分是用来描述驱动的相关信息。
注册标的格式如下:
[KEY1]
"ValueName1"={Value Type}:{data}
"ValueName2"={Value Type}:{data}
[KEY2]
"ValueName1"={Value Type}:{data}
 
其中Value Type和data相互对应,不同的Value type对应不同的data,具体如下:
Value Type
data
 
REG_SZ
”my string”
字符串类型
REG_DWORD
dword:NNNN(hex number)
DWORD类型
REG_MULTI_SZ
multi_sz:”my_string_1”,”my_string_2”
多字符串类型
REG_BINARY
hex:xx,xx,xx
二进制类型
HEX
hex(xxxxxxxx):xx,xx,xx,xx
十六进制类型
 
在注册表中,同样可以使用IF/ENDIF来进行条件包含,其中条件可以是一个WinCE中的环境变量,还可以在该环境变量后加一个空格再加一个惊叹号(“!”),表示没有设置或者不等于的情况,比如:
IF environment variable [= value] [!]
[KEY1]
"ValueName1"={Value Type}:{data}
"ValueName2"={Value Type}:{data}
[KEY2]
"ValueName1"={Value Type}:{data}
ENDIF
 
如果注册表某一行是以分号(“;”)开始,表示这行是被注释掉的。当然也有一些例外,比如在支持Hive注册表的时候,如下:
; HIVE BOOT SECTION
 ... reg data...
; END HIVE BOOT SECTION
 
关于Hive注册表,以前介绍过,这里不多说了。我们在注册表中无非就是创建,删除key,赋值等操作。
创建一个注册表key:
[Key1]
"ValueName"="Value Type"
 
删除一个注册表key:
[-KEY1]
 
删除一个注册表值:
"ValueName1"=-
 
和BSP以及硬件平台相关的注册表配置都放在platform.reg文件中,和WinCE工程相关的配置应该放在project.reg文件中。
 
 
2.       DB文件
数据库文件,同样也有platform.db和project.db两个文件。但是很少会被用到,特别是platform.db,这些数据库文件都是基于WinCE的对象存储的,会在WinCE启动以后被加载到RAM中,掉电就会丢失,具体格式如下:
Database : "db_name" : hex_type : num_sort_order : <sort order specifier> 1
Record :
Field : field_hex_propid : value
End
End Database
 
可以使用上面的格式在.db文件中添加数据库记录,由于本人从未使用过,所以对上述格式没有太多了解,相信搞过数据库的人士,看看上面的格式可能就明白了。




WinCE Boot方式及 Bootloader架构概述


Bootloader的概念就是一个用于引导的loader,在系统上电的时候最先被运行,然后对硬件平台做最基本的初始化,最后把操作系统加载起来。不同的嵌入式操作系统都有自己的Bootloader,但是本质功能都是一样的。


在WinCE中用的最多的就是EBOOT,是一个基于网络的Bootloader,而且可以根据需要带有命令行菜单功能,网络调试功能以及文件系统的相关功能。在这里我只谈ARM平台的引导,因为其他架构的CPU我没用过,就不吹牛了。一般基于不同的硬件设计,会有不同的引导方式:
 
NORFlash Boot:
一般ARM处理器的片选0都会接有NORFlash,这样在ARM上电以后,会从0地址开始执行程序,也就是从NORFlash的0地址开始执行。所以把EBOOT烧到NORFlash的0地址开始的地方,这样在上电以后,EBOOT开始执行,可以在NORFlash里面执行,也可以自拷贝到SDRAM中执行。最后加载WinCE image并运行。
 
NANDFlash Boot with EBOOT:
由于NORFlash容量小,价格贵,现在很多ARM处理器支持NandFlash引导。不同厂家的处理器对Nandflash的引导略有区别,具体要看datasheet。但是本质就是先从Nandflash中读出一个小的Loader来运行,这个Loader再从Nandflash中加载EBOOT到SDRAM中运行,最后EBOOT加载WinCE image,就是NK.bin。
 
NANDFlash Boot without EBOOT:
如果在NandFlash引导的时候不需要EBOOT,也可以不用EBOOT。这样就是系统启动后从Nandflash中加载一个小的Loader,小的Loader对硬件系统作基本的初始化,然后直接加载WinCE image,一般应该是NK.nb0,然后运行。
 
 
这里来说一下NK.bin与NK.nb0,两个不同的WinCE image。
 
NK.nb0:就是一个可以直接运行的WinCE映像文件,直接拷贝到SDRAM中就可以运行。
NK.bin:被称为Windows CE binary image data format文件格式,是一种包含了多个独立纪录(Section)的二进制文件。在加载的时候,需要分别加载,不同的Section加载到不同的地方。所以NK.bin需要Bootloader进行解释性加载。但是他的Size会比NK.nb0小。可以使用viewbin命令查询NK.bin中的纪录信息。
            viewbin –rec nk.bin
 
 
前面已经讲过了一般系统会使用到的引导方式,下面介绍一下EBOOT。在WinCE中EBOOT一个作用可以加载WinCE image,还可以通过网络配合Platform Builder下载WinCE image进行调试。在开发一个新的BSP的时候,首先会基于一个相似的平台的BSP进行克隆,然后要做的就是要开发和调试EBOOT了,EBOOT的架构如图:


 
BLCOMMON:相当于EBOOT的一个基本框架,主要完成bootloader相关内存的分配,解析NK.bin文件并进行效验,初始化平台,通过网络下载image等功能。
OEM Code:主要是基于硬件平台,为BLCOMMON提供相应的接口函数,帮助完成相应的功能。
Eboot:一个小的网络协议栈,为网络下载image提供DHCP,TFTP,UDP等网络服务功能。
Network Driver:硬件平台的网络驱动部分,支持上层的网络功能。
Bootpart:为Flash设备提供分区功能,bootloader可以创建一个BinFS分区和一个文件系统分区。还可以用它来创建一个引导分区用来存放引导参数。

Flash Memory:硬件平台的Flash驱动。



http://blog.csdn.net/nanjianhui/article/details/3065291


ATHEROS The Licensed Software includes software developed by Atheros Communications, Inc. (“Atheros”). You must separately obtain rights beyond evaluation and demonstration in connection with the Licensed Software from Atheros. ARM The Licensed Software may include software developed by ARM, Ltd. The software may only be used with an ARM microprocessor, which includes the Freescale i.MX and MXC product lines. CODEC STANDARDS This software includes codec standards for encoding and decoding audio and visual content. You are not licensed for any implementation or distribution of the technology in any commercial product or service such as runtime images that you develop using this software. You are responsible for determining and securing these license rights. CSR The Licensed Software includes software and hardware developed by Cambridge Silicon Radio, Inc. (“CSR”). You must separately obtain rights beyond evaluation and demonstration in connection with the Licensed Software from CSR. AVC/H.264 VISUAL STANDARD. This software may include AVC/H.264 video decoding technology, MPEG LA, L.L.C. requires this notice: THIS PRODUCT IS LICENSED UNDER THE AVC/H.264 PATENT PORTFOLIO LICENSES FOR THE PERSONAL AND NON-COMMERCIAL USE OF A CONSUMER TO (A) ENCODE VIDEO IN COMPLIANCE WITH THE AVC/H.264 STANDARD (“AVC/H.264 VIDEO”) OR (B) DECODE AVC/H.264 VIDEO THAT WAS ENCODED BY A CONSUMER ENGAGED IN A PERSONAL AND NON-COMMERCIAL ACTIVITY AND/OR WAS OBTAINED FROM A VIDEO PROVIDER LICENSED TO PROVIDE AVC/H.264 VIDEO. NO LICENSE IS GRANTED OR WILL BE IMPLIED FOR ANY OTHER USE. If you have questions about the AVC/H.264 visual standard, please contact MPEG LA, L.L.C., 250 Steele Street, Suite 300, Denver, Colorado 80206; www.mpegla.com. MPEG-2 VISUAL STANDARD. This software includes MPEG-2 visual decoding technology. MPEG LA, L.L.C. requires this notice: USE OF THIS PRODUCT IN ANY MANNER THAT COMPLIES WITH THE MPEG 2 VISUAL STANDARD IS PROHIBITED, EXCEPT FOR USE DIRECTLY
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值