日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

WINCE6.0文件系统及存储管理器

發(fā)布時間:2025/4/16 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WINCE6.0文件系统及存储管理器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

*******************************LoongEmbedded********************************

作者:LoongEmbedded

時間:2010.12.03

類別:WINCE嵌入式系統(tǒng)

********************************LoongEmbedded********************************

?

?

Filesys.dll由對象存儲,ROM文件系統(tǒng)和存儲管理器組成,其中:

對象存儲:包含RAM注冊表,數(shù)據(jù)庫和RAM文件系統(tǒng)。

存儲管理器:其功能由系統(tǒng)中的fsdmgr.dll模塊來實現(xiàn),它由塊設備驅(qū)動程序管理器(block driver manager)、分區(qū)管理器(partition managerr)和文件系統(tǒng)驅(qū)動程序管理器(file system driver manager,也叫FSD manager),見下圖

1

?

1.對象存儲

對象存儲實質(zhì)是一個內(nèi)存堆,由filesys.dll控制,只要后備電源有電,則對象存儲中的信息就能夠得到保持,RAM存儲芯片構(gòu)成了對象存儲的物理基礎,這里的RAM芯片是指SDRAM。對象存儲最多可達256MBRAMWINCE6.0為對象存儲中的每一個對象都分配了一個唯一的對象標識符(windows CE object identifierCEOID)該標識符的作用就是用于訪問對象存儲中的對象,那么什么是對象呢?

下面這些都是對象:

*** 注冊表中的一個鍵

*** 注冊表中的一個值

*** 一個文件

*** 文件數(shù)據(jù)中大小為4-KB的一部分

*** 數(shù)據(jù)庫中的一條記錄,做多可保存4KB數(shù)據(jù)

*** 數(shù)據(jù)庫中的一條記錄的擴展信息,也可保存4KB數(shù)據(jù)

*** 一個數(shù)據(jù)庫

?

1.1?? RAM注冊表

WINCE6.0的注冊表是用來保存應用程序,驅(qū)動程序和用戶的設定以及其他一些配置信息的,WINCE6.0支持基于RAM的注冊表(RAM-Based Registry )和基于Hive的注冊表(Hive-Based Registry),其中基于RAM的注冊表把整個注冊表作為一個對象存儲堆存放在系統(tǒng)的內(nèi)存中。

?

基于RAM的注冊表,其所有的數(shù)據(jù)保存在對象存儲中(也即保存在內(nèi)存堆中,更直觀來說是保存在SDRAM),這樣,只要SDRAM保存不停地刷新,那么RAM注冊表中的數(shù)據(jù)就會一直保持。但如果SDRAM斷電,數(shù)據(jù)就會丟失。所以基于RAM的注冊表用在經(jīng)常熱啟動(warm boot)的系統(tǒng)中比較有效率,而如果用在經(jīng)常冷啟動(colde boot)的系統(tǒng)的效率就較低。其中有電池作為后備電源為SDRAM供電的單用戶設備是最適合使用基于RAM的注冊表的。

?

1.2?? RAM文件系統(tǒng)

WINCE6.0提供3中文件系統(tǒng),分別是RAM文件系統(tǒng)、ROM文件系統(tǒng)和可安裝文件系統(tǒng)。WINCE6.0中使用的文件系統(tǒng),其根目錄為“/”,所有的文件系統(tǒng)都被mount到根目錄“/”下面,ROM文件系統(tǒng)通常直接掛載到/Windows目錄,RAM文件系統(tǒng)通常直接掛載到根目錄下,也就是說,根目錄下除了掛載的外存目錄和/Windows目錄之外的所有文件都位于RAM文件系統(tǒng)中,見下圖

2

RAM文件系統(tǒng)由FSD(file system driver) Manager管理,WINCE6.0文件系統(tǒng)的配置,由注冊表實現(xiàn),一般在[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操作系統(tǒng)時,我們可以選擇ROM-only 的文件系統(tǒng)或RAM and ROM的文件系統(tǒng)。當選擇RAM and ROM的文件系統(tǒng)時,根目錄文件系統(tǒng)在內(nèi)存當中,掉電即丟失。為了實現(xiàn)根文件系統(tǒng)和注冊表的保存,即在冷啟動時不丟失,我們需要選擇ROM and RAM file system的文件系統(tǒng)和HIVE-Based注冊表,以將存儲空間Mount成根目錄,并配置注冊表使其支持HIVE-Based注冊表。

?

1.3?? 屬性數(shù)據(jù)庫

WINCE6.0提供CEDB(WINCE Database)EDB(Embedded Database)這兩種數(shù)據(jù)庫,其中CEDB在字節(jié)流的基礎上,對文件進行進一步的抽象,提供了與關系型數(shù)據(jù)庫類似的數(shù)據(jù)結(jié)構(gòu)化存儲和訪問。

?

2. ROM文件系統(tǒng)

WINCE6.0的內(nèi)部文件系統(tǒng)控制對ROM的訪問,也提供了對位于RAM的對象存儲的文件存儲,WINCE6.0支持兩種可用的文件系統(tǒng):RAM and ROM文件系統(tǒng)和ROM文件系統(tǒng)。RAM and ROM文件系統(tǒng)提供了對象存儲里的文件存儲以及對ROM的訪問,而ROM文件系統(tǒng)不允許應用程序?qū)⑽募鎯υ趯ο蟠鎯?#xff0c;通過根目錄下的windows目錄可以訪問ROM中的數(shù)據(jù)。ROM文件系統(tǒng)連接到統(tǒng)一文件系統(tǒng)中的“/Windows”文件夾,這意味著ROM中的所有文件均可作為“/Windows”文件夾中的只讀文件來訪問。

?

3.存儲管理器(storage manager)

?

存儲管理器負責管理系統(tǒng)中所有的外圍存儲設備,包括管理它們所有的文件系統(tǒng)和塊驅(qū)動。所有的文件、數(shù)據(jù)和容量都是通過存儲管理器來操作的,存儲管理器的功能由系統(tǒng)中的fsdmgr.dll模塊實現(xiàn),由下面三部分組成:

文件系統(tǒng)驅(qū)動程序管理器(File System Driver ManagerFSD Manager)

分區(qū)管理器(Partition Manager)。

塊設備驅(qū)動程序管理器(Block Driver Manager)

存儲管理器的體系結(jié)構(gòu)如下圖所示:

3

從上圖可以知道存儲管理器是一個分層結(jié)構(gòu),由文件系統(tǒng)過濾器(File system filters)、文件系統(tǒng)驅(qū)動程序(File system dirver)、分區(qū)驅(qū)動程序(Partition driver)和存儲驅(qū)動程序(Block driver)組成。下面是common.reg總關于存儲管理器的注冊表信息

; This tells Filesys to load FSDMGR

[HKEY_LOCAL_MACHINE/System/StorageManager]

??? "Dll"="fsdmgr.dll"

??? "PNPUnloadDelay"=dword:1000

fsdmgr.dll是存儲管理器的表現(xiàn)形式,"PNPUnloadDelay"是指存儲管理器在接收到即插即用設備的卸載通知后的延時時間,具體存儲管理器需要管理的存儲設備的注冊表信息在HKEY_LOCAL_MACHINE/System/StorageManager/Profiles下。

?

?

3.1 文件系統(tǒng)過濾器

?

文件系統(tǒng)過濾器是一個導出文件系統(tǒng)入口的DLL,這些入口映射到標準的文件系統(tǒng)函數(shù),比如CreateFile函數(shù)和CreateDriectory函數(shù)。文件系統(tǒng)過濾器用于處理對文件系統(tǒng)的調(diào)用,此后文件系統(tǒng)才能獲得這些調(diào)用,也就是說存儲管理器在調(diào)用文件系統(tǒng)API之前先調(diào)用文件系統(tǒng)過濾器的過濾函數(shù),這樣就允許對文件訪問進行某些特殊的處理,因為文件系統(tǒng)過濾器攔截對文件系統(tǒng)的調(diào)用,所以可以對文件數(shù)據(jù)的加密、解密、壓縮甚至掃描文件是否存在病毒等。

?

文件系統(tǒng)過濾器是輕量級(lightweight)的文件系統(tǒng)驅(qū)動(FSDs),它導出鉤子函數(shù)(hook functions)FSD_HookVolume()FSD_UnhookVolume(),而不是磁盤掛載函數(shù)FSD_MountDisk()FSD_UnmountDisk(),下面介紹介紹這個幾個函數(shù):

FSD_HookVolume():在存儲管理器加載文件系統(tǒng)過濾器的時候會調(diào)用這個入口函數(shù),此函數(shù)是由文件系統(tǒng)的導出函數(shù),并且被文件系統(tǒng)磁盤管理器(file system disk managerFSDMGR)直接調(diào)用。

FSD_UnhookVolume():在存儲管理器卸載文件系統(tǒng)過濾器的時候會調(diào)用這個入口函數(shù),此函數(shù)是由文件系統(tǒng)的導出函數(shù),并且被文件系統(tǒng)磁盤管理器(file system disk managerFSDMGR)直接調(diào)用。

FSD_MountDisk():設備管理器調(diào)用這個函數(shù)來掛載包含具體文件類型的指定磁盤,比如可以在根目錄下掛載ResidentFlash盤符,這個盤符是基于FATFS文件系統(tǒng)來操作nandflash。

?

FSD_UnmountDisk():設備管理器調(diào)用這個函數(shù)來卸載指定的盤符。

?

還有很重要的一點是文件系統(tǒng)驅(qū)動管理器(FSD Manager)加載文件系統(tǒng)驅(qū)動(FSDsfiles system drivers)和文件系統(tǒng)過濾器。

?

3.1.1 文件系統(tǒng)過濾器的注冊表路徑

?

HKEY_LOCAL_MACHINE/System/StorageManager/Filters

表示文件系統(tǒng)過濾器對所有的文件類型都有效,也就是說沒有篩選。

?

HKEY_LOCAL_MACHINE/System/StorageManager/ MyFileSystem /Filters

MyFileSystem是指具體的文件系統(tǒng),如FATFSEXFAT、CD/UDFS等文件系統(tǒng),這個路徑指文件系統(tǒng)過濾器對指定的文件系統(tǒng)有效。

?

HKEY_LOCAL_MACHINE/System/StorageManager/AutoLoad/ MyFileSystem /Filters

表示文件系統(tǒng)過濾器對自動加載的指定的文件系統(tǒng)有效,這里的自動加載是指由存儲管理器來直接加載存儲設備的驅(qū)動(block driver)

?

HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/ MyProfileName / MyFileSystem /Filters

MyProfileName是指Profile的名字,這個路徑指文件系統(tǒng)過濾器對指定存儲硬件的文件系統(tǒng)有效,比如我們項目的Platform.reg下相關內(nèi)容如下:

[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

這里的MyProfileNameNANDFLASHMyFileSystemFATFS,表示文件過濾器(在此為cache的過濾器cachefilt.dll,不知是否該這樣理解?)對加載在NANDFLASH上的文件系統(tǒng)有效,也就是如果要讀寫NANDFLASH上的數(shù)據(jù),只有以FATFS文件系統(tǒng)格式才能訪問,否則被文件過濾器過濾掉,這樣就無法讀寫NANDFLASH上的數(shù)據(jù)。

?

3.1.2 文件系統(tǒng)過濾器注冊表值

用任何有效的注冊表鍵值來,比如添加過濾器的名字,過濾DLL的值和過濾器的order的值,通過這些操作可以建立文件系統(tǒng)過濾器,比如

?

[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 文件系統(tǒng)過濾器的sample

?

文件系統(tǒng)過濾器的例子在下面的目錄下

%_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 文件系統(tǒng)驅(qū)動

?

文件系統(tǒng)驅(qū)動是實現(xiàn)對應的文件系統(tǒng)的DLL,文件驅(qū)動將存儲設備上的數(shù)據(jù)組織為文件和文件夾來對設備進行操作。應用程序操作文件是通過wince 文件系統(tǒng)提供的接口進行操作,如:可以通過CreateFile函數(shù),打開或創(chuàng)建一個文件。接下來,系統(tǒng)是如何去完成這個任務的呢?比如我們要操作SD卡上的文件,SD卡上也有自己的文件系統(tǒng),用于組織和管理文件,wince文件系統(tǒng)是如果操作這些文件的呢?這時候,FSD(文件系統(tǒng)驅(qū)動)就發(fā)揮它的作用了。文件的操作共涉及到六個層次:

應用程序:用戶通過應用程序操作文件。

wince文件系統(tǒng):操作系統(tǒng)的一部分,根據(jù)用戶的請求,判斷操作的是那個設備上的文件,以便調(diào)用相應的驅(qū)動。

文件系統(tǒng)驅(qū)動:操作系統(tǒng)沒辦法直接和設備驅(qū)動進行交互,需要通過文件系統(tǒng)驅(qū)動,實現(xiàn)與設備驅(qū)動的操作,以實現(xiàn)文件操作。

分區(qū)驅(qū)動:主要實現(xiàn)對存儲設備的邏輯劃分。

⑸設備驅(qū)動:實現(xiàn)了設備上的操作,包括文件操作等。

設備上的文件系統(tǒng):組織和管理設備上的文件存儲。

從以上的分析可以知道,文件系統(tǒng)在操作系統(tǒng)和設備驅(qū)動之間起到了一個連接作用。在實現(xiàn)的時候,文件系統(tǒng)驅(qū)動基于設備驅(qū)動,實現(xiàn)了wince文件系統(tǒng)中的文件操作函數(shù),如CreateFile等。

?

3.3 分區(qū)驅(qū)動

分區(qū)是對存儲設備的邏輯劃分,WINCE6.0允許物理磁盤(我們常用的是nandflash)包含多個分區(qū),并且每個分區(qū)可以格式化為不同的文件系統(tǒng),但是每個設備只能由一個分區(qū)驅(qū)動程序來管理。下面是src/bootloader/eboot/nand.cpp文件的WriteOSImageToBootMedia函數(shù)中關于建立分區(qū)的代碼

?

4

4的代碼主要是通過分區(qū)驅(qū)動在nandflash建立一個使用BINFS文件系統(tǒng)的分區(qū),這個分區(qū)用于保存NK映像。

5

5的代碼主要是通過分區(qū)驅(qū)動在nandflash建立一個使用FAT32文件系統(tǒng)的分區(qū),這個分區(qū)建立在除去NK映像占用的其余nandflash空間。

?

分區(qū)驅(qū)動程序?qū)嶋H上是存儲驅(qū)動程序的轉(zhuǎn)換器。它公開與存儲驅(qū)動程序相同的接口,并將分區(qū)的塊地址(邏輯地址)轉(zhuǎn)換為存儲設備塊的真實地址(物理地址)。然后,它將調(diào)用傳遞給存儲驅(qū)動程序。分區(qū)驅(qū)動程序是一個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 存儲驅(qū)動程序

存儲驅(qū)動程序是用于和存儲設備直接打交道,可以讀寫存儲設備,存儲驅(qū)動程序也稱為“塊驅(qū)動程序”,因為它們提供對數(shù)據(jù)存儲的隨即尋址塊的訪問。對于存儲設備為nand flash的系統(tǒng),其存儲驅(qū)動就是nandflash驅(qū)動

http://blog.csdn.net/LoongEmbedded/archive/2010/11/26/6036448.aspx

?

?

?

4.存儲管理器加載設備

?

4.1存儲管理器加載設備的兩種方式

WINCE里面對于塊設備的加載可以有兩種方式,一種就是通過device manager來加

載然后通知存儲管理器做后續(xù)的加載工作,而另一種則是直接由存儲管理器來加載,這種方式可以通過注冊表:Autoload鍵值來實現(xiàn)。一般是采用第一種加載方式,對于設備管理器加載的驅(qū)動的話只能靠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

關于FlagsVS2005help的描述如下

6

"Flags"=dword:00001000告訴設備管理器在hive-base注冊表初始化的第一個階段來加載驅(qū)動。

?

那既然是選擇第一種方式來加載設備,那么就需要在hive-base注冊表初始化的第一個階段來啟動存儲管理器和設備管理器,這是由platform.reg下面的注冊表信息的Flags來決定的

[HKEY_LOCAL_MACHINE/Init/BootVars]

??? "Flags"=dword:3

??? "RegistryFlags"=dword:1

Flags的值有哪些呢?又表示什么意義呢?見下面VS2005help文檔的相關部分:

7

"Flags"=dword:3就是告訴系統(tǒng)在hive-base注冊表初始化的第一個階段來啟動存儲管理器和設備管理器的。

?

4.2 設備管理器結(jié)合存儲管理器來加載設備

?

Oal.exe加載kernel.dllkernel.dll加載filesys.dllfilesys.dll加載device.dll,到此設備管理器就加載起來了,common.reg中設備管理器的注冊表信息如下

[HKEY_LOCAL_MACHINE/init]

??????? "Launch20"="device.dll"

因為存儲管理(fsdmgr.dll模塊來實現(xiàn))filesys.dll的一部分,所以存儲管理器也在運行中,已準備好。

?

下面就來看看存儲管理器是如何加載設備的,見下圖

8

設備管理器從 HKEY_LOCAL_MACHINE/Driver/BuiltIn 項加載驅(qū)動程序。正常情況下,任何內(nèi)置的磁盤設備(例如,硬盤,)列在該項下面,所以將加載塊驅(qū)動程序。塊驅(qū)動程序通告一個特定的設備類標識符 BLOCK_DRIVER_GUID {A4E7EDDA-E575-4252-9D6B-4195D48BB865},比如下面是我的WINCE6.0+2443系統(tǒng)中platform.reg里關于塊驅(qū)動注冊表信息:

[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.)存儲管理器中的塊驅(qū)動管理器收到并且識別出這是一個塊設備后,塊驅(qū)動管理器向存儲管理器索要這個塊驅(qū)動相應的profile注冊表鍵值的信息,

?

Storage Manager looks up the profile information for the device and loads the appropriate partition driver

存儲管理器查詢塊設備的profile信息并且根據(jù)這個信息來加載相稱的分區(qū)驅(qū)動,比如下面是我的項目的相關注冊表信息

[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH]

??? "DefaultFileSystem"="BINFS"

??? "PartitionDriver"="mspart.dll"

??? "Name"="Microsoft Flash Disk"

通過上面的HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH注冊表信息就找到分區(qū)驅(qū)動mspart.dll,這樣存儲管理器就加載分區(qū)驅(qū)動了。這里[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/NANDFLASH]NANDFLASH要和⑴中的"Profile"="NANDFLASH"保持一致。

?

存儲管理器加載分區(qū)驅(qū)動程序后,存儲管理器的分區(qū)管理器(Partition Manager)將請求分區(qū)驅(qū)動程序枚舉磁盤上的分區(qū),并標識每個分區(qū)上的文件系統(tǒng)。分區(qū)驅(qū)動程序?qū)闹鲉佑涗?/span> (MBR) 中讀取有關分區(qū)和文件系統(tǒng)的信息,并向存儲管理器中的文件系統(tǒng)管理器(File System Driver (FSD) Manager)提供文件系統(tǒng)信息。圖4和圖5就是分別在nandflash建立BINFS分區(qū)和FATFS分區(qū),其中BINFS分區(qū)用于保存系統(tǒng)映像,而FATFS分區(qū)是基于除去系統(tǒng)映像占用的nandflash空間之外的剩余nandflash空間,見WINCE6.0storage manager下面顯示的分區(qū)及其文件系統(tǒng)的屬性

9

10

11

?

分區(qū)驅(qū)動被加載后就會通過塊設備驅(qū)動提供的接口來讀取塊設備上的分區(qū)信息,這個信

息一般就是同過讀取MBR的分區(qū)表得到的,如果分區(qū)類型在注冊表里分區(qū)表中有相應的值,分區(qū)驅(qū)動就會根據(jù)這個來加載相應的文件系統(tǒng)驅(qū)動。在這里,注冊表里分區(qū)表PartitionTableCommon.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"

假如新增加一種文件系統(tǒng),就必須添加到這個表中,如果我們要加載的文件系統(tǒng)類似不在這個表中,系統(tǒng)將不能正常啟動,停在下面的串口

-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).

?

文件系統(tǒng)起來后,就會分析這個分區(qū)的數(shù)據(jù)是不是有效的,如果是有效的的分區(qū)的,那么文件系統(tǒng)驅(qū)動就成功的mount在了這個塊設備上了,也就是和塊設備關聯(lián)在了一起,而要是數(shù)據(jù)不是有效的話,那么,它會試著格式化這個分區(qū),如果能格式化成功,那么mount也就成功了,如果不能格式化的話,那么就mount失敗,這個分區(qū)就是無效的了。

?

分區(qū)驅(qū)動接著會去枚舉下一個分區(qū),直到所有分區(qū)都枚舉完為止,這樣文件系統(tǒng)的加載過程就算完成了。

?

5.實現(xiàn)基于hive的注冊表

5.1 需要選擇的組件

12

5.2 platform.reg中相關的注冊表內(nèi)容

; 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

?

上面注冊表項的值后面再繼續(xù)詳細學習和實踐了。

?

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的文件系統(tǒng)與注冊表

http://blog.csdn.net/human0787/archive/2008/04/25/2329491.aspx

?

理解 Windows CE .NET 中的文件系統(tǒng)體系結(jié)構(gòu)

http://hgh123.blog.163.com/blog/static/5980422120093202539718/

?

WinCE定制中的大內(nèi)存支持與永久保存注冊表

http://www.cn-doc.com/_soft_ect_doc/2005_08_18_23/20050818232114655.htm

?

WINCE如何 實現(xiàn)永久保存注冊表數(shù)據(jù)

http://blog.myspace.cn/e/407956383.htm

?

wince文件系統(tǒng)之注冊表相關

http://wogoyixikexie.blog.163.com/blog/static/88778624200891354433948/

?

如何在wince下實現(xiàn)一個文件系統(tǒng)驅(qū)動

http://blog.csdn.net/njuitjf/archive/2010/04/12/5478491.aspx

?

總結(jié)

以上是生活随笔為你收集整理的WINCE6.0文件系统及存储管理器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。