BCM53118KQLEG

地区:广东 深圳
认证:

深圳市正纳电子有限公司

VIP会员9年

全部产品 进入商铺
深圳市正纳电子有限公司 Windows CE作业系统是Windows家族中最新的成员,专门设计给掌上型电脑(HPCs)所使用的电脑环境。这样的作业系统可使完整的可携式技术与现有的Windows桌面技术整合工作。 Windows CE 被设计成针对小型设备(它是典型的拥有有限内存的无磁盘系统)的通用操作系统,Windows CE 可以通过设计一层位于内核和硬件之间代码来用设定硬件平台,这即是众所周知的硬件抽象层(HAL)(在以前解释时,这被称为 OEMC (原始设备制造)适应层,即 OAL; 内核压缩层,即 KAL. 以免与微软的 Windows NT 操作系统 HAL 混淆) . 不象其它的微软 Windows 操作系统,Windows CE 并不是代表一个标准的相同的对所有平台适用的软件。为了足够灵活以达到适应广泛产品需求, Windows CE 采用标准模式,这就意味着,它能够由一系列软件模式做出选择,从而使产品定制。另外,一些可利用模式也可作为其组成部分,这意味着这些模式能够通过从一套可利用的组份做出选择,从而成为标准模式,通过选择,能够达到系统要求的最小模式, OEM 能够减少存储脚本和操作系统的运行。 CONFIG.BIB文件 BIB的全称为Binary Image Builder,在Wince编译过程中的最后MakeImage阶段会用到BIB文件,BIB文件的作用是指示构建系统如何构建二进制映像。所有的BIB文件会被合并成CE.bib文件,然后打包工具Romimage.exe会根据BIB文件中的描述来决定哪些文件最终被包含到WINCE image中,BIB文件还决定了WINCE设备内存的分配,比如定义了WINCE image占用哪块内存,显存(Framebuffer)占用哪块内存等。 CONFIG.BIB文件分两个部分,我们且称之为段,MEMORY段和CONFIG段。MEMORY段定义内存的分片方法,CONFIG段定义系统其它的一些属性。以下是一个CONFIG.BIB文件MEMORY段的例子: MEMORY ; 名称 起始地址 大小 属性 RESERVED 8000000000 RESERVED DRV_GLB 80008000 RESERVED CS30000 RESERVED EDBG 8004080000 RESERVED NK 800C000 RAMIMAGE RAM 810800000 RAM 名称原则上可以取任意字符串,ROMIMAGE通过一个内存片的属性来判断它的用途。RESERVE属性表明该片内存是BSP自己使用的,系统不必关心其用途;RAMIMAGE说明它是一片存放OS IMAGE的内存;而RAM则表示些片内存为RAM,系统可以在其中分配空间,运行程序。 但存放ROM的这片内存的名称,即NK一般不要改动。因为BIB文件中定义将一个文件加入到哪个ROM片(WINCE支持将ROM IMAGE存放在不连续的几个内存片中)中时会用到这个名称,如下现这行BIB文件项就定义将touch.dll放在名称为NK这片ROM中, touch.dll $(_FLATRELEASEDIR)\touch.dll NK SH 因而,如果将NK改为其它名称,则系统中所有的BIB文件中的这个NK串都需要改动。 注意:保证各片内存不要重叠;而且中间不要留空洞,以节约内存;两种设备如果不能同时被加载,就应该只为其保留一片从而节约内存,例如,本例中的CS8950是为网卡驱动程序保留的,EDBG是为网卡作调试(KITL)用时保留的,而系统设计成这两个程序不会同时加载(CS8950在启动时判断如果EDBG在运行就会自动退出),这样为这两个驱动程序各保留一片内存实在浪费而且也没有必要。 RAM片必须在物理上是连续的,如果系统的物理内存被分成了几片,则在RAM片只能声明一片,其它的内存在启动阶段由OEMGetExtensionDRAM报告给系统,如果有多于一个的内存片,应该用OEMEnumExtensionDRAM报告。NK片则没有此限制,只是NK跨越两个以上物理内存片时,系统启动时会显示这个OS包跨越了多个物理内存片,认为是个错误,但并不影响系统的执行与稳定性,因为系统启动之时便会打开MMU而使用虚拟地址,从而看到连续的内存空间。当然,如果内核自己都被放在了两个内存片上,那系统应该就无法启动了。而其它保留起来的内存片是一般是给驱动程序DMA用,应该保证它们在物理上的连续性,因为DMA是直接用物理地址的。 CONFIG段中以下几个需要格外注意: ROMSTART,它定义ROM的起始位置,应该和NK片的起始位置相同。 ROMSIZE,定义ROM的大小,应该和NK片的大小相同。 如果不需要NK.BIN文件,则可以不设这两个值。 ROMWIDTH,它只是定义ROMIMAG生成ROM包时如何组织文件,而非其字面含义:ROM的宽度,所以一般都应该为32 COMPRESSION,一般定义为ON,以打开压缩功能,从而减小BIN文件的尺寸。 AUTOSIZE,一般应该设为ON,以使系统将定义给ROM但没有用掉的内存当做RAM使用,而提高RAM的使用率。注意,如果ROM是FLASH,则不能设为ON,因为FLASH不能当作RAM使用。 ROMOFFSET,它定义OS起始位置(即ROMSTART)的物理地址和虚拟地址的差值,有些BSP中并没有使用这个定义。 OEMAddressTable及其它 BSP板级支持包(board support package),是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。在嵌入式系统软件的组成中,就有BSP.BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS. OEMAddressTable用来初始化系统中各种设备的虚拟地址与物理地址的对映关系。在我使用的BSP中,它是这样定义并初始化的: typedef struct { ULONG ulVirtualAddress; ULONG ulPhysicalAddress; ULONG ulSizeInMegs; } AddressTableStruct; #define MEG(A) (((A - 1)》20) + 1) const AddressTableStruct OEMAddressTable[] = { { SDRAM_VIRTUAL_MEMORY, /虚拟地址 PHYSICAL_ADDR_SDRAM_MAIN, /物理地址 MEG(SDRAM_MAIN_BLOCK_SIZE) /这段空间的大小,以M计 }, …… { 0, 0, 0 } }; 如例子所示,OEMAddressTable为一个结构数组,每项的第一个成员为虚拟地址,第二个成员为对应的物理地址,最后一个成员为该段空间的大小。这个数组的最后一项必须全部为0,以示整个数组的结束。内核启动时会读取这个数组的内容以初始化MMU页表,启用MMU,从尔使程序可以用虚拟地址来访问设备。当然,OEMAddressTable中所用到的每个物理地址及虚拟地址都需要在头文件中定义,每个BSP中定义这些值的文件不尽相同,所以,在此不能说明具体在哪个文件,读者朋友可以参考具体BSP的文档及代码。 不连续内存的处理 如果内存在物理上是连续的,则OEMAddressTable中只需要一项就可以完成对内存的地址映射。但如果BSP运行在SDRAM物理上不连续的系统上时,OEMAddressTable中需要更多的项来将SDRAM映射到连续的虚拟地址上,当然也可以将它们映射到不连续的虚拟地址上,但似乎没有理由那么做。而且,当其物理地址不连续时系统需要做更多的工作。我的SDRAM的使用情况如下图所示: CONFIG.BIB文件的MEMORY段如下所示: MEMORY RESERVED 8000000000 RESERVED DRV_GLB 80008000 RESERVED CS000 RESERVED EDBG 8000000 RESERVED NK 800C000 RAMIMAGE RAM 8180000 RAM 在这32M的空间中,BSP保留了前0x80000字节,接下来是NK,它占用了0x940000字节,而且它跨越了两个内存片,这些和其它BSP的设置都没有多大差别,接下来看RAM片,它只占用了最后的8M空间,前面说过,在这种物理内存不连续的系统中,RAM片不能跨越两个物理内存块,所以它被设计成只占用该系统中的最后一个物理内存片,而其它两片则由OEMEnumExtensionDRAM在运行时刻报告给系统,该函数的内容如下: pMemSections[0].dwFlags=0; pMemSections[0].dwStart=(SDRAM_VIRTUAL_MEMORY + 0x1000000); pMemSections[0].dwLen=0x800000; pMemSections[1].dwFlags=0; pMemSections[1].dwStart=(SDRAM_VIRTUAL_MEMORY + 0x0A00000); pMemSections[1].dwLen=0x600000; return 2; 这样,系统所有的内存都被激活,系统可用内存就变成了8+8+6=24M,可以将RAM定义为这三片中的任意一片,而在OEMEnumExtensionDRAM中报告其它两片。但把RAM放在最后一片物理内存上有一个很大的好处,即如果NK变大,例如编译一个DEBUG版的系统时,这时,只需要将OEMEnumExtensionDRAM中的内容注释掉,CONFIG.BIB文件不用做任何改动,系统就可运行,只是在MAKEIMG时会有一个警告说系统包太大,可能无法运行,但实际不会影响系统的执行与稳定性,因为NK之后的那段内存并没有被使用,正好被涨大的系统占用,这在调试时极其方便。 而如果系统物理内存是连续的,那将变得简单的多,还以上面的设置为例,如果这32M的SDRAM是物理上连续的,内存的使用情况就可以表示如下图: 所有者系统可用内存都可以定义在RAM片中。 对硬件知识了解不多的朋友请注意:SDRAM是否在物理上连续,与我们的板上有几片SDRAM没有关系,应该向硬件工程师了解SDRAM的地址分布情况。
型号/规格

BCM53118KQLEG

品牌/商标

BROADCOM