6410 wince IROM引导SD升级 回忆
前段时间,需要把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:
[cpp]
!if 0
Copyright (c) Microsoft Corporation. All rights reserved.
!endif
!if 0
Use of this source code is subject to the terms of the Microsoft end-user
license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
If you did not accept the terms of the EULA, you are not authorized to use
this source code. For a copy of the EULA, please see the LICENSE.RTF on your
install media.
!endif
!if 0
Module Name:
makefile.inc
romimage $(ROMIMAGE_FLAGS) stepldr_irom_sd.bib
!endif
stepldr_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.nb0
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)\IROM_SD_EBOOT.* $(_FLATRELEASEDIR)
copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\stepldr_IROM_SD.* $(_FLATRELEASEDIR)
!ENDIF
!ENDIF
EBOOT.YSD的makefile.inc:
[cpp]
!if 0
Copyright (c) Microsoft Corporation. All rights reserved.
!endif
!if 0
Use of this source code is subject to the terms of the Microsoft end-user
license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
If you did not accept the terms of the EULA, you are not authorized to use
this source code. For a copy of the EULA, please see the LICENSE.RTF on your
install media.
!endif
!IF 0
Module 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
补充:软件开发 , C++ ,