stepldr编译,生成
stepldr.bin 4kB,
stepldr.exe 7kB,
stepldr.map 3kB,
stepldr.nb0 4kB,
stepldr.nb1 4kB,
stepldr.nb2 4kB
我想问的是,为什么会生成3个stepldr.nbx?在哪里设置的?为什么在我的环境里面,stepldr.nb1是有效的,那么其他两个是做什么用的?
在我的stepldr目录下,有以下几个根编译相关的文件,
Makefile文件:
这个根其他目录的都一样的,都是直接include makefile.def
Makefile.inc文件:生成文件
stepldr_romimage:
!IF "$(NOLINK)" == ""
romimage $(ROMIMAGE_FLAGS) stepldr.bib
debug $(_PLATFORMROOT)/$(_TGTPLAT)/target/$(_TGTCPU)/$(WINCEDEBUG)/stepldr.nb0 < trimnb0.scr
!IF "$(WINCEREL)"=="1"
copy $(_PLATFORMROOT)/$(_TGTPLAT)/target/$(_TGTCPU)/$(WINCEDEBUG)/stepldr.* $(_FLATRELEASEDIR)
!ENDIF
!ENDIF
source文件:定义编译类型,文件名
TARGETNAME=stepldr
TARGETTYPE=PROGRAM
RELEASETYPE=PLATFORM
EXEENTRY=StartUp
NOMIPS16CODE=1
LDEFINES=-subsystem:native /DEBUG /DEBUGTYPE:CV /FIXED:NO
CDEFINES=$(CDEFINES) -DPAGESIZE2K
TARGETLIBS=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/fulllibc.lib
SOURCES=startup.s /
main.c /
nand.c /
utils.c
WINCETARGETFILES=stepldr_romimage
stepldr.bib文件:
MEMORY
; Name Start Size Type
; ------- -------- -------- ----
STEPLDR 00000000 00001000 RAMIMAGE
STACK 33ff5800 00001000 RESERVED
RAM 33ff0000 00001000 RAM
CONFIG
COMPRESSION=ON
PROFILE=OFF
KERNELFIXUPS=ON
ROMSTART=00000000
ROMWIDTH=32
ROMSIZE=00001000
MODULES
; Name Path Memory Type
; ---------- -------------------------------------------------------------- -----------
nk.exe $(_TARGETPLATROOT)/target/$(_TGTCPU)/$(WINCEDEBUG)/stepldr.exe STEPLDR
Trimnb0.scr文件:这个文件做什么用的?
rcx
1000
w 1100
q
stepldr.bin 4kB,
stepldr.exe 7kB,
stepldr.map 3kB,
stepldr.nb0 4kB,
stepldr.nb1 4kB,
stepldr.nb2 4kB
我想问的是,为什么会生成3个stepldr.nbx?在哪里设置的?为什么在我的环境里面,stepldr.nb1是有效的,那么其他两个是做什么用的?
在我的stepldr目录下,有以下几个根编译相关的文件,
Makefile文件:
这个根其他目录的都一样的,都是直接include makefile.def
Makefile.inc文件:生成文件
stepldr_romimage:
!IF "$(NOLINK)" == ""
romimage $(ROMIMAGE_FLAGS) stepldr.bib
debug $(_PLATFORMROOT)/$(_TGTPLAT)/target/$(_TGTCPU)/$(WINCEDEBUG)/stepldr.nb0 < trimnb0.scr
!IF "$(WINCEREL)"=="1"
copy $(_PLATFORMROOT)/$(_TGTPLAT)/target/$(_TGTCPU)/$(WINCEDEBUG)/stepldr.* $(_FLATRELEASEDIR)
!ENDIF
!ENDIF
source文件:定义编译类型,文件名
TARGETNAME=stepldr
TARGETTYPE=PROGRAM
RELEASETYPE=PLATFORM
EXEENTRY=StartUp
NOMIPS16CODE=1
LDEFINES=-subsystem:native /DEBUG /DEBUGTYPE:CV /FIXED:NO
CDEFINES=$(CDEFINES) -DPAGESIZE2K
TARGETLIBS=$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/fulllibc.lib
SOURCES=startup.s /
main.c /
nand.c /
utils.c
WINCETARGETFILES=stepldr_romimage
stepldr.bib文件:
MEMORY
; Name Start Size Type
; ------- -------- -------- ----
STEPLDR 00000000 00001000 RAMIMAGE
STACK 33ff5800 00001000 RESERVED
RAM 33ff0000 00001000 RAM
CONFIG
COMPRESSION=ON
PROFILE=OFF
KERNELFIXUPS=ON
ROMSTART=00000000
ROMWIDTH=32
ROMSIZE=00001000
MODULES
; Name Path Memory Type
; ---------- -------------------------------------------------------------- -----------
nk.exe $(_TARGETPLATROOT)/target/$(_TGTCPU)/$(WINCEDEBUG)/stepldr.exe STEPLDR
Trimnb0.scr文件:这个文件做什么用的?
rcx
1000
w 1100
q
这个问题很多人都碰到过。
因为编译stepldr(nboot)的时候,很多人用的是ADS。用pb5.0去编的比较少。
如果用三星官方2440BSP for WinCE 5.0的话,
ROMSIZE=00003000
导致编译出来的stepldr.nb0是12K,烧录之后是无法使用的。
后来请教别人之后,才知道要把 ROMSIZE 改为ROMSIZE=00001000,就会生成三个stepldr.nbx。
使用stepldr.nb1即可。
给出的解释是,由于pb5.0编译器的原因导致12K的stepldr前4K和后4K是空的,证据是你用一个二进制文件查看工具去看看。深层次的原因,我也不清楚,大家都是这么用的。
因为编译stepldr(nboot)的时候,很多人用的是ADS。用pb5.0去编的比较少。
如果用三星官方2440BSP for WinCE 5.0的话,
ROMSIZE=00003000
导致编译出来的stepldr.nb0是12K,烧录之后是无法使用的。
后来请教别人之后,才知道要把 ROMSIZE 改为ROMSIZE=00001000,就会生成三个stepldr.nbx。
使用stepldr.nb1即可。
给出的解释是,由于pb5.0编译器的原因导致12K的stepldr前4K和后4K是空的,证据是你用一个二进制文件查看工具去看看。深层次的原因,我也不清楚,大家都是这么用的。
简单的说就是PB自带的ARM编译器没有做到足够好,无法编译出4K以下的bin文件,使用ADS就没问题。