shaoshengli
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2022-02-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望77点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:3154回复:7

请教一个关于WINCE支持多BIN模式起动的问题 (100分求此问题的答案)

楼主#
更多 发布于:2007-09-23 09:32
为了缩小启动时间和内存占用的问题,我需要让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就不要包括了?
wenzai
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2011-03-04
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望424点
  • 贡献值0点
  • 好评度309点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-23 20:29
在eboot中,eboot调用分区程序将flash分binfs去和fat区两种分区类型,然后在启动时就能够被系统认得
king_sundi
驱动牛犊
驱动牛犊
  • 注册日期2006-07-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望238点
  • 贡献值1点
  • 好评度54点
  • 原创分0分
  • 专家分5分
板凳#
发布于:2007-09-23 22:28
RAM            82200000  07C00000  RAM


我的硬件是s3c2440,64M SDRAM, 64M Flash

请把以上的数据对照看看。。相信聪明的你会发现问题的。
king_sundi
驱动牛犊
驱动牛犊
  • 注册日期2006-07-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望238点
  • 贡献值1点
  • 好评度54点
  • 原创分0分
  • 专家分5分
地板#
发布于:2007-09-23 22:31
邵工,搞的蛮快的,有空交流下
shaoshengli
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2022-02-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望77点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2007-09-24 10:37
能不能把问题说到点子上!我需要的是WINCE挂载根文件系统的原理机制。
另有哪位大侠已经实现了多BIN文件模式的功能,能否将其中文件config.bib/platform.reg / common.bib / common.reg 共享出来给我参考或者发到我EMAIL,(taiguen@163.com
Thanks every one !
yourhost1119
驱动牛犊
驱动牛犊
  • 注册日期2007-08-27
  • 最后登录2008-04-15
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
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
iampxj
驱动牛犊
驱动牛犊
  • 注册日期2004-01-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
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
harktrip
驱动小牛
驱动小牛
  • 注册日期2003-11-30
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望457点
  • 贡献值0点
  • 好评度170点
  • 原创分0分
  • 专家分2分
7楼#
发布于:2007-09-26 11:19
  RAM                    8C400000  03C00000  RAM
游客

返回顶部