阅读:3153回复:7
请教一个关于WINCE支持多BIN模式起动的问题 (100分求此问题的答案)
为了缩小启动时间和内存占用的问题,我需要让WINCE支持多BIN档。由于本人知识水平有限,支持多BIN遇到了自己不能单独解决问题和困惑,实在没有办法,想请大家帮我分析一下问题,谢谢!
好了,我现在把我的问题以及对问题的一些个人看法做一些描述,我知道WINCE如果需要支持多BIN文件需要把Image分成两大部分:xipkernel和nk,其中xipkernel主要包括CE比较核心又需要加载的程序和DLL文件(相当于LINUX的kernel产生的Image吧),nk中包括剩余的程序,DLL文件,以及其他的文件(相当于LINUX的文件系统吧)。当然还有一个chain,他只是一个中间的连接文件,没有什么太多的内容。为了实现掉电保存注册表数据的问题,CE系统应该还需要支持HIVE。通过网上的一些资料我对WINCE做了以下工作。 1.在PB中将HIVEbased Registers添加到WorkSpaces中 2.注释掉default.fdf 3.修改config.bin MEMORY pdwXIPLoc 00000000 803FF000 FIXUPVAR XIPKERNEL 80200000 001FF000 RAMIMAGE CHAIN 803FF000 00001000 RESERVED NK 80400000 01E00000 NANDIMAGE RAM 82200000 07C00000 RAM FLASH 92000000 00100000 RESERVED CONFIG AUTOSIZE=ON COMPRESSION=ON DLLADDR_AUTOSIZE=ON KERNELFIXUPS=ON PROFILE=OFF RAM_AUTOSIZE=OFF ROMFLAGS=0 ROM_AUTOSIZE=OFF XIPSCHAIN=803FF000 4.添加以下文件到platform.bib MODULES ; Name Path Memory Type ; -------------- --------------------------------------------- ----------- nk.exe D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\kern.exe XIPKERNEL SH coredll.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\coredll.dll XIPKERNEL SH filesys.exe D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\filesys.exe XIPKERNEL SH fatfsd.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fatfsd.dll XIPKERNEL SH diskcache.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\diskcache.dll XIPKERNEL SH fatutil.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fatutil.dll XIPKERNEL SH binfs.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\binfs.dll XIPKERNEL SH fsdmgr.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\fsdmgr.dll XIPKERNEL SH mspart.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\mspart.dll XIPKERNEL SH ceddk.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\ceddk.dll XIPKERNEL SH smflash.dll D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\smflash.dll XIPKERNEL SH FILES boot.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\boot.hv XIPKERNEL SH default.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\default.hv XIPKERNEL SH user.hv D:\WINCE500\PBWorkspaces\SMDK2440\RelDir\SMDK2440_ARMV4I_Release\user.hv XIPKERNEL SH 5.添加以下文件到platform.reg ; HIVE BOOT SECTION ; Add BinFS to partition table [HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable] "21"="BINFS" [HKEY_LOCAL_MACHINE\System\StorageManager\BINFS] "Folder"="BINFS" "FriendlyName"="Bin FileSystem" "Dll"="binfs.dll" ; MountFlags: ; 0x10 specifies that this file system is to be mounted as an external ; ROM filesystem shadowing the \windows directory ; 0x1 specifies that the mountpoint \BINFS is to be hidden ; "MountFlags"=dword:10 "BootPhase"=dword:0 ; END HIVE BOOT SECTION 6.sysgen 此操作完成后会在Release目录下产生一下几个文件: boot.hv, default.hv, user.hv xipkernel.bin, chain.bin, nk.bin, xip.bin 7.将xip.bin烧写到机器,启动打印以下信息后系统没有反应Windows CE Kernel for ARM (Thumb Enabled) Built on Jun 24 2004 at 18:25:00 ProcessorType=0920 Revision=0 sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 8020633c DCache: 8 sets, 64 ways, 32 line size, 16384 size ICache: 8 sets, 64 ways, 32 line size, 16384 size OALIntrInit,g_pPortRegs->GPFDAT=0x3d OALIntrInit: g_pPortRegs->GPGDAT=0x6617 BSPIntrInit sunny mark BSPIntrInit GPGCON=0x100 BSPIntrInit GPFCON=0xaaa2 BSPIntrInit EXTINT0=0x22222222 BSPIntrInit EXTINT1=0x22222222 OALIntrEnableIrqs irp=14,cout=1 OALIntrEnableIrqs irp=14 我需要请教的问题描述如下: 我的硬件是s3c2440,64M SDRAM, 64M Flash,板子是公司在Samsung基础上重新设计的 按我的理解我的FLASH存储映射关系如下 /////////////////////////////////////////////////////////// 0 block stepldr.bin(nboot) 这部分相当于启动NorFlash /////////////////////////////////////////////////////////// 1 block toc /////////////////////////////////////////////////////////// 2-9 block eboot.bin (bootloader的主要代码) ////////////////////////////////////////////////////////// (10-137) xipkernel.bin 10-2058 block xip.bin (138) chain.bin (139-2058) nk.bin 注:此部分不考虑坏块的问题,我想应该是这样的映射关系 ////////////////////////////////////////////////////////// 系统的工作原理应该是这样的: 把(10-138)块的内容copy到内存80200000-80400000,然后跳到startup的入口上启动WINCE系统,我现在不能理解的是WINCE怎么知道nk.bin是binfs文件系统,而且位置是在(139-2058)这个位置上呢?我知道LINUX可以通过CmdLine来传递挂载根文件系统的类型,Flash的开始地址和大小,但我不知道WINCE有没有类似的传法,如果有的话,它是如何实现的? 另外想请教一下xipkernel.bin包括的文件是不是nk.bin就不要包括了? |
|
沙发#
发布于:2007-09-23 20:29
在eboot中,eboot调用分区程序将flash分binfs去和fat区两种分区类型,然后在启动时就能够被系统认得
|
|
板凳#
发布于:2007-09-23 22:28
RAM 82200000 07C00000 RAM
我的硬件是s3c2440,64M SDRAM, 64M Flash 请把以上的数据对照看看。。相信聪明的你会发现问题的。 |
|
地板#
发布于:2007-09-23 22:31
邵工,搞的蛮快的,有空交流下
|
|
地下室#
发布于:2007-09-24 10:37
能不能把问题说到点子上!我需要的是WINCE挂载根文件系统的原理机制。
另有哪位大侠已经实现了多BIN文件模式的功能,能否将其中文件config.bib/platform.reg / common.bib / common.reg 共享出来给我参考或者发到我EMAIL,(taiguen@163.com) Thanks every one ! |
|
5楼#
发布于:2007-09-25 17:01
我编译的时候出现这个警告,
Warning: FixupVar pdwXIPLoc not found in kernel. Variable not fixed up. Writing F:\WINCE500\PBWorkspaces\YL_924\RelDir\smdk2440a_ARMV4I_Release\XIPKERNEL.bin Table of contents 8035076c 0000017c ( 380) Writing ROM signature and TOC pointer at 80200040 Kernel data copy section 802fffd4 00000010 ( 16) ROM Header 80350718 00000054 ( 84) First DLL code Address: 03ec0000 Last DLL code Address: 04000000 First DLL Address: 01fe01fe Last DLL Address: 02000000 Physical Start Address: 80200000 Physical End Address: 80375a2c Start RAM: 80400000 Start of free RAM: 8044f000 End of RAM: 84000000 Number of Modules: 11 Number of Copy Sections: 1 Copy Section Offset: 802fffd4 FileSys 4K Chunks/Mbyte: 128 <2Mbyte 128 2-4Mbyte 0 4-6Mbyte 0 >6Mbyte CPU Type: 01c2h Miscellaneous Flags: 0002h Extensions Pointer: 80202210 Total ROM size: 00175a2c ( 1530412) Starting ip: 8022c358 Raw files size: 00302642 Compressed files size: 0016fb08 Compacting bin file... 之后加载XIP.BIN后,就只停留在SDMMC config set rGPGCON: fd94fdba OEMInit Done... Sp=ffffc7cc 是内存分配的原因?还是由于这个警告的原因,不时很明白警告的意思,是不是内核创建步成功?我看它有十几M那。。希望各位i高手给各指点:) 我的MEMORY是这样配的,有错误吗? (64M SDRAM ,64M NANDFLASH) MEMORY pdwXIPLoc 00000000 803FF000 FIXUPVAR XIPKERNEL 80200000 001FF000 RAMIMAGE CHAIN 803FF000 00001000 RESERVED NK 80400000 01E00000 NANDIMAGE RAM 80400000 03C00000 RAM FLASH 92000000 00100000 RESERVED |
|
6楼#
发布于:2007-09-26 10:42
我的config.bib:
MEMORY #define CHAIN_ADDRESS 8c3FF000 pdwXIPLoc 00000000 $(CHAIN_ADDRESS) FIXUPVAR XIPKERNEL 8c200000 001FF000 RAMIMAGE CHAIN $(CHAIN_ADDRESS) 00001000 RESERVED NK 8c400000 01800000 NANDIMAGE RAM 8DC00000 02300000 RAM SHOW完LOGO不动了。 OEMInit Done... Sp=ffffc7cc FMD::FMD_Init FMD::FMD_Init Done FMD::FMD_OEMIoControl = 0x71c24 Data Abort: Thread=8feed5d0 Proc=8c3a8b58 'filesys.exe' AKY=00000003 PC=03f98374 RA=03f98348 BVA=04000000 FSR=00000007 Data Abort: Thread=8feed5d0 Proc=8c3a8b58 'filesys.exe' AKY=00000003 PC=03f98374 RA=03f98348 BVA=04000000 FSR=00000007 RaiseException: Thread=8feed5d0 Proc=8c3a8b58 'filesys.exe' AKY=00000003 PC=8c22c658 RA=8c22a168 BVA=00000001 FSR=00000001 Exception 'RaiseException' Thread=8feed5d0 AKY=00000003 PC=4fed6a1e BVA=00000001 R0=efeed80e R1=0405f928 R2=8c230e98 R3=8c3aa8a0 R4=00000000 R5=8feb8878 R6=8c22b75c R7=00000000 R8=8c23346c R9=afeb887a R10=0405f974 R11=8fed6a1c R12=8c22b75c SP=4fed6a1e Lr=8c22c260 Psr=8000001f |
|
7楼#
发布于:2007-09-26 11:19
RAM 8C400000 03C00000 RAM
|
|