==========================step1:========================================================
修改config.bib文件.内核子集XIPKERNEL的SIZE根据你自己编译出来的XIPKERNEL.BIN实际大小调整,
XIPKERNEL BASE=8C200000,XIPKERNEL SIZE = 0013F000 内存类型是RAMIMAGE
CHAIN BASE = XIPKERNEL BASE + XIPKERNEL SIZE; CHAIN SIZE = 00001000 内存类型是RESERVED
NK BASE = CHAIN BASE + CHAIN SIZE;
NK SIZE根据你平台定制的实际NK.BIN的大小调整, 内存类型是 NANDIMAGE
RAM BASE = NK BASE + NK SIZE; RAM SIZE = 90000000 - RAM BASE, 内存类型是 RAM.
pdwXIPLoc 是一个指定地址的全局变量,用于InitRomChain(),它的地址必须等于CHAIN BASE.
XIPSCHAIN=8C33F000 也必须等于CHAIN BASE.
MEMORY
XIPKERNEL 8C200000 0013F000 RAMIMAGE
CHAIN 8C33F000 00001000 RESERVED
NK 8C340000 00D00000 NANDIMAGE
RAM 8D040000 02FC0000 RAM
; RAM 8C340000 03CC0000 RAM
pdwXIPLoc 00000000 8C33F000 FIXUPVAR
; FLASH 92000000 00100000 RESERVED
; Common RAM areas
AUD_DMA 8c002000 00000800 RESERVED
SDIO_DMA 8c010000 00010000 RESERVED
ARGS 8C020800 00000800 RESERVED
DBGSER_DMA 8c022000 00002000 RESERVED
SER_DMA 8c024000 00002000 RESERVED
IR_DMA 8c026000 00002000 RESERVED
; EDBG 8c030000 00020000 RESERVED
; CAMERA 8c050000 000A0000 RESERVED
DISPLAY 8c100000 00100000 RESERVED
CONFIG
AUTOSIZE=ON
; ROM_AUTOSIZE=ON
DLLADDR_AUTOSIZE=ON
COMPRESSION=ON
KERNELFIXUPS=ON
XIPSCHAIN=8C33F000
PROFILE=OFF
ROMFLAGS=00
ROMSTART=8C200000
ROMWIDTH=32
ROMSIZE=00D00000
【注】PB能生成XIP.BIN,这项一定要定义XIPSCHAIN=8C33F000,不然生成不了XIP.BIN的。
在setting里 设置环境变量中,加上IMGMULTIBIN = 1,这个是对XIP BIN的支持,一定要加上。
====================================step2:=======================================
注册表的修改,platform.reg
; HIVE BOOT SECTION
; @CESYSGEN IF CE_MODULES_SDNPCID
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Support BINFS Section
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Add BinFS to partition table
[HKEY_LOCAL_MACHINE/System/StorageManager/PartitionTable]
"21"="BINFS"
[HKEY_LOCAL_MACHINE/System/StorageManager/BINFS]
"Folder"="BINFS"
"FriendlyName"="Bin FileSystem"
"Dll"="binfs.dll"
"Paging"=dword:1
"MountFlags"=dword:10
"BootPhase"=dword:0
[HKEY_LOCAL_MACHINE/System/StorageManager/AutoLoad/MSFlash]
"DriverPath"="Drivers//BuiltIn//MSFlash"
; LoadFlags 0x01 == load synchronously
"LoadFlags"=dword:1
"Order"=dword:0
; "MountFlags"=dword:10
"BootPhase"=dword:0
"Flags"=dword:1000
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/MSFlash]
"Prefix"="DSK"
"Order"=dword:0
"Dll"="smflash.dll"
"Profile"="MSFlash"
; "MountFlags"=dword:10
"FriendlyName"="MSFLASH Driver"
"BootPhase"=dword:0
"Flags"=dword:1000
; Bind BINFS to the block driver
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/MSFlash]
"DefaultFileSystem"="BINFS"
"PartitionDriver"="mspart.dll"
"AutoMount"=dword:1
"AutoPart"=dword:1
"Folder"="NandFlash"
"Name"="Microsoft Flash Disk"
"BootPhase"=dword:0
"Flags"=dword:1000
"MountAsHidden"=dword:1
"MountAsRom"=dword:1
; "MountFlags"=dword:00000004
; "MountHidden"=dword:00000000
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/MSFlash/FATFS]
"FriendlyName"="FAT FileSystem"
"Dll"="fatfsd.dll"
"Flags"=dword:00280014
"Paging"=dword:1
"CacheSize"=dword:0
"EnableCacheWarm"=dword:0
"EnableCache"=dword:1
"MountAsBootable"=dword:1
"MountAsRom"=dword:1
; "MountAsRoot"=dword:1
; END HIVE BOOT SECTION
==============================step3:====================================
系统选用的文件系统必须是RAM and ROM Filesystem,不能用ROM Only.
==============================step4:====================================
要知道内核子集XIPKERNEL.BIN必须包含的modules和Files是那些,根据我的实践得出,
下面这些文件是必需的:
"nk.exe",
"coredll.dll",
"filesys.exe",
"fatfsd.dll",
"diskcache.dll",
"fatutil.dll",
"binfs.dll",
"fsdmgr.dll",
"mspart.dll",
"smflash.dll",
"boot.hv",
其它的可选.
==============================step5:=====================================
使用preromimage.bat和processbib.exe程序,把它们拷贝到你的PLATFORM/SMDK2440/FILES/目录下.
到此改动就算结束了,下面就是开始Build and Sysgen.
生成了XIP.BIN之后烧写到NAND FLASH上,需要你的BOOT支持分区,在烧写的时候自动创建BINFS分区和FAT分区,
如果不幸的你用的不是EBOOT的话又不能创建BINFS和FAT分区的话就麻烦大了.
系统起来之后可以看到有个BINFS目录和一个NandFlash目录.
==============================step6:====================================
最后一步,修改一下ce.bib的
XIPKERNEL 8C200000 0013F000 RAMIMAGE
CHAIN 8C33F000 00001000 RESERVED
NK 8C340000 00D00000 NANDIMAGE
; RAM 8D040000 02FC0000 RAM
RAM 8C340000 03CC0000 RAM
使RAM的起始地址等于NK的起始地址,这里就是放大了RAM的空间,用命令行方式romimage ce.bib,
生成XIPKERNEL.BIN的文件烧到NAND FLASH中去就可以了,有人有问题了发现XIPKERNEL.BIN太小烧不进去,
在OEMVerifyMemory()判断里把它判断成了IMAGE_TYPE_RAMIMAGE,所以不写到FLASH了.把这段代码注释掉就好了.
/* comment for fix if the image too small and locate in range,then the image type will change to ram image and cause the image can not write to flash.
// Is it a ram image?
else if ((dwStartAddr >= ROM_RAMIMAGE_START) &&
((dwStartAddr + dwLength - 1) < (ROM_RAMIMAGE_START + ROM_RAMIMAGE_SIZE)))
{
// RETAILMSG(1, (TEXT("Downloading RAM image/r/n")));
g_ImageType = IMAGE_TYPE_RAMIMAGE;
return TRUE;
}
*/
好了,完成,你的程序内存将会是61774K左右.