阅读:1510回复:5
关于pTOC的探讨
哪位高手能够就pTOC进行一下讲解,不胜感激,还有dwLaunchAddr地址在nk.bin中是否就是最后那个record的Record length,这个地址是不是就是指向nk.exe,谢过了先嘎:)
|
|
论坛版主
|
沙发#
发布于: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 |
|
论坛版主
|
板凳#
发布于:2004-11-09 17:24
dwLaunchAddr应该不是nk.bin最后一个记录的长度,它应该是内核代码(nk.nb0第一条指令)被搬移后在sdram的地址,但这个好像无所谓,你可以在OEMLaunch把它改成一个你想要的值
|
|
地板#
发布于: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.
呵呵,找到这个共享一下。 |
|
地下室#
发布于:2004-11-10 09:38
nk.bin头部有Sync bytes ,Image header,另外还有Record。
wxl,您描述的pTOC是不是经过对nk.bin分解出来的释放到Sdram的image(是否就是nk.nb0?)的内部组织结构,这个释放到内存的image那里有其存储格式的描述文档呢?另外CECE这个标志在image中的存储位置又没有什么文档说呢,谢谢赐教:) |
|
论坛版主
|
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还是有很多东西没有文档,很多都是试出来的,兄弟有兴趣可以研究研究:)) |
|