mult—XIP启动失败
最近在Ti OMAP3530上倒WINCE6.0,想实现Mult-xip,设置基本搞定,编译也没有问题,但是烧写倒nand里系统就是起不来
我是这样做的:
系统分3个区——第一个BootPart,放置XipKernel.bin,第二个BINFS,放置NK.bin,第三个FAT。
原计划系统首先把Xipkernel.bin解压,加载到0x80002000,然后从Bootloader跳转到该地址,完成系统引导。
我的配置:
//conifg.bib
MEMORY
; Name VA Length Type
ARGS 0x80000000 0x1000 RESERVED
XIPKERN 0x80002000 0x01FFE000 RAMIMAGE
CHAIN 0x80001000 0x00001000 RESERVED
NK 0x82000000 0x02800000 NANDIMAGE
ENDIF
RAM 0x82000000 0x02800000 RAM
DISPLAY 0x84000000 0x01000000 RESERVED
nk.exe:dwOEMFailPowerPaging 00000000 00000001 FIXUPVAR
nk.exe:dwOEMDrWatsonSize 00000000 0004B000 FIXUPVAR
nk.exe:dwOEMPRCMCLKSSetupTime 00000000 00000140 FIXUPVAR
nk.exe:dwOEMHighSecurity 00000000 00000002 FIXUPVAR
nk.exe:pdwXIPLoc 00000000 0x80001000 FIXUPVAR
CONFIG
COMPRESSION=ON
KERNELFIXUPS=ON
AUTOSIZE=ON
FSRAMPERCENT=0x80808080
RAM_AUTOSIZE=OFF
ROM_AUTOSIZE=OFF
ROMSIZE=04800000
ROMSTART=80000000
ROMWIDTH=32
XIPSCHAIN=0x80001000
DLLADDR_AUTOSIZE=ON
AUTOSIZE_ROMGAP=10000
AUTOSIZE_DLLADDRGAP=0
AUTOSIZE_DLLDATAADDRGAP=0
AUTOSIZE_DLLCODEADDRGAP=0
PROFILE=OFF
IF IMGNAND
ROMOFFSET=0x40000000
ENDIF
MODULES
nk.exe $(_FLATRELEASEDIR)\oal.exe XIPKERN SH
kernel.dll $(_FLATRELEASEDIR)\kern.dll XIPKERN SH
coredll.dll $(_FLATRELEASEDIR)\coredll.dll XIPKERN SH
oalioctl.dll $(_FLATRELEASEDIR)\oalioctl.dll XIPKERN SHK
k.coredll.dll $(_FLATRELEASEDIR)\k.coredll.dll XIPKERN SHMK
filesys.dll $(_FLATRELEASEDIR)\filesys.dll XIPKERN SH
fsdmgr.dll $(_FLATRELEASEDIR)\fsdmgr.dll XIPKERN SH
mspart.dll $(_FLATRELEASEDIR)\mspart.dll XIPKERN SH
shell.exe $(_FLATRELEASEDIR)\shell.exe XIPKERN SH
romfsd.dll $(_FLATRELEASEDIR)\romfsd.dll XIPKERN SHK
binfs.dll $(_FLATRELEASEDIR)\binfs.dll XIPKERN SH
fpcrt.dll $(_FLATRELEASEDIR)\fpcrt.dll XIPKERN SH
k.fpcrt.dll $(_FLATRELEASEDIR)\fpcrt.dll XIPKERN SHMK
device.dll $(_FLATRELEASEDIR)\device.dll XIPKERN SHMK
udevice.exe $(_FLATRELEASEDIR)\udevice.exe XIPKERN SHM
devmgr.dll $(_FLATRELEASEDIR)\devmgr.dll XIPKERN SHMK
regenum.dll $(_FLATRELEASEDIR)\regenum.dll XIPKERN SHK
busenum.dll $(_FLATRELEASEDIR)\busenum.dll XIPKERN SHK
pm.dll $(_FLATRELEASEDIR)\pm.dll XIPKERN SHMK
exfat.dll $(_FLATRELEASEDIR)\exfat.dll XIPKERN SHK
diskcache.dll $(_FLATRELEASEDIR)\diskcache.dll XIPKERN SH
cachefilt.dll $(_FLATRELEASEDIR)\cachefilt.dll XIPKERN SHK
fatutil.dll $(_FLATRELEASEDIR)\fatutil.dll XIPKERN SH
kbdus.dll $(_FLATRELEASEDIR)\kbdus.dll XIPKERN SHK
imaging.dll $(_FLATRELEASEDIR)\imaging.dll XIPKERN S
mlang.dll $(_FLATRELEASEDIR)\mlang.dll XIPKERN SH
aygshell.dll $(_FLATRELEASEDIR)\aygshell.dll XIPKERN SH
ceddk.dll $(_FLATRELEASEDIR)\ceddk.dll XIPKERN SH
ceshell.dll $(_FLATRELEASEDIR)\ceshell.dll XIPKERN SH
omap3430_dma.dll $(_FLATRELEASEDIR)\omap3430_dma.dll XIPKERN SHK
tievm3530_nand.dll $(_FLATRELEASEDIR)\tievm3530_nand.dll XIPKERN SHK
twl4030_twl.dll $(_FLATRELEASEDIR)\twl4030_twl.dll XIPKERN SH
omap3430_mcbsp.dll $(_FLATRELEASEDIR)\omap3430_mcbsp.dll XIPKERN SH
omap3430_hdq.dll $(_FLATRELEASEDIR)\omap3430_hdq.dll XIPKERN SH
gpio.dll $(_FLATRELEASEDIR)\gpio.dll XIPKERN SH
evm3530_bus.dll $(_FLATRELEASEDIR)\evm3530_bus.dll XIPKERN SH
omap3430_spi.dll $(_FLATRELEASEDIR)\omap3430_spi.dll XIPKERN SH
omap3430_vrfb.dll $(_FLATRELEASEDIR)\omap3430_vrfb.dll XIPKERN SH
kitl.dll $(_FLATRELEASEDIR)\kitl.dll XIPKERN SH
Simple.exe $(_FLATRELEASEDIR)\Simple.exe XIPKERN SH
FILES
wince.nls $(_FLATRELEASEDIR)\wince.nls XIPKERN SHU
boot.hv $(_FLATRELEASEDIR)\boot.hv XIPKERN SH
default.hv $(_FLATRELEASEDIR)\default.hv XIPKERN SH
user.hv $(_FLATRELEASEDIR)\user.hv XIPKERN SH
ceconfig.h $(_FLATRELEASEDIR)\ceconfig.h XIPKERN
initobj.dat $(_FLATRELEASEDIR)\initobj.dat XIPKERN SH
initdb.ini $(_FLATRELEASEDIR)\initdb.ini XIPKERN SH
explore.lnk $(_FLATRELEASEDIR)\explore.lnk XIPKERN SH
control.lnk $(_FLATRELEASEDIR)\control.lnk XIPKERN SH
//注册表:
; @CESYSGEN IF FILESYS_FSREGHIVE
; HIVE BOOT SECTION
;
; We want start both storage and device manager. Flags value is combination of
; 0x0001 Start storage manager in boot phases 0 and 1 to load the boot
; file system.
; 0x0002 Start device manager in boot phase 1 to load the boot file system.
;
[HKEY_LOCAL_MACHINE\Init\BootVars]
"SYSTEMHIVE"="Documents and Settings\\system.hv" ;system.hv会保存到\HDD\Documents and Settings\system.hv
"PROFILEDIR"="Documents and Settings" ;user.hv会保存到\HDD\Documents and Settings\default\user.hv
"Start DevMgr"=dword:1 ;这个说是启动device.exe,但是wince 5.0好像不用这个
"DefaultUser"="default" ;咱们只有一个用户default,基本上就是决定user.hv的路径了
"Flags"=dword:3 ;这个应该是wince 5.0下决定在哪个阶段启动device.exe的表项
"RegistryFlags"=dword:1 ;这个就是设置注册表每次改动后自动flush到system.hv
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MSFlash]
"Flags"=dword:00011000
;xiao add binfs
[HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
"21"="BINFS"
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\BINFS]
"Folder"="BINFS"
"FriendlyName"="Bin FileSystem"
"Dll"="binfs.dll"
"Paging"=dword:1
; MountFlags:
; 0x10 specifies that this file system is to be mounted as an external
; ROM filesystem shadowing the \windows directory
; 0x1 specifies that the mountpoint \BINFS is to be hidden
;
"MountFlags"=dword:10
"BootPhase"=dword:0
"Flags"=dword:1000
"MountHidden"=dword:1
"MountAsROM"=dword:1
;add end
; END HIVE BOOT SECTION
; @CESYSGEN ELSE
; @CESYSGEN ENDIF FILESYS_FSREGHIVE
;-------------------------------------------
;-- Storage Manager Configuration ----------------------------------------------
; @CESYSGEN IF CE_MODULES_FSDMGR
;
; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MSFlash]
"DriverPath"="Drivers\\BuiltIn\\MSFlash"
"LoadFlags"=dword:1
"BootPhase"=dword:0
"Order"=dword:0
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash]
"DriverPath"="Drivers\\BuiltIn\\MSFlash"
"LoadFlags"=dword:1
"BootPhase"=dword:0
"Order"=dword:0
"AutoMount"=dword:1
"AutoPart"=dword:0
"AutoFormat"=dword:0
"DefaultFileSystem"="FATFS"
"PartitionDriver"="mspart.dll"
"Name"="Microsoft Flash Disk"
"MountAsBootable"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\BINFS]
"MountHidden"=dword:1
"MountAsROM"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\FATFS]
"MountAsBootable"=dword:1
"Flags"=dword:00000014
"FormatTFAT"=dword:1
"EnableWriteBack"=dword:1
"MountBootable"=dword:1
"Paging"=dword:1
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MSFlash]
"Dll"="nand.dll"
"Prefix"="DSK"
"Index"=dword:0
"Order"=dword:4
"MemBase"=multi_sz:"6E000000","08000000"
"MemLen"=multi_sz:"00001000","00001000"
"DmaCh"=dword:3
; CE_DRIVER_BLOCK_GUID
"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
"Profile"="MSFlash"
"Flags"=dword:1000
; END HIVE BOOT SECTION
; @CESYSGEN ENDIF CE_MODULES_FSDMGR
;-----------------------------------------------
[解决办法]
跳转地址不对,内核在内存解压后跳转去执行的地址没对,好好对下地址。
[解决办法]
要玩xip,得從頭開始慢慢看...
你這樣摸蝦,摸不到的