专业的网站建设公哪家专业,房屋在线设计网站,第三方电子商务交易平台,商业网站有哪些之前我们都是把整个系统镜像复制到RAM中运行,这样启动时间较慢,也占用内存.使用Multi-Bin的模式,将需要复制到RAM的组件和可存放在存储设备(如Nand)中的组件分开,系统启动时只需要将CE核心组件复制到内存中运行,然后需要的组件从Nand中读取即可.之前我们已经在eboot中添加了操作… 之前我们都是把整个系统镜像复制到RAM中运行,这样启动时间较慢,也占用内存.使用Multi-Bin的模式,将需要复制到RAM的组件和可存放在存储设备(如Nand)中的组件分开,系统启动时只需要将CE核心组件复制到内存中运行,然后需要的组件从Nand中读取即可.之前我们已经在eboot中添加了操作BINFS分区的支持.然后就可以进行系统镜像的定制了. 如何实现可以参考PB帮助How to Implement BinFS一节. 1.修改config.bib进行地址设置 XIPKERNEL 80001000 00400000 RAMIMAGE CHAIN 80401000 00001000 RESERVED NK 80402000 02BFF000 NANDIMAGE RAM 8C200000 01E00000 RAM FLASH 92000000 00100000 RESERVED XIPKERNEL就是我们的RAMIMAGE,即最小内核,里面存放了启动时必须复制到内存的文件,这里设置4MB大小,可以根据编译出来的XIPKERNEL.bin大小进行调整,MS帮助里用的是NK最为RAMIMAGE,由于RAMIMAGE里的文件较少,为了减少工作量,把common.bib中的少部分文件修改属性(NK-XIPKERNEL)即可. NK为NANDIMAGE,其他文件就存放在这个区域 CHAIN保持了bin文件的信息 关于RAM的设置,使用Multi-Bin可以增加更多的内存,实际上80402000~82000000范围的内存也可以作为内存来使用,但是由于两片SDRAM的地址不连续,在oemaddrtab_cfg.inc中可以看到: DCD 0x80000000, 0x32000000, 32 ; 32 MB DRAM BANK 6 DCD 0x82000000, 0x08000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1 DCD 0x84000000, 0x10000000, 32 ; nGCS2: PCMCIA/PCCARD DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3 DCD 0x88000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4 DCD 0x8A000000, 0x28000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 5 DCD 0x8C000000, 0x30000000, 32 ; 32 MB DRAM BANK 6 而这里只能设置一片连续的RAM(8C200000起始的一段),关于如何将地址不连续的两段内存同时能被CE使用,我们将在下一节进行研究. 以下为配置信息,注意XIPSCHAIN应该为CHAIN的起始地址 CONFIG AUTOSIZEON COMPRESSIONON DLLADDR_AUTOSIZEON KERNELFIXUPSON PROFILEOFF RAM_AUTOSIZEOFF ROMFLAGS0 ROM_AUTOSIZEOFF ROMSIZE03000000 ROMSTART80001000 ROMWIDTH32 XIPSCHAIN80401000 2.修改common.bib 接下来就是文件分配了,XIPKERNEL包括的主要是nk.exe,filesys.exe,还有和binfs存储相关的dll,binfs.dll,mspart.dll等,经过反复测试,需要包括的文件具体如下(可能会有不需要的文件),: nk.exe $(_FLATRELEASEDIR)/kern.exe XIPKERNEL SHXL kd.dll $(_FLATRELEASEDIR)/kd.dll XIPKERNEL SHK hd.dll $(_FLATRELEASEDIR)/hd.dll XIPKERNEL SHK osaxst0.dll $(_FLATRELEASEDIR)/osaxst0.dll XIPKERNEL SHK osaxst1.dll $(_FLATRELEASEDIR)/osaxst1.dll XIPKERNEL SHK coredll.dll $(_FLATRELEASEDIR)/coredll.dll XIPKERNEL SHXL filesys.exe $(_FLATRELEASEDIR)/filesys.exe XIPKERNEL SHM device.exe $(_FLATRELEASEDIR)/device.exe XIPKERNEL SHM devmgr.dll $(_FLATRELEASEDIR)/devmgr.dll XIPKERNEL SHM regenum.dll $(_FLATRELEASEDIR)/regenum.dll XIPKERNEL SH busenum.dll $(_FLATRELEASEDIR)/busenum.dll XIPKERNEL SH pm.dll $(_FLATRELEASEDIR)/pm.dll XIPKERNEL SHM fatfsd.dll $(_FLATRELEASEDIR)/fatfsd.dll XIPKERNEL SH diskcache.dll $(_FLATRELEASEDIR)/diskcache.dll XIPKERNEL SH fatutil.dll $(_FLATRELEASEDIR)/fatutil.dll XIPKERNEL SH fsdmgr.dll $(_FLATRELEASEDIR)/fsdmgr.dll XIPKERNEL SH binfs.dll $(_FLATRELEASEDIR)/binfs.dll XIPKERNEL SH mspart.dll $(_FLATRELEASEDIR)/mspart.dll XIPKERNEL SH ceddk.dll $(_FLATRELEASEDIR)/ceddk.dll XIPKERNEL SH wince.nls $(_FLATRELEASEDIR)/wince.nls XIPKERNEL SHU default.fdf $(_FLATRELEASEDIR)/default.fdf XIPKERNEL SH boot.hv $(_FLATRELEASEDIR)/boot.hv XIPKERNEL SH 但是将这段设置放到common.bib下会报重复定义的错误(Warning: Found duplicate entry nk.exe)因为这些文件之前都定义在NK上,这样新的设置有可能被忽略掉了,因此我将这些文件的NK属性直接修改为XIPKERNEL(先备份好common.bib,位于/PUBLIC/COMMON/OAK/FILES/common.bib) 如: IF IMGSIGN IF IMGPROFILER nk.exe $(_FLATRELEASEDIR)/kernkitlprof.exe XIPKERNEL SHXL ENDIF IMGPROFILER IF IMGPROFILER ! IF IMGNOKITL nk.exe $(_FLATRELEASEDIR)/kern.exe XIPKERNEL SHXL ENDIF IMGNOKITL IF IMGNOKITL ! nk.exe $(_FLATRELEASEDIR)/kernkitl.exe XIPKERNEL SHXL ENDIF IMGNOKITL ! ENDIF IMGPROFILER ! ENDIF IMGSIGN 3.注册表设置 [HKEY_LOCAL_MACHINE/init/BootVars] SystemHiveDocuments and Settings//system.hv ProfileDirDocuments and Settings Flagsdword:3 ;equals to Start DevMgrdword:1 RegistryFlagsdword:1 ;auto flush system.hv ; END HIVE BOOT SECTION ; CESYSGEN ENDIF FILESYS_FSREGHIVE ; HIVE BOOT SECTION ; CESYSGEN IF CE_MODULES_SDNPCID ; Default values for binfs. These can be overridden per profile [HKEY_LOCAL_MACHINE/System/StorageManager/BinFS] FriendlyNameBIN Filesystem Dllbinfs.dll Pagingdword:1 FolderBINFS [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/MSFlash] ProfileMSFlash IClassmulti_sz:{A4E7EDDA-E575-4252-9D6B-4195D48BB865} Orderdword:0 FriendlyNameMSFLASH Driver Dllsmflash.dll PrefixDSK Ioctldword:4 Flagsdword:1000 BootPhasedword:0 [HKEY_LOCAL_MACHINE/System/StorageManager/AutoLoad/MSFlash] DriverPathDrivers//BuiltIn//MSFlash ; LoadFlags 0x01 load synchronously LoadFlagsdword:1 Orderdword:0 BootPhasedword:0 ; CESYSGEN ENDIF CE_MODULES_SDNPCID ; END HIVE BOOT SECTION ; HIVE BOOT SECTION ; CESYSGEN IF CE_MODULES_SDNPCID [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/MSFlash] DefaultFileSystemBINFS PartitionDrivermspart.dll MountAsROMdword:1 MountHiddendword:1 ;hide BINFS folder FolderFlash Disk NameFLASH Disk Block Device AutoMountdword:1 AutoPartdword:1 BootPhasedword:0 Flagsdword:1000 AutoFormatdword:1 ; Keep FATFS from trying to shadow /Windows [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/MSFlash/FATFS] MountAsROMdword:0 MountHiddendword:0 ;display Flash Dish folder MountAsBootabledword:1 Flagsdword:00000014 ;FATFS_FORCE_WRITETHROUGH | FATFS_DISABLE_AUTOSCAN EnableWriteBackdword:1 CheckForFormatdword:1 ; CESYSGEN ENDIF CE_MODULES_SDNPCID ; END HIVE BOOT SECTION 最终编译出来的xip.bin为9.55MB(没有中文支持),里面包含了XIPKERNEL.bin(1.34MB),NK.bin(8.2MB),chain.bin,通过PB将xip.bin烧写到BINFS分区中.设置eboot启动读BINFS分区镜像大小(2MB),这样启动速度明显加快,可以看到BINFS文件夹(MountHidden设为0). 至此,Multi-Bin已基本实现,还剩将两段地址不连续的内存都注册给CE使用,这样内存就能大大增加了.