日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wince2秒快速启动TOC分析

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wince2秒快速启动TOC分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么29M的wince內核nk.nb0文件在2秒鐘就能快速啟動,如果你用匯編設計一個從NAND單純拷貝29M nk.nb0的快速程序,你會發現用200MFCLK的2410或者用400MFCLK的2440都至少需要十幾秒,那為什么ce能夠啟動這么快呢,有什么加速算法嗎?答案是肯定的,并不需要一次性將所有nk.nb0數據都加載到內存,應該按需加載,那就是ce的鏡像文件image“按需加載”[“段式加載”]方式,TOC就是用來描述ce內核鏡像文件image的xipkernel段核心結構體,我們只需加載核文件xipkernel就能正常啟動進入wince界面。

------------------------------------------------------------

硬件環境QT2440A:

NAND[K9F1208U0C]-64M(啟動)

Block0-加載Block2內容的loader程序

Block1-512字節的TOC結構體存儲空間

Block2-加載umon或者結合TOC加載nk.nb0的loader程序

------------------------------------------------------------

?

typedef struct _TOC {

????//和CSW中的認證域類似,只用來驗證接下去內容的合法

DWORD?????????????? dwSignature;

//包含image的索引(我的是1)、啟動delay時間、ip地址、MAC地址和掩碼等

BOOT_CFG??????????? BootCfg;

//用來描述3個之多的ce內核image數組,我用的是id[1]

??? IMAGE_DESCRIPTOR??? id[MAX_TOC_DESCRIPTORS];

??? CHAININFO?????????? chainInfo;

} TOC, *PTOC;????????????????????????????????????????// 512 字節

?

typedef struct _IMAGE_DESCRIPTOR {

??? DWORD dwVersion;???????????????????????????????? //編譯時的版本號

??? DWORD dwSignature;?????????????????????????????? //“EBOOT”或“CFSH”等

??? UCHAR ucString[IMAGE_STRING_LEN];??????????????? //描述字符串:如"eboot.nb0"之類

?

??? DWORD dwImageType;?????????????????????????????? //image的類型nk.nb0為0x04

??? DWORD dwTtlSectors; ???????????????????????????? //image文件用到的NAND的扇區總數

?

??? DWORD dwLoadAddress;???????????????????????????? //image加載時的虛擬地址

??? DWORD dwJumpAddress;???????????????????????????? //image加載完成后的跳轉地址

?

??? SG_SECTOR sgList[MAX_SG_SECTORS];??????????????? //image的段描述,包括起始扇區號和所需扇區數目

?????? ULONG dwStoreOffset;

} IMAGE_DESCRIPTOR, *PIMAGE_DESCRIPTOR;

?

==========================

Loader的輸出:

'U' for USBMON

******

Total Sectors:0x0000e800

Sector addr on NAND: 0x000002a0

TotalSector: 0x0000e800

Reading Kernel Image from NAND

?

??? dwSector: 0x000002a0

??? dwLength: 0x0000e800

dwRAM: 0x30200000

==========================

eboot.nb0的輸出:

Microsoft Windows CE Ethernet Bootloader Common Library Version 1.0 Built Dec 20 2006 22:35:26

Copyright (c) 2000-2001? Microsoft Corporation

Microsoft Windows CE SMDK2440 Bootloader Version 1.2 Built Dec 20 2006 22:35:23

FMD::FMD_Init

?

FMD::FMD_Init Done

?

TOC_Read

TOC {

dwSignature: 0x434F544E

BootCfg {

? ConfigFlags: 0x3820

? BootDelay: 0xF

? ImageIndex: 1

? IP: 192.168.1.108

? MAC Address: 00:00:00:00:00:00

? Port: 0.0.0.0

? SubnetMask: 255.255.255.0

}

ID[0] {

? dwVersion: 0x10002

? dwSignature: 0x45424F54

? String: 'eboot.nb0'

? dwImageType: 0x2

? dwTtlSectors: 0x100

? dwLoadAddress: 0x8C038000

? dwJumpAddress: 0x8C038000

? dwStoreOffset: 0x0

? sgList[0].dwSector: 0x40

? sgList[0].dwLength: 0x100

}

ID[1] {

? dwVersion: 0x1

? dwSignature: 0x43465349

? String: ''

? dwImageType: 0x6

? dwTtlSectors: 0xE800

? dwLoadAddress: 0x8C200000

? dwJumpAddress: 0x8C201000

? dwStoreOffset: 0x0

? sgList[0].dwSector: 0x2A0

? sgList[0].dwLength: 0xE800

}

chainInfo.dwLoadAddress: 0X00000000

chainInfo.dwFlashAddress: 0X00000000

chainInfo.dwLength: 0X00000000

}

-TOC_Read

Press [ENTER] to download image now, or [SPACE] to enter boot monitor.

總結

以上是生活随笔為你收集整理的wince2秒快速启动TOC分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。