WINCE6.0文件系统及存储管理器
*******************************LoongEmbedded********************************
作者:LoongEmbedded
時間:2010.12.03
類別:WINCE嵌入式系統
********************************LoongEmbedded********************************
?
?
Filesys.dll由對象存儲,ROM文件系統和存儲管理器組成,其中:
對象存儲:包含RAM注冊表,數據庫和RAM文件系統。
存儲管理器:其功能由系統中的fsdmgr.dll模塊來實現,它由塊設備驅動程序管理器(block driver manager)、分區管理器(partition managerr)和文件系統驅動程序管理器(file system driver manager,也叫FSD manager),見下圖
圖1
?
1.對象存儲
對象存儲實質是一個內存堆,由filesys.dll控制,只要后備電源有電,則對象存儲中的信息就能夠得到保持,RAM存儲芯片構成了對象存儲的物理基礎,這里的RAM芯片是指SDRAM。對象存儲最多可達256MB的RAM,WINCE6.0為對象存儲中的每一個對象都分配了一個唯一的對象標識符(windows CE object identifier,CEOID)該標識符的作用就是用于訪問對象存儲中的對象,那么什么是對象呢?
下面這些都是對象:
*** 注冊表中的一個鍵
*** 注冊表中的一個值
*** 一個文件
*** 文件數據中大小為4-KB的一部分
*** 數據庫中的一條記錄,做多可保存4KB數據
*** 數據庫中的一條記錄的擴展信息,也可保存4KB數據
*** 一個數據庫
?
1.1?? RAM注冊表
WINCE6.0的注冊表是用來保存應用程序,驅動程序和用戶的設定以及其他一些配置信息的,WINCE6.0支持基于RAM的注冊表(RAM-Based Registry )和基于Hive的注冊表(Hive-Based Registry),其中基于RAM的注冊表把整個注冊表作為一個對象存儲堆存放在系統的內存中。
?
基于RAM的注冊表,其所有的數據保存在對象存儲中(也即保存在內存堆中,更直觀來說是保存在SDRAM中),這樣,只要SDRAM保存不停地刷新,那么RAM注冊表中的數據就會一直保持。但如果SDRAM斷電,數據就會丟失。所以基于RAM的注冊表用在經常熱啟動(warm boot)的系統中比較有效率,而如果用在經常冷啟動(colde boot)的系統的效率就較低。其中有電池作為后備電源為SDRAM供電的單用戶設備是最適合使用基于RAM的注冊表的。
?
1.2?? RAM文件系統
WINCE6.0提供3中文件系統,分別是RAM文件系統、ROM文件系統和可安裝文件系統。WINCE6.0中使用的文件系統,其根目錄為“/”,所有的文件系統都被mount到根目錄“/”下面,ROM文件系統通常直接掛載到/Windows目錄,RAM文件系統通常直接掛載到根目錄下,也就是說,根目錄下除了掛載的外存目錄和/Windows目錄之外的所有文件都位于RAM文件系統中,見下圖
圖2
RAM文件系統由FSD(file system driver) Manager管理,WINCE6.0文件系統的配置,由注冊表實現,一般在[HKLM/System/StorageManager]中,比如:
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH/FATFS]
??? "Flags"=dword:14
???????? "Folder"="ResidentFlash"
??? "FormatExfat"=dword:1
??? "CheckForFormat"=dword:1
??? "EnableWriteBack"=dword:1
IF IMGHIVEREG???
??? "MountAsBootable"=dword:1
ENDIF ;IMGHIVEREG
?
在定制WinCE操作系統時,我們可以選擇ROM-only 的文件系統或RAM and ROM的文件系統。當選擇RAM and ROM的文件系統時,根目錄文件系統在內存當中,掉電即丟失。為了實現根文件系統和注冊表的保存,即在冷啟動時不丟失,我們需要選擇ROM and RAM file system的文件系統和HIVE-Based注冊表,以將存儲空間Mount成根目錄,并配置注冊表使其支持HIVE-Based注冊表。
?
1.3?? 屬性數據庫
WINCE6.0提供CEDB(WINCE Database)和EDB(Embedded Database)這兩種數據庫,其中CEDB在字節流的基礎上,對文件進行進一步的抽象,提供了與關系型數據庫類似的數據結構化存儲和訪問。
?
2. ROM文件系統
WINCE6.0的內部文件系統控制對ROM的訪問,也提供了對位于RAM的對象存儲的文件存儲,WINCE6.0支持兩種可用的文件系統:RAM and ROM文件系統和ROM文件系統。RAM and ROM文件系統提供了對象存儲里的文件存儲以及對ROM的訪問,而ROM文件系統不允許應用程序將文件存儲在對象存儲里,通過根目錄下的windows目錄可以訪問ROM中的數據。ROM文件系統連接到統一文件系統中的“/Windows”文件夾,這意味著ROM中的所有文件均可作為“/Windows”文件夾中的只讀文件來訪問。
?
3.存儲管理器(storage manager)
?
存儲管理器負責管理系統中所有的外圍存儲設備,包括管理它們所有的文件系統和塊驅動。所有的文件、數據和容量都是通過存儲管理器來操作的,存儲管理器的功能由系統中的fsdmgr.dll模塊實現,由下面三部分組成:
⑴文件系統驅動程序管理器(File System Driver Manager,FSD Manager)。
⑵分區管理器(Partition Manager)。
⑶塊設備驅動程序管理器(Block Driver Manager)
存儲管理器的體系結構如下圖所示:
圖3
從上圖可以知道存儲管理器是一個分層結構,由文件系統過濾器(File system filters)、文件系統驅動程序(File system dirver)、分區驅動程序(Partition driver)和存儲驅動程序(Block driver)組成。下面是common.reg總關于存儲管理器的注冊表信息
; This tells Filesys to load FSDMGR
[HKEY_LOCAL_MACHINE/System/StorageManager]
??? "Dll"="fsdmgr.dll"
??? "PNPUnloadDelay"=dword:1000
fsdmgr.dll是存儲管理器的表現形式,"PNPUnloadDelay"是指存儲管理器在接收到即插即用設備的卸載通知后的延時時間,具體存儲管理器需要管理的存儲設備的注冊表信息在HKEY_LOCAL_MACHINE/System/StorageManager/Profiles下。
?
?
3.1 文件系統過濾器
?
文件系統過濾器是一個導出文件系統入口的DLL,這些入口映射到標準的文件系統函數,比如CreateFile函數和CreateDriectory函數。文件系統過濾器用于處理對文件系統的調用,此后文件系統才能獲得這些調用,也就是說存儲管理器在調用文件系統API之前先調用文件系統過濾器的過濾函數,這樣就允許對文件訪問進行某些特殊的處理,因為文件系統過濾器攔截對文件系統的調用,所以可以對文件數據的加密、解密、壓縮甚至掃描文件是否存在病毒等。
?
文件系統過濾器是輕量級(lightweight)的文件系統驅動(FSDs),它導出鉤子函數(hook functions)是FSD_HookVolume()和FSD_UnhookVolume(),而不是磁盤掛載函數FSD_MountDisk()和FSD_UnmountDisk(),下面介紹介紹這個幾個函數:
⑴FSD_HookVolume():在存儲管理器加載文件系統過濾器的時候會調用這個入口函數,此函數是由文件系統的導出函數,并且被文件系統磁盤管理器(file system disk manager,FSDMGR)直接調用。
⑵ FSD_UnhookVolume():在存儲管理器卸載文件系統過濾器的時候會調用這個入口函數,此函數是由文件系統的導出函數,并且被文件系統磁盤管理器(file system disk manager,FSDMGR)直接調用。
⑶ FSD_MountDisk():設備管理器調用這個函數來掛載包含具體文件類型的指定磁盤,比如可以在根目錄下掛載ResidentFlash盤符,這個盤符是基于FATFS文件系統來操作nandflash。
?
⑷ FSD_UnmountDisk():設備管理器調用這個函數來卸載指定的盤符。
?
還有很重要的一點是文件系統驅動管理器(FSD Manager)加載文件系統驅動(FSDs,files system drivers)和文件系統過濾器。
?
3.1.1 文件系統過濾器的注冊表路徑
?
HKEY_LOCAL_MACHINE/System/StorageManager/Filters
表示文件系統過濾器對所有的文件類型都有效,也就是說沒有篩選。
?
HKEY_LOCAL_MACHINE/System/StorageManager/ MyFileSystem /Filters
MyFileSystem是指具體的文件系統,如FATFS、EXFAT、CD/UDFS等文件系統,這個路徑指文件系統過濾器對指定的文件系統有效。
?
HKEY_LOCAL_MACHINE/System/StorageManager/AutoLoad/ MyFileSystem /Filters
表示文件系統過濾器對自動加載的指定的文件系統有效,這里的自動加載是指由存儲管理器來直接加載存儲設備的驅動(block driver)。
?
HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/ MyProfileName / MyFileSystem /Filters
MyProfileName是指Profile的名字,這個路徑指文件系統過濾器對指定存儲硬件的文件系統有效,比如我們項目的Platform.reg下相關內容如下:
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/NANDFLASH]
??? "Prefix"="DSK"
??? "Dll"="smflash.dll"
??? "Index"=dword:1
??? "Order"=dword:0
??? "Profile"="NANDFLASH"
??? "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
IF IMGHIVEREG
??? "Flags"=dword:00001000
ENDIF ;IMGHIVEREG
…………………….
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH/FATFS/Filters/CacheFilt]
??? "Dll"="cachefilt.dll"
"LockIOBuffers"=dword:1
這里的MyProfileName是NANDFLASH,MyFileSystem是FATFS,表示文件過濾器(在此為cache的過濾器cachefilt.dll,不知是否該這樣理解?)對加載在NANDFLASH上的文件系統有效,也就是如果要讀寫NANDFLASH上的數據,只有以FATFS文件系統格式才能訪問,否則被文件過濾器過濾掉,這樣就無法讀寫NANDFLASH上的數據。
?
3.1.2 文件系統過濾器注冊表值
用任何有效的注冊表鍵值來,比如添加過濾器的名字,過濾DLL的值和過濾器的order的值,通過這些操作可以建立文件系統過濾器,比如
?
[HKEY_LOCAL_MACHINE/System/StorageManager/.../Filters/FilterName]
"dll"="filter.dll"
"Order"=dword:x
堆棧上過濾器的order是由高到低,最高order(0)的過濾器被首先加載,更低order的過濾器后面接著加載。如果order的值沒有指定,那么order的值默認被設置為0xFFFFFFFF,但如果多于一個的過濾器沒有指定order的值,那么這些沒有指定order的值的過濾器的加載順序是不明確的。
?
3.1.3 文件系統過濾器的sample
?
文件系統過濾器的例子在下面的目錄下
%_WINCEROOT%/Public/Common/Oak/Drivers/FSD/EncFilt
%_WINCEROOT%/Public/Common/Oak/Drivers/FSD/FSDSpy
其相關的注冊表信息如下:
[HKEY_LOCAL_MACHINE/System/StorageManager/FATFS/filters/FSDSPY]
?? "Dll"="fsdspy.dll"
?? "Order"=dword:0
[HKEY_LOCAL_MACHINE/System/StorageManager/FATFS/filters/ENCRYPT]
?? "Dll"="fsdenc.dll"
?? "Order"=dword:1
?
3.2 文件系統驅動
?
文件系統驅動是實現對應的文件系統的DLL,文件驅動將存儲設備上的數據組織為文件和文件夾來對設備進行操作。應用程序操作文件是通過wince 文件系統提供的接口進行操作,如:可以通過CreateFile函數,打開或創建一個文件。接下來,系統是如何去完成這個任務的呢?比如我們要操作SD卡上的文件,SD卡上也有自己的文件系統,用于組織和管理文件,wince文件系統是如果操作這些文件的呢?這時候,FSD(文件系統驅動)就發揮它的作用了。文件的操作共涉及到六個層次:
⑴應用程序:用戶通過應用程序操作文件。
⑵wince文件系統:操作系統的一部分,根據用戶的請求,判斷操作的是那個設備上的文件,以便調用相應的驅動。
⑶文件系統驅動:操作系統沒辦法直接和設備驅動進行交互,需要通過文件系統驅動,實現與設備驅動的操作,以實現文件操作。
⑷分區驅動:主要實現對存儲設備的邏輯劃分。
⑸設備驅動:實現了設備上的操作,包括文件操作等。
⑹設備上的文件系統:組織和管理設備上的文件存儲。
從以上的分析可以知道,文件系統在操作系統和設備驅動之間起到了一個連接作用。在實現的時候,文件系統驅動基于設備驅動,實現了wince文件系統中的文件操作函數,如CreateFile等。
?
3.3 分區驅動
分區是對存儲設備的邏輯劃分,WINCE6.0允許物理磁盤(我們常用的是nandflash)包含多個分區,并且每個分區可以格式化為不同的文件系統,但是每個設備只能由一個分區驅動程序來管理。下面是src/bootloader/eboot/nand.cpp文件的WriteOSImageToBootMedia函數中關于建立分區的代碼
?
圖4
圖4的代碼主要是通過分區驅動在nandflash建立一個使用BINFS文件系統的分區,這個分區用于保存NK映像。
圖5
圖5的代碼主要是通過分區驅動在nandflash建立一個使用FAT32文件系統的分區,這個分區建立在除去NK映像占用的其余nandflash空間。
?
分區驅動程序實際上是存儲驅動程序的轉換器。它公開與存儲驅動程序相同的接口,并將分區的塊地址(邏輯地址)轉換為存儲設備塊的真實地址(物理地址)。然后,它將調用傳遞給存儲驅動程序。分區驅動程序是一個DLL(mspart.dll),在common.reg的相關注冊表信息如下:
; HIVE BOOT SECTION
; Partition driver key.
[HKEY_LOCAL_MACHINE/System/StorageManager/MSPART]
??? "Dll"="mspart.dll"
; END HIVE BOOT SECTION
?
3.4 存儲驅動程序
存儲驅動程序是用于和存儲設備直接打交道,可以讀寫存儲設備,存儲驅動程序也稱為“塊驅動程序”,因為它們提供對數據存儲的隨即尋址塊的訪問。對于存儲設備為nand flash的系統,其存儲驅動就是nandflash驅動
http://blog.csdn.net/LoongEmbedded/archive/2010/11/26/6036448.aspx
?
?
?
4.存儲管理器加載設備
?
4.1存儲管理器加載設備的兩種方式
WINCE里面對于塊設備的加載可以有兩種方式,一種就是通過device manager來加
載然后通知存儲管理器做后續的加載工作,而另一種則是直接由存儲管理器來加載,這種方式可以通過注冊表:Autoload鍵值來實現。一般是采用第一種加載方式,對于設備管理器加載的驅動的話只能靠Flags = 0x1000 來決定, 這需要通過platform.reg中下面的注冊表信息的Flags的值來決定。
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/NANDFLASH]
??? "Prefix"="DSK"
??? "Dll"="smflash.dll"
??? "Index"=dword:1
??? "Order"=dword:0
??? "Profile"="NANDFLASH"
??? "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
IF IMGHIVEREG
??? "Flags"=dword:00001000???????????????? //就是這個flags
ENDIF ;IMGHIVEREG
關于Flags在VS2005中help的描述如下
圖6
"Flags"=dword:00001000告訴設備管理器在hive-base注冊表初始化的第一個階段來加載驅動。
?
那既然是選擇第一種方式來加載設備,那么就需要在hive-base注冊表初始化的第一個階段來啟動存儲管理器和設備管理器,這是由platform.reg下面的注冊表信息的Flags來決定的
[HKEY_LOCAL_MACHINE/Init/BootVars]
??? "Flags"=dword:3
??? "RegistryFlags"=dword:1
Flags的值有哪些呢?又表示什么意義呢?見下面VS2005中help文檔的相關部分:
圖7
"Flags"=dword:3就是告訴系統在hive-base注冊表初始化的第一個階段來啟動存儲管理器和設備管理器的。
?
4.2 設備管理器結合存儲管理器來加載設備
?
Oal.exe加載kernel.dll,kernel.dll加載filesys.dll,filesys.dll加載device.dll,到此設備管理器就加載起來了,common.reg中設備管理器的注冊表信息如下
[HKEY_LOCAL_MACHINE/init]
??????? "Launch20"="device.dll"
因為存儲管理(fsdmgr.dll模塊來實現)是filesys.dll的一部分,所以存儲管理器也在運行中,已準備好。
?
下面就來看看存儲管理器是如何加載設備的,見下圖
圖8
⑴設備管理器從 HKEY_LOCAL_MACHINE/Driver/BuiltIn 項加載驅動程序。正常情況下,任何內置的磁盤設備(例如,硬盤,)列在該項下面,所以將加載塊驅動程序。塊驅動程序通告一個特定的設備類標識符 BLOCK_DRIVER_GUID {A4E7EDDA-E575-4252-9D6B-4195D48BB865},比如下面是我的WINCE6.0+2443系統中platform.reg里關于塊驅動注冊表信息:
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/NANDFLASH]
??? "Prefix"="DSK"
??? "Dll"="smflash.dll"
??? "Index"=dword:1
??? "Order"=dword:0
??? "Profile"="NANDFLASH"
??? "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
IF IMGHIVEREG
??? "Flags"=dword:00001000
ENDIF ;IMGHIVEREG
?
⑵ (The Storage Manager consists of the Block Driver Manager, the Partition Manager, and the File System Driver (FSD) Manager.)存儲管理器中的塊驅動管理器收到并且識別出這是一個塊設備后,塊驅動管理器向存儲管理器索要這個塊驅動相應的profile注冊表鍵值的信息,
?
⑶ Storage Manager looks up the profile information for the device and loads the appropriate partition driver
存儲管理器查詢塊設備的profile信息并且根據這個信息來加載相稱的分區驅動,比如下面是我的項目的相關注冊表信息
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH]
??? "DefaultFileSystem"="BINFS"
??? "PartitionDriver"="mspart.dll"
??? "Name"="Microsoft Flash Disk"
通過上面的HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH注冊表信息就找到分區驅動mspart.dll,這樣存儲管理器就加載分區驅動了。這里[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH]的NANDFLASH要和⑴中的"Profile"="NANDFLASH"保持一致。
?
⑷存儲管理器加載分區驅動程序后,存儲管理器的分區管理器(Partition Manager)將請求分區驅動程序枚舉磁盤上的分區,并標識每個分區上的文件系統。分區驅動程序將從主啟動記錄 (MBR) 中讀取有關分區和文件系統的信息,并向存儲管理器中的文件系統管理器(File System Driver (FSD) Manager)提供文件系統信息。圖4和圖5就是分別在nandflash建立BINFS分區和FATFS分區,其中BINFS分區用于保存系統映像,而FATFS分區是基于除去系統映像占用的nandflash空間之外的剩余nandflash空間,見WINCE6.0中storage manager下面顯示的分區及其文件系統的屬性
圖9
圖10
圖11
?
⑸分區驅動被加載后就會通過塊設備驅動提供的接口來讀取塊設備上的分區信息,這個信
息一般就是同過讀取MBR的分區表得到的,如果分區類型在注冊表里分區表中有相應的值,分區驅動就會根據這個來加載相應的文件系統驅動。在這里,注冊表里分區表PartitionTable在Common.reg中,如下:
; The partition table contain entries where the volume name is the partition type (in %02X format)
; The value is the name of the filesystem.? This is used to look up the module to load etc.
; Explicitly call out 07 partition type as MSIFS, which means an Microsoft Installable File SYstem,
; such as NTFS or EXFAT.? The actual filesystem name is determined by running the detectors.
?
[HKEY_LOCAL_MACHINE/System/StorageManager/PartitionTable]
??? "01"="FATFS"
??? "04"="FATFS"
??? "06"="FATFS"
??? "07"="MSIFS"
??? "0B"="FATFS"
??? "0C"="FATFS"
??? "0E"="FATFS"
??? "0F"="FATFS"
??? "20"="BOOT"
??? "21"="BINFS"
??? "22"="RAWFS"
??? "23"="RAWFS"
??? "25"="IMGFS"
??? "26"="BINARY"
假如新增加一種文件系統,就必須添加到這個表中,如果我們要加載的文件系統類似不在這個表中,系統將不能正常啟動,停在下面的串口
-OEMInit
#### FMD_DRIVER:::FMD_OEMIoControl
FMD_OEMIoControl: unrecognized IOCTL (0x71f8c).
#### FMD_DRIVER:::FMD_INIT
?(NAND ID:0xecf1) --> OK.
?NUM_OF_BLOCKS??? = 1024
?PAGES_PER_BLOCK? = 64
?SECTORS_PER_PAGE = 4
NUMBLOCKS : 1024(0x400), SECTORSPERBLOCK = 64(0x40), BYTESPERSECTOR = 2048(0x800)
#### FMD_DRIVER:::FMD_OEMIoControl
FMD_OEMIoControl: unrecognized IOCTL (0x71c24).
?
⑹文件系統起來后,就會分析這個分區的數據是不是有效的,如果是有效的的分區的,那么文件系統驅動就成功的mount在了這個塊設備上了,也就是和塊設備關聯在了一起,而要是數據不是有效的話,那么,它會試著格式化這個分區,如果能格式化成功,那么mount也就成功了,如果不能格式化的話,那么就mount失敗,這個分區就是無效的了。
?
⑺分區驅動接著會去枚舉下一個分區,直到所有分區都枚舉完為止,這樣文件系統的加載過程就算完成了。
?
5.實現基于hive的注冊表
5.1 需要選擇的組件
圖12
5.2 platform.reg中相關的注冊表內容
; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE/Drivers/Resources/IRQ]
?? "Identifier"=dword:1
?? "Minimum"=dword:1
?? "Space"=dword:20
?? "Ranges"="1-0x20"
;? "Shared"=""
?
[HKEY_LOCAL_MACHINE/Drivers/Resources/IO]
?? "Identifier"=dword:2
?? "Minimum"=dword:0
?? "Space"=dword:10000
?? "Ranges"="0-0xFFFF"
; END HIVE BOOT SECTION
?
…………………………
;;for hive based registry
; HIVE BOOT SECTION
IF IMGHIVEREG
[HKEY_LOCAL_MACHINE/Init/BootVars]
??? "Flags"=dword:3
??? "RegistryFlags"=dword:1
ENDIF ;IMGHIVEREG
; END HIVE BOOT SECTION
?
; HIVE BOOT SECTION
IF BSP_NONANDFS !
?
???
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/NANDFLASH]
??? "Prefix"="DSK"
??? "Dll"="smflash.dll"
??? "Index"=dword:1
??? "Order"=dword:0
??? "Profile"="NANDFLASH"
??? "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
IF IMGHIVEREG
??? "Flags"=dword:00001000
ENDIF ;IMGHIVEREG
???
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH]
??? "DefaultFileSystem"="BINFS"
??? "PartitionDriver"="mspart.dll"
??? "Name"="Microsoft Flash Disk"
?
???
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH/BINFS]
??? "MountHidden"=dword:1
??? "MountAsROM"=dword:1
?
????
[HKEY_LOCAL_MACHINE/System/StorageManager/AutoLoad/NANDFLASH]
??? "DriverPath"="Drivers//BuiltIn//NANDFLASH"
??? ; LoadFlags 0x01 == load synchronously
??? "LoadFlags"=dword:1
??? "BootPhase"=dword:0
IF IMGHIVEREG
??? "MountAsBootable"=dword:1
ENDIF ;IMGHIVEREG
???
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH/FATFS]
??? "Flags"=dword:14
???????? "Folder"="ResidentFlash"
??? "FormatExfat"=dword:1
??? "CheckForFormat"=dword:1
??? "EnableWriteBack"=dword:1
IF IMGHIVEREG???
??? "MountAsBootable"=dword:1
ENDIF ;IMGHIVEREG
?
[HKEY_LOCAL_MACHINE/System/StorageManager/AutoLoad/NANDFLASH/Filters/CacheFilt]
??? "Dll"="cachefilt.dll"
??? "LockIOBuffers"=dword:1
?
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH/FATFS/Filters/CacheFilt]
??? "Dll"="cachefilt.dll"
??? "LockIOBuffers"=dword:1
?
ENDIF ; BSP_NONANDFS
; END HIVE BOOT SECTION
?
上面注冊表項的值后面再繼續詳細學習和實踐了。
?
5.3 mount在根目錄的盤符
圖13
?
?
參考的鏈接:
?
WINCE6.0的啟動過程
http://wenku.baidu.com/view/c95f1211cc7931b765ce1523.html
boot.hv存于ROM中。
?
wince 注冊表文件 platform.reg 詳解
http://blog.myspace.cn/e/407855258.htm
?
WinCE5的文件系統與注冊表
http://blog.csdn.net/human0787/archive/2008/04/25/2329491.aspx
?
理解 Windows CE .NET 中的文件系統體系結構
http://hgh123.blog.163.com/blog/static/5980422120093202539718/
?
WinCE定制中的大內存支持與永久保存注冊表
http://www.cn-doc.com/_soft_ect_doc/2005_08_18_23/20050818232114655.htm
?
WINCE如何 實現永久保存注冊表數據
http://blog.myspace.cn/e/407956383.htm
?
wince文件系統之注冊表相關
http://wogoyixikexie.blog.163.com/blog/static/88778624200891354433948/
?
如何在wince下實現一個文件系統驅動
http://blog.csdn.net/njuitjf/archive/2010/04/12/5478491.aspx
?
總結
以上是生活随笔為你收集整理的WINCE6.0文件系统及存储管理器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的9年IT路
- 下一篇: WINCE R3 QQ下载地址