Wince NANDFlash启动和SD卡启动过程分析

 

文件分类

文件名称

源文件

作用

公有文件

私有文件

Boot ROM

-

-

-

处理器制造时,烧写到内部的一段固定的代码,通过判断引导配置引脚,选择第一个外部引导代码。

XLDR

XLDRNAND.nb0

platform.c

startup.s jumpto.s

main.c

NANDFlash上的第一段代码,用于选择第二段外部引导代码。

XLDRSD.nb0

sdmain.c

位于SD卡,用于选择第二段外部引导代码。

MLO

MLO

-

是XLDRSD.nb0的实际的文件名。

EBOOT

EBOOTND.nb0

main.c menu.c

stub.c flashmenu.c

mmu.c startup.s

jumpto.s

flash.c cfg.c

位于NANDFlash上的第二个分区,用于引导内核的启动。

EBOOTSD.nb0

flash.c cfg.c

位于SD卡,用于引导内核启动。

LOGO

Logo.nb0

-

开机LOGO

NK

NK.bin

-

内核镜像

 

从NANDFlash启动的过程:

(1)      首先执行startup.s的代码,拷贝数据段和代码段到SRAM,最后跳转到main.c中的XLDRMain()函数运行。

(2)      main.c中的XLDRMain()函数,首先将NANDFlash中的EBOOTND.nb0拷贝到内存中,最后调用jumpto.s中的jumpto函数跳转到EBOOTND.nb0的Starup.s处运行。

(3)      在startup.s中主要激活MMU然后跳转到EBOOT的main函数运行。

(4)      Main函数中使能设备时钟,执行BootloaderMain()函数,BootloaderMain()函数位于platform\common\src\common\boot\blcommon\Blcommon.c中,主要是初始化平台,然后执行OEMPreDownload ()函数。最后调用函数OEMLaunch(),启动内核。

(5)      OEMPreDownload ()函数位于main.c文件中,初始化键盘,显示开机LOGO,设置NANDFlash的引导保留块(0~13),读取引导配置(EBOOT区域的最后一个sector),读取按键值shift+NO(只在插入可启动的SD时有效)或shift+*,如果按下shift+*,显示菜单,进行菜单中的相关操作。然后调用函数OALKitlDeviceType(),判断是将从SD卡还是从NANDFlash下载内核到内存运行。

从SD卡启动的过程:

(1)      首先执行startup.s的代码,拷贝数据段和代码段到SRAM,最后跳转到sdmain.c中的XLDRMain()函数运行。

(2)      sdmain.c中的XLDRMain()函数,首先将SD卡中的EBOOTSD.nb0拷贝到内存中,最后调用jumpto.s中的jumpto函数跳转到EBOOTSD.nb0的Starup.s处运行。

(3)      在startup.s中主要激活MMU然后跳转到EBOOT的main函数运行。

(4)      Main函数中使能设备时钟,执行BootloaderMain()函数,BootloaderMain()函数位于platform\common\src\common\boot\blcommon\Blcommon.c中,主要是初始化平台,然后执行OEMPreDownload ()函数。最后调用函数OEMLaunch(),启动内核。

OEMPreDownload ()函数位于main.c文件中,初始化键盘,显示开机LOGO,设置NANDFlash的引导保留块(0~13),读取引导配置(EBOOT区域的最后一个sector),读取按键值shift+NO(只在插入可启动的SD时有效)或shift+*,如果按下shift+*,显示菜单,进行菜单中的相关操作。如果按下shift+NO,依次烧写xldrnand.nb0,ebootnd.nb0,nk.bin, logo.nb0到Flash的对应分区,然后调用函数OALKitlDeviceType(),判断是将从SD卡还是从NANDFlash下载内核到内存运行。

你可能感兴趣的:(WinCE开发)