Platform Builder實踐之檔案系統方案

2021-04-12 14:28:02 字數 4516 閱讀 7929

隨著ce的發展,物件儲存(object store)的作用越來越小,而大容量的永久儲存裝置被越來越多地採用,這一章將針對ce的檔案系統闡述相關的知識,讓pb開發者除了能夠加入對永久儲存裝置的支援,還能做一些優化。記得在以前講過的文章中提到了如何在pb中向定製的核心加入對硬碟、光碟機的支援(包括ata裝置驅動和各種檔案系統),在這裡就不再重複了。

ce提供了三種檔案系統,基於rom的檔案系統、基於ram的檔案系統、fat檔案系統。fat檔案系統使用的範圍最廣,能夠應用在ata裝置、flash儲存裝置、sram儲存裝置上,另外ce還允許開發者自己編寫並註冊一套檔案系統,只要介面符合win32檔案系統api即可。

cd/udfs 檔案系統

這兩種檔案系統被用於讀取cd、***等。除了通過在pb的「catalog」中加入這個檔案系統外,還可以在pb中新增sysgen_udfs環境變數來實現。cdfs和udfs在登錄檔中的註冊資訊如下:

; default values for udfs. these can be overridden per profile.

[hkey_local_machine/system/storagemanager/udfs]

"friendlyname"="cdfs/udfs filesystem"

"dll"="udfs.dll"

"paging"=dword:1

[hkey_local_machine/system/storagemanager/profiles/cdprofile]

"name"="ide cdrom/*** drive"

"folder"="cdrom drive"

"defaultfilesystem"="udfs"

"partitiondriver"=""

上面登錄檔資訊在檔案common.reg中。登錄檔資料是從上至下有效,也就是說下面的資料可以覆蓋上面的資料。從登錄檔資料可以看出udfs.dll包含了udfs檔案系統的驅動程式,cdrom的驅動器名為」cdrom drive」,採用的檔案系統為udfs,沒有分割槽驅動程式。如果我們要訪問cdrom的目錄或者檔案就要在名字前加」/cdrom driver/」。注意,可能你的common.reg檔案中的資料在」flolder」處不同於上面,比如為"folder"=loc_store_cd_folder,那麼你可以直接按照上面資料更改,或者在*.str檔案中查詢loc_store_cd_folder,找到這個id對應的字串再更改(查詢到的檔案可能很多,應查詢以本國家碼為目錄名的目錄)。

fat檔案系統

除了安全性外,fat檔案系統是乙個很優秀的檔案系統,很適合在嵌入式裝置中使用。ce也把fat作為外部儲存裝置的通用檔案系統。新增fat檔案系統的環境變數為sysgen_fatfs。隨便列出ce提供的操作fat檔案系統的函式:

defragvolume 碎塊整理,在碎塊整理前先進行磁碟掃瞄。

defragvolumeui 同上,但是包含乙個選項對話方塊。

formatvolume 按要求格式化分割槽。

formatvolumeui 同上,但是包含乙個操作對話方塊。

scanvolume 掃瞄乙個分割槽的fat和目錄。

scanvolumeui 同上,但是包含乙個操作對話方塊。

fat檔案系統在登錄檔中的註冊資訊如下:

; default values for fatfs. these can be overridden per profile

[hkey_local_machine/system/storagemanager/fatfs]

"friendlyname"="fat filesystem"

"dll"="fatfsd.dll"

"flags"=dword:00000024

"paging"=dword:1

"cachesize"=dword:0

從登錄檔資料可以看出fatfsd.dll包含了fat檔案系統的驅動程式。對」flags」值的描述如下:標誌值

描述fatfs_update_access

0x00000001

更新訪問時間

fatfs_disable_autoscan

0x00000004

不能自動呼叫scanvolume

fatfs_verify_writes

0x00000008

檢驗所有寫操作

fatfs_enable_backup_fat

0x00000010

備份fat表

fatfs_force_writethrough

0x00000020

讓系統可以直接將任何緩衝區中的資料寫到磁碟上,這樣系統將加快寫資料到磁碟的速度

fatfs_disable_autoformat

0x00000040

禁止自動格式化未格式化的分割槽

fatfs_disable_compcheck

0x00000080

禁止自動檢測壓縮分割槽

「paging」用於指定是否能夠分頁,值為1可以分頁,0不能分頁。「cachesize」用於指定fat檔案系統緩衝區大小。具體的值是用16進製制數表示的扇區數量。假如」cachesize」的值為400,那麼用於fat緩衝的位元組數為1024 * 512 = 512kb。

儲存管理器預設的檔案系統是fat檔案系統,所以硬碟、usb、pcmcia等儲存裝置的登錄檔資訊預設都沒有指定檔案系統。

檔案系統過濾器

檔案系統過濾器是乙個dll。儲存管理器在呼叫檔案系統api之前先呼叫檔案系統過濾器的過濾函式,通過過濾函式能夠實現對檔案資料的加密、解密、壓縮甚至掃瞄檔案是否存在病毒。實現檔案系統過濾器的步驟是先編寫dll,ce提供了例子程式,位於%_winceroot%/public/common/oak/drivers/fsd下。新增**之後再修改登錄檔資料。登錄檔位置如下:

1.hkey_local_machine/system/storagemanager/profiles/profilename/filesystem/filters

2.hkey_local_machine/system/storagemanager/filesystem/filters

3.hkey_local_machine/system/storagemanager/filters

登錄檔鍵及其鍵值例子如下:

"dll" := "fsdspy.dll" dll名稱

order = 0 順序

這裡profilename是指profile的名稱,比如hdprofile。filesystem是指具體的檔案系統,如fatfs, udfs, relfsd。數字1指出的檔案系統過濾器對指定儲存硬體的檔案系統有效;數字2指出的檔案系統過濾器對指定的檔案系統有效;數字3為所有檔案系統多有效。

儲存管理器

儲存管理器 (storage manager) 是 windows ce .net 的新功能,主要管理儲存裝置驅動程式、檔案系統驅動程式、分割槽驅動程式、檔案系統過濾器。儲存管理器根據登錄檔資料來載入需要的模組。具體登錄檔資料如下:

[hkey_local_machine/system/storagemanager]

"dll"="fsdmgr.dll"

"pnpunloaddelay"=dword:1000

fsdmgr.dll包含儲存管理器的**。」pnpunloaddelay」是指儲存管理器在接收到即插即用裝置的解除安裝通知後的延時時間。具體儲存管理器需要管理的儲存裝置的登錄檔資訊在hkey_local_machine/system/storagemanager/profiles下。例如硬碟的登錄檔資訊如下:

[hkey_local_machine/system/storagemanager/profiles/hdprofile]

"name"="ide hard disk drive"

"folder"="hard disk"

"automount"=dword:1

"autopart"=dword:0

"autoformat"=dword:0

"mountflags"=dword:0

"filesystem"="fatfsd.dll"

"partitiondriver"="mspart.dll"

「name」指名稱;」folder」指目錄名,可以在此更改目錄名稱;」automount」指如果檢測到分割槽後就自動安裝檔案系統;」autopart」指如果沒有分割槽則自動將最大可用空間劃分成乙個分割槽;」autoformat」指如果沒有格式化則自動格式化;」filesystem」指定這個儲存裝置採用的檔案系統,如果不指定就採用預設的檔案系統;」partitiondriver」指定分割槽驅動程式;」mountflags」指檔案系統如何被安裝。值為1指定乙個隱藏檔案系統,如果檔案系統被隱藏,那麼這個檔案系統將不會被查詢檔案的api發現,但是如果指定檔案的絕對路徑,還是可以訪問的。值為2指定當前檔案系統能夠包含系統登錄檔。乙個儲存裝置第乙個分割槽將包含基於hive的系統登錄檔(關於基於hive的登錄檔見以前講過的文章)。值為4指定這個檔案系統作為整個檔案系統的根(/),這裡要說明一下,ce預設物件儲存作為整個檔案系統的根(/),當在根下放置乙個檔案時,例如/a.dat,這個檔案實際存放在物件儲存中。如果指定其它檔案系統作為根,那麼檔案將存放在這個檔案系統所在的儲存裝置中。值為8指定當指定值為4時隱藏rom。

Platform Builder實踐之編譯

接上一章所說,當用pb的 定製平台嚮導 選取了乙個平台的所有特徵 feature 後,接下來的工作就是編譯了。即使你從來未曾編譯過,你也能想象得到編譯的時間一定很長。因為pb是在編譯乙個作業系統,而非乙個應用程式。當然,越快的硬體環境編譯的速度就越快。一般我編譯乙個核心需要5分鐘到10分鐘之間。在編...

Platform Builder實踐之檔案系統

隨著ce的發展,物件儲存 object store 的作用越來越小,而大容量的永久儲存裝置被越來越多地採用,這一章將針對ce的檔案系統闡述相關的知識,讓pb開發者除了能夠加入對永久儲存裝置的支援,還能做一些優化。記得在以前講過的文章中提到了如何在pb中向定製的核心加入對硬碟 光碟機的支援 包括ata...

platform builder 快速編譯作業系統

1.對於第一次生成作業系統映象是必須要 build os sysgen 的 2.對於加入應用程式或者除錯驅動我們就可以選擇命令列編譯 3.如果除錯驅動,則首先 build os open release directory 然後進入驅動所在目錄,執行build 或build c 這是全部編譯 這樣就...