icefly_x
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分119分
  • 威望16点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1510回复:5

关于pTOC的探讨

楼主#
更多 发布于:2004-11-09 16:14
哪位高手能够就pTOC进行一下讲解,不胜感激,还有dwLaunchAddr地址在nk.bin中是否就是最后那个record的Record length,这个地址是不是就是指向nk.exe,谢过了先嘎:)
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-09 17:14
typedef struct ROMHDR {
    ULONG   dllfirst;               // first DLL address
    ULONG   dlllast;                // last DLL address
    ULONG   physfirst;              // first physical address
    ULONG   physlast;               // highest physical address
    ULONG   nummods;                // number of TOCentry's
    ULONG   ulRAMStart;             // start of RAM
    ULONG   ulRAMFree;              // start of RAM free space
    ULONG   ulRAMEnd;               // end of RAM
    ULONG   ulCopyEntries;          // number of copy section entries
    ULONG   ulCopyOffset;           // offset to copy section
    ULONG   ulProfileLen;           // length of PROFentries RAM
    ULONG   ulProfileOffset;        // offset to PROFentries
    ULONG   numfiles;               // number of FILES
    ULONG   ulKernelFlags;          // optional kernel flags from ROMFLAGS .bib config option
    ULONG   ulFSRamPercent;         // Percentage of RAM used for filesystem
                                        // from FSRAMPERCENT .bib config option
                                        // byte 0 = #4K chunks/Mbyte of RAM for filesystem 0-2Mbytes 0-255
                                        // byte 1 = #4K chunks/Mbyte of RAM for filesystem 2-4Mbytes 0-255
                                        // byte 2 = #4K chunks/Mbyte of RAM for filesystem 4-6Mbytes 0-255
                                        // byte 3 = #4K chunks/Mbyte of RAM for filesystem > 6Mbytes 0-255

    ULONG   ulDrivglobStart;        // device driver global starting address
    ULONG   ulDrivglobLen;          // device driver global length
    USHORT  usCPUType;              // CPU (machine) Type
    USHORT  usMiscFlags;            // Miscellaneous flags
    PVOID   pExtensions;            // pointer to ROM Header extensions
    ULONG   ulTrackingStart;        // tracking memory starting address
    ULONG   ulTrackingLen;          // tracking memory ending address
} ROMHDR;

大概是这样的哈:ce支持把os image放到不连续的rom里面,并且sdram也可以不连续,ce用这个结构来标示每一块memory。

typedef struct ROMChain_t {
    struct ROMChain_t *pNext;
    ROMHDR *pTOC;
} ROMChain_t;

然后将这些不连续的块串成一个链表。具体域的意思你可以结合romimage生成*.bin/*.nb0的时候产生的log文件看,比如


First DLL code Address:  04000000
Last DLL code Address:   04000000
First DLL Address:       02000000
Last DLL Address:        02000000
Physical Start Address:  8c030000
Physical End Address:    8c03b388
Start RAM:               8c050000
Start of free RAM:       8c052000
End of RAM:              8c100000
Number of Modules:       1
Number of Copy Sections: 1
Copy Section Offset:     8c03ad84
FileSys 4K Chunks/Mbyte: 128 <2Mbyte  128 2-4Mbyte  0 4-6Mbyte  0 >6Mbyte
CPU Type:                    01c2h
Total ROM size:          0000b388 (     45960)
Starting ip:             8c031000
Raw files size:          00000000
Compressed files size:   00000000
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-09 17:24
dwLaunchAddr应该不是nk.bin最后一个记录的长度,它应该是内核代码(nk.nb0第一条指令)被搬移后在sdram的地址,但这个好像无所谓,你可以在OEMLaunch把它改成一个你想要的值
根据地的兄弟们,团结就是力量
icefly_x
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分119分
  • 威望16点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-11-10 09:27
Record address :Physical starting address of data record. If this value is zero, the record address is the end of the file, and record length contains the starting address of the image.
呵呵,找到这个共享一下。
icefly_x
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2006-02-07
  • 粉丝0
  • 关注0
  • 积分119分
  • 威望16点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-11-10 09:38
nk.bin头部有Sync bytes ,Image header,另外还有Record。
wxl,您描述的pTOC是不是经过对nk.bin分解出来的释放到Sdram的image(是否就是nk.nb0?)的内部组织结构,这个释放到内存的image那里有其存储格式的描述文档呢?另外CECE这个标志在image中的存储位置又没有什么文档说呢,谢谢赐教:)
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-11-10 13:20
这样说吧,nk.bin是nk.nb0的run length压缩文件,就是把nk.bin里面为0的部分去掉,格式很简单,你可以从msdn找到bin格式,对比nb0一看就知道了

pTOC可能主要用于在编译链接的时候重定位,在nk.nb0里面好像也有,这个我是看ce启动的debug信息中有指明pTOC,我觉得这个就是我前面说的ce支持多段rom image,他用这个东西把这些碎的rom image链在一起。

对了,我记得我找过一次,nk.nb0里面确实是有的,存放位置我不清楚,你可以看log文件,然后找几个关键字在nk.nb0里查找,因为数据结构知道,所以附近的那些数据就是pTOC数据,我找过的。

ce还是有很多东西没有文档,很多都是试出来的,兄弟有兴趣可以研究研究:))
根据地的兄弟们,团结就是力量
游客

返回顶部