6410 wince IROM引导SD升级 回忆

来源:互联网 发布:淘宝上的销量是真的吗 编辑:程序博客网 时间:2024/05/18 23:27

前段时间,需要把IROM这个搞一下。主要是因为要更换Nandflash,而飞凌提供的IROM只支持2G的,不支持4G的。所以需要自己把这个给搞出来

IROM是一个nb0二进制文件,主要是固化到SD卡上,然后在开机的时候,由IROM启动方式进入。CPU会跳转到SD卡上的IROM,进行引导升级Stepldr、Eboot和NK。


由于我用的飞凌6410开发板并不提供这个源码,所以只能自己搞一个。

通过别人提供的友坚6410的这个Eboot.SDFuser和NBL1.IROM_SD。来进行移植IROM。

至于IROM的启动结构,这里就不多说了。网上很多例子,这里提供一个网址:点击打开链接


移植这个的时候,碰到很多问题,如:

友坚的Eboot.SDFuser里面用到了EBOOT.WHIMORY架构,而我使用的飞凌BSP里面是没有这玩意的。再加上我这个Nandflash使用的MLC,而不是SLC,这个就增加了移植的难度。


我这里移植后,生成的IROM文件名为:IROM_SD_EBOOT.nb0

主要由Eboot.SDFuser和NBL1.IROM_SD和组合而成。(我这里的Eboot.SDFuser改名为EBOOT.YSD)

EBOOT.YSD              --->  eboot_ysd

NBL1.IROM_SD       --->  Stepldr_IROM_SD

eboot_ysd.nb0 + stepldr_IROM_SD.nb0  --> IROM_SD_EBOOT.nb0

就是这样生成这个IROM文件了。(组合生成文件这些,主要在对应的makefile.inc配置)


一开始,我是先把NBL1.IROM_SD 这个移植过来,这个相对比较容易。然后开始移植EBOOT.YSD(原来叫Eboot.SDFuser)

EBOOT.YSD主要由 BLCOMMON + EBOOT + FAT_LIB + SDMMC_LIB 组合而成。

关键点在于Eboot部分。我这里直接使用我BSP仲的Eboot,因为Eboot.SDFuser中的Eboot使用到了EBOOT.WHIMORY里面的很多东西,非常的不好移植。

这个Eboot会先刷写Stepldr,然后刷写Eboot,最好进行分区,刷写NK。刷写完可以Launch进入系统,也可以死等停在那里。

移植这部分的时候,还需要注意显示控制部分。

在格式化的时候,需要注意,低格会耗费很多时间的,可以把相应部分给屏蔽掉。

分区的时候有个需要注意的地方,如果分的区小余NK的大小的话,会导致无法进入系统的问题。

根据情况,里面的Eboot的bib文件也是需要相应修改的。



NBL1.IROM_SD的makefile.inc:

!if 0Copyright (c) Microsoft Corporation.  All rights reserved.!endif!if 0Use of this source code is subject to the terms of the Microsoft end-userlicense agreement (EULA) under which you licensed this SOFTWARE PRODUCT.If you did not accept the terms of the EULA, you are not authorized to usethis source code. For a copy of the EULA, please see the LICENSE.RTF on yourinstall media.!endif!if 0Module Name:    makefile.inc    romimage $(ROMIMAGE_FLAGS) stepldr_irom_sd.bib!endifstepldr_romimage:!IF "$(NOLINK)" == ""    romimage $(ROMIMAGE_FLAGS) stepldr_irom_sd.bib     #copy /y/b $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot_sdfuser.nb0 + $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\stepldr_IROM_SD.nb0 $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\IROM_SD_EBOOT.nb0copy /y/b $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot_ysd.nb0 + $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\stepldr_IROM_SD.nb0 $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\IROM_SD_EBOOT.nb0!IF "$(WINCEREL)"=="1"    copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\IROM_SD_EBOOT.* $(_FLATRELEASEDIR)    copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\stepldr_IROM_SD.* $(_FLATRELEASEDIR)!ENDIF!ENDIF

EBOOT.YSD的makefile.inc:

!if 0Copyright (c) Microsoft Corporation.  All rights reserved.!endif!if 0Use of this source code is subject to the terms of the Microsoft end-userlicense agreement (EULA) under which you licensed this SOFTWARE PRODUCT.If you did not accept the terms of the EULA, you are not authorized to usethis source code. For a copy of the EULA, please see the LICENSE.RTF on yourinstall media.!endif!IF 0Module Name:    makefile.inc!ENDIF## Take the eboot.exe that resulted from the standard build and generate eboot.bin from it.#EbootImage:!IF "$(NOLINK)" == ""romimage eboot_ysd.bib#copy /y/b $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot_ysd.nb0 + $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\stepldr_IROM_SD.nb0 $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\IROM_SD_EBOOT.nb0!IF "$(WINCEREL)"=="1"copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot_ysd.nb0 $(_FLATRELEASEDIR)copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot_ysd.bin $(_FLATRELEASEDIR)copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot_ysd.sre $(_FLATRELEASEDIR)!ENDIF!ENDIF

就记录到这里吧!

原创粉丝点击