为什么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分析相关推荐

  1. 计算机桌面键盘快速启动,效率神器!1秒打开电脑任何软件,推荐2款强大的快速启动器...

    原标题:效率神器!1秒打开电脑任何软件,推荐2款强大的快速启动器 如果你是一位桌面极简主义者,不喜欢在电脑桌面上放满各种软件的快捷方式:那么,今天给你介绍的2款软件快速启动器,能快速提升工作效率,相信 ...

  2. 计算机软件快速启动,效率神器!1秒打开电脑任何软件,推荐2款强大的快速启动器...

    原标题:效率神器!1秒打开电脑任何软件,推荐2款强大的快速启动器 如果你是一位桌面极简主义者,不喜欢在电脑桌面上放满各种软件的快捷方式:那么,今天给你介绍的2款软件快速启动器,能快速提升工作效率,相信 ...

  3. RK3399快速上手 | 03-RK3399启动流程分析

    文章目录 一.Rockchip处理器通用启动流程 1. 启动路径 2. 启动阶段 3. 启动流程分析 3.1. 图示 3.2. 第一阶段 3.3. 第二阶段 3.4. 第三阶段 3.5. 第四阶段 3 ...

  4. imx8mq-evk快速启动-方案讨论,准备工作

    一.优化启动时间的流程 1.系统启动流程:先使用nxp提供的系统方案启动系统.分析系统启动流程.优化启动时间工作在验证系统必须功能正常的前提下进行.系统可以独立下载源码进行编译,也可以通过yocto工 ...

  5. 有关Win8快速启动机制探讨

    Win8个性化:一个花费两三年时间,数千人开发,参与测试人数达到数百万的产品,其中必然有不少值得我们去探讨分享的新技术和新功能,Win8正是这样一款产品.作为世界上最流行的操作系统的最新版本,Win8 ...

  6. 记一次windows蓝屏的解决方法——快速启动惹的祸

    现象 公司电脑,Windows10 系统,我一般周一到周四不关机只休眠,一切正常,周五下班关机,可是到下周一过来开机必蓝屏(100%蓝屏),强制关机重启后又一切正常了. 后面反复测试了几次,发现只要是 ...

  7. xp启动java设置_Windows XP快速启动经典六招

    Windows XP快速启动经典六招 第一招:修改启动参数 右键单击"我的电脑",选择"属性",再单击"高级"选项卡,单击"启动和 ...

  8. 解析并符号 读取dll_Spring IOC容器之XmlBeanFactory启动流程分析和源码解析

    一. 前言 Spring容器主要分为两类BeanFactory和ApplicationContext,后者是基于前者的功能扩展,也就是一个基础容器和一个高级容器的区别.本篇就以BeanFactory基 ...

  9. android 快速启动,《Android APP可以有的东西》之显示篇:快速启动App

    前言 又有好久木有更新啦,快成咸鱼了. 早上看到一篇关于app快速启动的公众号文章,觉得应该全面了解一下这个东西,所以这篇文章就小小地实践一下下记录下来,内容并不多,demo都没有必要上,大家直接看代 ...

最新文章

  1. python动态数组的最大值_python实现动态数组的示例代码
  2. wukong引擎源码分析之索引——part 2 持久化 直接set(key,docID数组)在kv存储里...
  3. 【开发环境】安装 Visual Studio Ultimate 2013 开发环境 ( 下载软件 | 安装软件 | 运行软件 )
  4. Rexsee API介绍:Android传感器系列之 - 磁场传感器Magnetic Field源码
  5. MTK 快速开机 技术详解
  6. 1746: 多项式系数(杨辉三角的应用)
  7. UIWindow的windowLevel详解
  8. 2016年安全身份识别主流趋势
  9. html判断坐标,js判断鼠标位置是否在某个div中的方法
  10. ELKStack之极速入门(上)
  11. JavaScript小数运算出现多位的解决办法
  12. Since Due to Because of Because 的用法和区别
  13. linux设置mysql开机启动
  14. Linux 查看本地ip
  15. 新手网站制作教程:网站建设流程及步骤有哪些?
  16. MobileNet v2的Inverted Bottleneck为什么可以抵消ReLU激活函数所带来的信息损失
  17. matlab将图片旋转的代码_空间曲线绕空间直线旋转生成的旋转曲面方程
  18. 最新Exsi-6.7.0U3b版本下载
  19. 为什么电子邮件发送失败?电子邮件发送失败的原因及解决方法
  20. 青少年软件编程C++一级题库(51-60)

热门文章

  1. numpy将所有数据变为0和1_Numpy库学习
  2. arrayrand php,php中array_rand函数的功能起什么作用呢?
  3. 28 | 堆和堆排序:为什么说堆排序没有快速排序快?
  4. linux使用root操作文件,以root用户登录Linux系统,当前目录是/root,要求完成如下操作和功...
  5. mysql 字符转数值_深入MYSQL字符数字转换的详解
  6. 2013年c语言课后作业答案,2013年计算机二级C语言课后模拟题三及答案
  7. 单元测试debug过程中,显示variables are not available
  8. ubuntu下的对拍
  9. word 2013 题注、图注、插入图片自动修改大小、批量更新题注编号
  10. 解决鼠标滚动的时候多次执行函数