之前我们都是把整个系统镜像复制到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
 AUTOSIZE=ON
 COMPRESSION=ON
 DLLADDR_AUTOSIZE=ON
 KERNELFIXUPS=ON
 PROFILE=OFF
 RAM_AUTOSIZE=OFF
 ROMFLAGS=0
 ROM_AUTOSIZE=OFF
 ROMSIZE=03000000
 ROMSTART=80001000
 ROMWIDTH=32
 XIPSCHAIN=80401000

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]
   "SystemHive"="Documents and Settings//system.hv"
   "ProfileDir"="Documents and Settings"
   "Flags"=dword:3 ;equals to "Start DevMgr"=dword:1
   "RegistryFlags"=dword: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]
    "FriendlyName"="BIN Filesystem"
    "Dll"="binfs.dll"
    "Paging"=dword:1
 "Folder"="BINFS"

[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/MSFlash]
        "Profile"="MSFlash"
        "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
        "Order"=dword:0
        "FriendlyName"="MSFLASH Driver"
        "Dll"="smflash.dll"
        "Prefix"="DSK"
        "Ioctl"=dword:4     
  "Flags"=dword:1000  
  "BootPhase"=dword:0

[HKEY_LOCAL_MACHINE/System/StorageManager/AutoLoad/MSFlash]
    "DriverPath"="Drivers//BuiltIn//MSFlash"
    ; LoadFlags 0x01 == load synchronously
    "LoadFlags"=dword:1
    "Order"=dword:0
    "BootPhase"=dword: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]
    "DefaultFileSystem"="BINFS"
    "PartitionDriver"="mspart.dll"
    "MountAsROM"=dword:1
    "MountHidden"=dword:1  ;hide BINFS folder
    "Folder"="Flash  Disk"
    "Name"="FLASH Disk Block Device"
 "AutoMount"=dword:1 
    "AutoPart"=dword:1  
    "BootPhase"=dword:0
    "Flags"=dword:1000 
    "AutoFormat"=dword:1

; Keep FATFS from trying to shadow /Windows
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/MSFlash/FATFS]
    "MountAsROM"=dword:0
 "MountHidden"=dword:0  ;display Flash Dish folder
    "MountAsBootable"=dword:1
    "Flags"=dword:00000014    ;FATFS_FORCE_WRITETHROUGH | FATFS_DISABLE_AUTOSCAN
    "EnableWriteBack"=dword:1
    "CheckForFormat"=dword: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使用,这样内存就能大大增加了.

WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(11)-BINFS在Nand上的实现(Multi-Bin的实现)相关推荐

  1. Windows CE SDHC驱动简析(1)-驱动架构(基于WinCE5.0 SMDK2410 BSP的SDHC驱动)

    Windows CE的SD卡驱动包括总线驱动(bus driver),主控制器驱动(host controller driver)和客户端驱动(client driver). 总线驱动是客户端驱动和主 ...

  2. Windows CE串口驱动简析(2)-PDD层实现:CReg2410Uart和TX部分(基于WinCE5.0 SMDK2410 BSP的Serial驱动)

    二.PDD层 1.PDD架构 现在我们就来看看SMDK2410中串口驱动的PDD部分. MDD层和PDD COMMON层都是由微软提供的,一般情况下我们基本无须改动.微软为开发者提供了一个CSeria ...

  3. RV1109开发板ssh服务器移植到arm开发板

    RV1109开发板ssh服务器移植到arm开发板 ssh功能移植到RV1109开发板的,由于RV1109的SDK中,没有telnet功能,有时候adb功能在量产中需要关闭,避免造成设备留有漏洞,造成安 ...

  4. 基于全志A33开发板linux系统移植学习记录(Boot0)

    基于全志A33开发板linux系统移植学习记录 第一章 Boot0基于ARMGCC的编译与修改 文章目录 基于全志A33开发板linux系统移植学习记录 前言 一.全志A33简介以及上电引导流程 二. ...

  5. opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译

    opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译 原文我是用有道笔记记录的,下面排版不是很好,可参看有道笔记原文:h ...

  6. 单片机实验-开发板动态显示电路移植

    在前面,我们对于电路的动态显示进行了一定的学习与了解. (即数码管显示实验与数码管动态显示实验) 详见:单片机数码管实验 这次,我们将进一步学习一下开发板动态显示电路移植的知识. 即上文实验项目三的内 ...

  7. <第0章>树莓派4B开发板概述

    树莓派 4 代 B 型(Raspberry Pi 4 Model B) 树莓派 (Raspberry Pi)基金会于 2019 年 6 月 25 日正式发布了Raspberry Pi 4 Model ...

  8. fl2440开发板之u-boot移植

    **************************************************************************************************** ...

  9. zc706开发板的linux移植,Zynq—Linux移植学习笔记(十)

    在zynq开发板zc706上,网络通路由下面三个设备组成: 其中zynq负责对phy进行配置,当zynq上的网络控制器以及phy完成正确配置时,能够看到RJ45上面的黄灯亮,此时表明链路已经通了.如果 ...

最新文章

  1. 使用iphone功能来实现远程监控
  2. C语言库函数大全及应用实例七
  3. Transact_SQL小手册
  4. nginx服务器绑定域名和设置根目录的方法
  5. 在 windows 命令行下快速检测与排除网络故障
  6. html5怎么设置drop,HTML5 拖放(Drag 和 Drop)
  7. C++设计模式-桥接模式
  8. 面试题 04.08. 首个共同祖先
  9. 一次性视频内窥镜行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  10. springboot controller调用service_秀!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!...
  11. 浮点数 字符串 java_Java如何将浮点数转换为字符串
  12. 机器学习期末复习题题库-单项选择题
  13. SVGA动画在直播源代码的运用——直播礼物的实现
  14. matlab绘图工具
  15. html文件怎么转换为swf文件,在html里怎么添加flash视频格式(flv、swf)文件
  16. 快速消除Word文档中空格
  17. 微信公众账号开发教程(二) 基础框架搭建——转自http://www.cnblogs.com/yank/p/3392394.html...
  18. speedoffice(Word)怎么添加页码
  19. 软著申请流程及费用 —— 计算机软件著作权登记证书_知乎
  20. word编辑文字时光标随意跳动问题

热门文章

  1. zval php,PHP内核之zval
  2. mysql-bin_MySQL - binlog日志简介及设置
  3. Mybatis insert返回主键ID
  4. 面向对象之编写一个完整的类
  5. 【C语言进阶深度学习记录】三十七 C/C++中造成程序内存错误的原因(野指针)
  6. 【软件开发底层知识修炼】二十四 ABI之函数调用约定
  7. 如何利用Featue对特定的文档库或列表添加listviewtoolbar上的button
  8. AT1984 Wide Swap
  9. Java笔记(08):面向对象--抽象类
  10. javaweb基础(40)_jdbc框架