5.06.2008

BINFS

剛好 MSDN 上有一篇how to - "How to Implement BinFS"

第一步:Bootloader Support for BinFS

bootloader 要能夠在media (例如:Nandflash)上 create partition(BINFS & extend)。
這要link bootpart library。

bootloader create 好 BINFS 和 extended partition,OS就可以在 extended partition 上create data partition。

bootpart library 還可以 create boot partition 來存放 boot parameters :MBR 放在那一個block,BinFS region。

Bootpart library 在 %_WINCEROOT%\public\Common\Oak\Drivers\EthDbg\Bootpart

加入以下的registry後,BOOTPART 就可以認得 Bootpart create的 BOOT 和 BINFS partition:
[HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
"20"="BOOT"
"21"="BINFS"



第二步 修改 Config.bib

增加一個 EXT 記憶體區域,Type是 NANDIMAGE

NANDIMAGE Type 是 "不會被allocate memory" 的區域。 (但是還是要宣告出一塊address range ?)。
NK   800B8000  00300000 RAMIMAGE
EXT 803B8000 01000000 NANDIMAGE
CHAIN 813B8000 00001000 RESERVED
NK (RAMIMAGE)這塊區域是在boot的時候,會被load到RAM里的,所以BINFS需要的driver 都要放到NK中:
  • 有一堆....NK.exe, Kernel.dll, Coredll.dll, Oalioctl.dll, Fsdmgr.dll, mspart.dll, romfsd.dll, binfs.dll filesys.dll,, flash driver,, device.dll... 一堆
然後修改 CONFIG 區域,有三點:
  • RAM_AUTOSIZE=OFF
  • ROM_AUTOSIZE=OFF
  • 設定 XIPCHAIN=chain region 的開始位址。

第三步 修改 Platform.reg

BinFS Registry Settings
[HKEY_LOCAL_MACHINE\System\StorageManager\BinFS]
"FriendlyName" = "Bin FileSystem"
"Dll" = "binfs.dll"
"Paging"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManger\Profile\MSFlash]
"DefaultFileSystem"="BINFS"
"PartitionDriver"="mspart.dll"
"MountHidden"=dword:1
"MountAsRom"=dword:1
"Folder"="NAND Flash"
"Name"="Flash Disk Block Device"


這樣就完了 ? 不知道要怎樣把build出來的image (*.nb0, *.bin) download 到nandflash 中,用 Kitl 嗎? 還是要 用 eboot bootpart ?

ref 這一篇後...
這樣做之後,Config.bib 中,RAM 區域的開始位址,就可以設為 EXT (NANDIMAGE)的起始位址,也就是說,使用 BINFS 後,OS 的 RAM 就多了 (NANDIMAGE)這塊區域可以運用了。
當所有 NANDIMAGE 區域的 dll 都不需要 load 的時候,OS 的 RAM 就可以使用 這整塊,全部的區域。


可不可以這樣說:使用BINFS 後,RAM 可以增加的size,最大是 NANDIMAGE 這麼大。..

1 則留言:

James 提到...

Dear Sir,
我有一些XIP的問題想要請教,
不知是否方便連絡?
我的e-mail
chayoung.tw@yahoo.com.tw