SMP865X Windows CE 6.docx

上传人:b****7 文档编号:23749388 上传时间:2023-05-20 格式:DOCX 页数:23 大小:27.74KB
下载 相关 举报
SMP865X Windows CE 6.docx_第1页
第1页 / 共23页
SMP865X Windows CE 6.docx_第2页
第2页 / 共23页
SMP865X Windows CE 6.docx_第3页
第3页 / 共23页
SMP865X Windows CE 6.docx_第4页
第4页 / 共23页
SMP865X Windows CE 6.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

SMP865X Windows CE 6.docx

《SMP865X Windows CE 6.docx》由会员分享,可在线阅读,更多相关《SMP865X Windows CE 6.docx(23页珍藏版)》请在冰豆网上搜索。

SMP865X Windows CE 6.docx

SMP865XWindowsCE6

SMP865XWindowsCE6.0内存概述默认分类

 

以下的信息仅限于SMP8654和SigmaDesigns在WindowsCE6.0下提供的标准BSP。

这个文档将详细说明标准BSP中的高级设计。

概述

SNP8654BSP是基于MIPSII和MIPSII_FP平台上的,除了基础的内核接口外,对于内建的网卡、遥控接收、UART、NAND闪存,SATA和USB设备都提供了驱动和源码

启动过程

当SMP8654加电启动后,第一片被执行的代码是内欠在芯片中的ROM代码。

这个ROM代码引导和启动XOS2。

XOS2接着确认XOS2sxenv2中X.XMB的存在(提示,这个XOS2sxenv2是芯片内部串行闪存中的一个xenv2块,而与设置在NAND闪存中的xenv2块无关,应该被称为zxenv)。

XOS2接着证实和引导x.xmb中的内容。

XMBOOT(x.xmb中的内容)接着引导ZBOOT(设置在NAND闪存中的第一页中)。

ZBOOT接着完成内存的设置后启动YAMON。

YAMON可以引导CEbootloader。

CEbooloader启动CE内核。

如果必要的话整个启动过程是可以被修改的。

X.XMB启动ZBOOT。

它是在启动过程中ZBOOT引导下一个阶段的步骤。

基本上只要你一改变启动过程中的一个步骤,它都会全然地影响到执行者所依据到启动过程中存在的何种状态。

当前开发阶段的启动过程如下:

1.ROM     //芯片上电后,芯片内部被执行的第一片代码

2.XOS2    //用于确认和引导内部串行闪存中的X.XMB

3.X.XMB/STAGE0  //即XMBBOOT

4.ZBOOT/STAGE1  //NAND闪存中的第一页,完成内存设置,启动YAMON

5.YMAON/STAGE2

6.CEBOOTLOADER

7.CEKERNEL

尽管从STAGE0开始改变启动步骤是可能的,典型的用户还是从STAGE1开始改变。

NAND闪存布局

NAND闪存的前4个物理块(每个块128Kbit)是保留用来存储ZENV2块和STAGE1引导程序的。

每一个块都可以含有不同的ZXENV块和STAGE1引导程序,但通常他们只是起备份作用。

XMBOOT将从blcok0开始尝试,如果出错了,它将从1到3逐个尝试。

每个块的布局如下:

[0x00000000–0x00003FFF]ZXENV2block(16K)

[0x00004000–0x0001FFFF]STAGE1loader–“CPUcertificate”signedxloadbinary(112K)*

*xloadbianary的起始地址在ZXENV2块中指定

第一个物理块的布局实强制性的。

在前四个物理块后面,物理块的状态是按逻辑排列的。

SigmaDesigns公司实行一个逻辑块系统来管理物理块的状态。

这个物理块到逻辑块的管理系统监管NAND闪存的具体问题,诸如坏块管理和磨损。

在逻辑NAND闪存分布图中,首个512K字节的地址是保留给WindowsCE的。

[0x00000000]  CEBootloader

[0x0007F000]  CEBootloaderSettings

[0x00080000]  YAMON*

[0x000C0000]Linuxkernel**

[0x00800000]  IMaterial(IOS,ITASKS)**

[0x01800000]  XMaterial(UCODES,XTASKS)**

[0x02000000]  CEKernel(NK.BIN)**

[0x04000000]  由CE驱动NAND865X.dll使用,生成NAND存储器

*ZBOOT要求这个镜像必须是ROMFS容器,包含一个使用依据CPU证书标示xload镜像的zbf头的文件。

要生成这个文件,你需要以下make_xload,genzbf和genromfs工具。

ZBOOT在明确设置时显示这个镜像为“z.bootX”,X可以是0-7的任一数字,0有最高的启动优先权。

**只是保留的地址,可能并没有被使用

这个逻辑NAND闪存并不是强制性的,它只在参考板中使用。

它可以根据你系统的需求和资源改变。

例如,你改变了启动过程,你可以按照你的需求来改变这个分布图。

SimgaDesigns参考平台使用了上面的这个分布图。

内存分布图

SMP8654的物理内存(GBUS)分布图:

[0x00000000–0x00010000]REMAP1寄存器的目录

[0x00010000–0x04000000]SMP8654内部寄存器

[0x04000000–0x08000000]REMAP2寄存器的目录

[0x08000000–0x0C000000]REMAP3寄存器的目录

[0x0C000000–0x10000000]REMAP4寄存器的目录

[0x10000000–0x14000000]REMAP5寄存器的目录

[0x14000000–0x18000000]REMAP6寄存器的目录

[0x18000000–0x1C000000]REMAP7寄存器的目录*

[0x1C000000–0x20000000]硬件连接线转换gbus地址

[0x8C000000–0x90000000]**

[0x20000000–0x40000000]空置

[0x40000000–0x50000000]外围Bus接口

[0x50000000–0x58000000]PCIhost配置空间

[0x58000000–0x60000000]PCIhostIO空间

[0x60000000–0x80000000]PCIhost内存空间

[0x80000000–0xC0000000]DRAM0

[0xC0000000–0xFFFFFFFF]DRAM1

*REMAP7由KITLPCI设备使用

**[0x1FC00000–0x1FC10000]  REMAP0寄存器的目录

提示,由于DRAM在gbus中制定的地址是0x80000000和0xC0000000,它们不能直接通过KSEG0和KSEG1访问。

SMP8654特有的REMAP寄存器必须被用来通过KSEG0和KSEG1进行DRAM寻址访问。

REMAP寄存器

REMAP寄存器允许CPU可以通过KSEG0和KSEG1访问大于等于0x20000000的gbus地址。

例如,如果你将REMAP2寄存器设置为0x80000000,那么你就可以使用虚拟地址0x84000000(绑定)和0x94000000(非绑定)来访问DRAM0的首个64MB的地址。

如果你将REMP2设置为0xC0000000,那么你就可以使用虚拟地址0x84000000(缓存)和0x94000000(非缓存)来访问DRAM1的首个64MB的地址。

一个使用256MBDRAM0和256MBDRAM1系统的设置释示范:

REMAP2=0xC0000000

REMAP3=0xC4000000

REMAP4=0xC8000000

REMAP5=0x80000000

REMAP6=0x84000000

REMAP4=0x88000000

这样设置,我们可以通过KSEG0或KSEG1访问DRAM1中的首个192MB地址,和DRAM0中的首个192MB地址。

可以使用MMU访问DRAM其余的地址。

由于这个设置中把[0x1C000000-0x20000000]地址映射为[0x8C000000-0x90000000],你可以使用KSEG0和KSEG1访问DRAM0的192MB-256MB范围的地址。

一个使用64MBDRAM0和64MBDRAM1系统的设置释示范:

REMAP2=0xC0000000

REMAP3=0x80000000

REMAP4=0x00000000

REMAP5=0x00000000

REMAP6=0x00000000

REMAP4=0x00000000

这样设置,我们可以通过KSEG0或KSEG1访问DRAM1中的首个64MB地址,和DRAM0中的首个64MB地址。

例如,在、如果是在内核模式中,从DRAM0中读取第一个DWORD可以被写成:

DWORD*pdw_uncached=(DWORD*)(0x08000000|0xA0000000);

DWORD*pdw_cached=(DWORD*)(0x08000000|0x80000000);

CE启动引导程序

CE启动引导程序必须使用小于64MB的内存,在SigmaDesigns默认的实施设置中它被引导至0x90410000的虚拟地址中(查看boot.bib)。

这个地址位于REMAP寄存器5的范围中。

因此,REMAP5必须在CE启动引导程序被引导到这个地址以前设置。

CE启动引导程序在startup.s中设置REMAP寄存器。

WindowsCE(256MB/256MB设置)的REMAP寄存器通常为:

remap0[1fc00000–1fc100000]由一般的gbus访问使用

remap1[00000000–00010000]0xc0100000内核异常向量+启动引导程序变量

remap2[04000000–08000000]0xc000000--0xc4000000

remap3[08000000–0c000000]0xc400000--0xc8000000

remap4[0c000000–10000000]0xc800000--0xcc000000

remap5[10000000–14000000]0x8000000--0x84000000

remap6[14000000–18000000]0x8400000--0x88000000

remap7[18000000–1c000000]由KITLPCI设备使用

remap8[04000000–08000000]0x8c00000--0x90000000

提示以上的这些信息是参考BSP中CE启动引导程序例程中所特有的。

0x90410000不是一个强制性的地址,之所以在CE启动引导程序例程中使用这个值,是因为这个地址空间是空闲的并且没有和YAMON冲突。

CE启动引导程序也使用一小块的NAND闪存来存储一些信息。

这个地址的逻辑偏移量定义在image_cfg.h中。

查看以下定义:

#defineIMAGE_FALSH_BOOT_CONFIG//存储设置信息的NAND闪存逻辑偏移量地址

#defineIMAGE_FALSH_BOOT_CONFIG_SIZE//上面设置信息区域的字节长度

CE内核

为了优化内存的带宽,使用DRAM1来引导内核是个好方法(视频解码器可以默认使用DRAM0)。

在上面的所有例子中,REMAP2寄存器都被设置到DRAM1的地址中,这是因为这么做可以使得内核的起始地址可以在0x84000000-0x83FFFFFF范围中。

如果内核(nk+ram)大于64MB小于128MB,那么REMAP3寄存器也可以包括DRAM1的地址(例如0xC4000000),等等。

在SigmaDesigns提供的BSP中,CE内核的起始于虚拟地址0x84110000。

CE内存使用方法

在参考WindowsCEBSP中内存的使用方法如下:

DRAM0布局:

[0x80000000–0x80100000]SMP8654以太网KITLDMA内存(1M)

[0x80100000–uzdata    ]空闲

[uzdata    -zdata      ]  图片缓存/音频解码帧

[zdata     -dsp       ]  压缩的比特流

[dsp      -xpu        ]微码层

[xpu      -DRAMEND]  XPU区域

uzdata=0x80000000+lrrw.0.uzdata_offset

zdata=0x80000000+lrrw.0.zdata_offset

dsp=0x8000000+lrrw.0.dsp_offset

xpu=0x8000000+lrrw.0.xpu_offset

DRAM1布局:

[0xC0000000–0xC0100000]预留使用(1M)

[0xC0100000–0xC0110000]故障处理程序+启动引导程序变量(64K)

[0xC0110000–uzdata    ]NK+RAM

[uzdata    -zdata      ]  图片缓存/音频解码帧

[zdata     -dsp       ]  压缩的比特流

[dsp      -xpu        ]微码层

[xpu      -DRAMEND]  XPU区域

uzdata=0xC0000000+lrrw.1.uzdata_offset

zdata=0xC0000000+lrrw.1.zdata_offset

dsp=0xC000000+lrrw.1.dsp_offset

xpu=0xC000000+lrrw.1.xpu_offset

内存必须同时被分配给:

1.XOS(lrrw.xos_public_ga,lrrw.xos_public_size)

2.CPU/XPU/IPU通信(lrrw.channel_index_ga,lrrw_channel_index_size)

3.IRQ句柄共享内存(lrrw.ih_api_ga)

4.IOS(lrrw.ios_ga.lrrw.size)

内存保留的这些单位都定义在lrrw.*关键码中。

同过CE启动引导程序你可以由选择“[8]xenv2BlockOption->[2]Dumpxenv2_rw”命令来显示这些关键码。

这些关键码都在stage1启动过程中创建。

关于IOS内核的内存需要一个特别的提示。

在默认的zboot执行过程中,zboot先使用zexenv变量”z.ios_mm”和”z.ios_sizez.ios_size”来分配内存,然后把分配好的gbus地址写到”lrrw.ios_ga”中,分配的大小写到”lrrw.ios_size”中。

IOS这时必须被加载到当前缓存的最后512K中。

更改内存设置

SMP8654有两个32位的内存控制器。

每个控制其可以最大控制512MB。

本部分将说明SigmaDesigns提供的参考BSP将如何被修改为不同的内存设置。

在XOS和ZBOOT的内存分配初始化后,lrrw.*xenv变量被建立了。

这些lrrw.*变量关联的内存分布如下:

lrrw.0.uzdata_offset  0x0fa34000DRAM0预留给图片缓存的偏移地址  *

lrrw.0.zdata_offset  0x0fa40000DRAM0预留给bit流的偏移地址  *

lrrw.0.dsp_offset  0x0fa44000DRAM0预留给微码的偏移地址

lrrw.0.xpu_offset  0x0fc00000DRAM0预留给XOS的偏移地址

lrrw.1.uzdata_offset  0x0fd60000DRAM1预留给图片缓存的偏移地址  *

lrrw.1.zdata_offset  0x0fd74000DRAM1预留给bit流的偏移地址  *

lrrw.1.dsp_offset  0x0fd7c000DRAM1预留给微码的偏移地址

lrrw.1.xpu_offset  0x0fe00000DRAM1预留给XOS的偏移地址

lrrw.xos_public_ga  0xcfd20000给XPU/CPU通信预留的内存地址  **

lrrw.xos_public_size0x00020000上面内存的大小

lrrw.channel_index_ga0xcfd1fcd4内存地址的通道号,由处理机间通信使用

lrrw.channel_index_size0x00000320上面内存的大小

lrrw.ih_api_ga   0xcfd0fcc8为IRQ句柄预留的内存地址,64K字节

lrrw.ios_ga   0x8f000000给IOS预留的内存地址

lrrw.ios_size   0x006acfc1上面内存的大小

*非强制性的,只当你希望这些缓存保留时才需要。

**非强制性的

一旦这些内存分配被建立和预留后,除了他们预期的功能外不再使用这些区域是极其重要的。

需要修改的文件

Config.bib你必须修改config.bib文件以致内核知道那些内存是可用的。

你必须确认在lrrw.*变量中的内存不和在这个文件中定义的内存冲突。

EXCEPT_OS8000000000001000RESERVED;4KBOS故障处理(remap之后)

ARGS  8000100000001000RESERVED;4KB从启动引导程序到系统的信息(remap之后)

FUTURE  8400000000100000RESERVED;1MBKITLDMA缓存(或者可用,取决于REMAP2)

ARGS  8410000000010000RESERVED;64KB故障处理和变量

NK   84110000  02000000RESERVED;32MBNK.bin镜像

RAM  86110000  05EF0000RAM  ;95MBCE应用

所有在config.bib中的内存都指定使用KSEG0地址空间。

这样,内核可以看到的内存就是从0x84110000-0x8C000000。

关于config.bib更多的信息请参看MSDN文档。

image_cfg.himage_cfg.h文件包含了一些在分配内存之前特别使用的定义。

需要被修改的重要#define包括:

#defineIMAGE_BOOT_EXCEPTION_BASE  0xC0100000

这是异常向量的gbus地址。

如果你希望他们在DRAM1中那典型值为0xC0100000,或者你希望他们在DRAM0中那典型值为0x80100000。

#defineIMAGE_ETH_DMA_PA_START  0x10000000

这是KITL设备使用的DMA缓存的gbus地址。

ES1和ES2芯片需要这个内存被指定使用一个遗留的地址。

如果你希望他们在DRAM0中那典型值为0x80000000(=0x10000000),或者你希望他们在DRAM1中那典型值为0xC0000000。

startup.s在bootloader工程中的startup.s文件可能需要修改。

这个startup.s文件设置remap寄存器2-7。

内核将不再重新定义这些寄存器。

内存设置示例

比如,如果你总共只有64MB内存可用,并且它全部在DRAM0上,同时设定lrrw.*使用64MB内存的最后4MB,这个设置如下:

config.bib

EXCEPT_OS8000000000001000RESERVED;4KBOS故障处理(remap之后)

ARGS  8000100000001000RESERVED;4KB从启动引导程序到系统的信息(remap之后)

FUTURE  8400000000100000RESERVED;1MBKITLDMA缓存

ARGS  8410000000010000RESERVED;64KB故障处理和变量

NK   84110000  01000000RESERVED;16MBNK.bin镜像

RAM  85110000  02AF0000RAM  ;~43MBCE应用

LRRW  87C0000000400000RESERVED;4MBlrrw.*

image_cfg.h

#defineIMAGE_ETH_DMA_PA_START   0x10000000

#defineIMAGE_BOOT_EXCEPTION_BASE  0x80100000

startup.s

//-------------------------------------------------------------------------------------------

//InitCPUMappingRegisters(DRAMconfiguration:

64/0)

//-------------------------------------------------------------------------------------------

//CPU_remap(0x6f000)=IMAGE_BOOT_EXCEPTION_BASE:

remapto0x1fc00000

li  k0,KSEG1_BASE|REG_BASE_cpu_block|CPU_remap

li  k1,0

sw  k1,(k0)

//CPU_remap1(0x6f004)=IMAGE_BOOT_EXCEPTION_BASE:

remapto0x00000000

li  k0,KSEG1_BASE|REG_BASE_cpu_block|CPU_remap1

li  k1,IMAGE_BOOT_EXCEPTION_BASE

sw  k1,(k0)

//CPU_remap2(0x6f008)=DRAM1+0:

remapto0x04000000

li  k0,KSEG1_BASE|REG_BASE_cpu_block|CPU_remap2

li  k1,0x80000000

sw  k1,(k0)

//programallotherre-mapregistersto0

词汇表

XPU-SMP8654内的安全处理器

XOS2-在XPU上运行的专有操作系统

X.XMB-位于SMP8654内部串行闪存中的一个二进制关键码值

KSEG0-绑定内核的虚拟地址,从[0x80000000–0x9FFFFFFF],它直接指向物理地址[0x00000000–0x1FFFFFFF]

KSEG1-非绑定内核的虚拟地址,从[0xA0000000–0xBFFFFFFF],它直接指向物理地址[0x00000000–0x1FFFFFFF]

 

SMP865X内存概述

如果你希望她们在DRAM0中那典型值为0x80000000(=0x10000000),或者你希望她们在DRAM1中那典型值为0xC0000000

  XOS

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1