嵌入式檔案系統小結
來源:互聯網
上載者:User
近日看了幾個fat檔案系統的源碼,主要有ucfs、efsl、minfat等,小結一下。
嵌入式的檔案系統雖有不少,但在消費類電子產品上,還是以fat為主,儲存體為Nand Flash,加上mass storage功能,能讓使用者在pc上管理檔案,如在mp3、電子詞典上等,都用得很廣泛。
ucfs:主要針對於多任務下的應用,程式中很多地方都沒有使用固定的變數,而是每次都重新運算獲得即時值,如檔案系統類型判斷就用了FS__fat_which_type這個函數,此函數每次都重新計算bpb中的值,判斷是fat12/16/32。ucfs也缺少cache的管理,無論讀和寫都是立即物理操作,這樣導致每次檔案操作時,物理的讀寫太頻繁,嚴重影響效率。這個源碼的版本是1.24,而最新版本的介紹,已經支援read cache了。
單從效率上考慮,此檔案系統並不能獲得優勢。但是對於多任務環境下,應該是能可靠穩定地工作。
efsl:efsl是在sourceforge.net上開源的一個項目,此項目正在持續更新,源碼中也有很多注釋,研讀起來比較容易,潛力不錯。efsl相容fat12/16/32,同時支援多裝置及多檔案操作。每個裝置的驅動程式,只需要提供扇區寫和扇區讀兩個函數即可。
minifat:這個是toshiba提供的一個fs。此檔案系統只支援fat12/16,提供了比較完整的檔案操作函數,支援多裝置和多檔案,也支援cache管理。會有較高的效率。但檔案系統不支援長檔名的讀取,所有的檔案都嚴格要求是Dos8.3格式的短檔案名稱。總體來說代碼清晰,可以自行擴充fat32及長檔名的支援。
最後一個fs,是一個朋友給的源碼,支援fat12/16、unicode 、長檔名、多檔案操作,但不能同時支援多裝置。但在記憶體管理和字串管理上面,效率比較低。
以上檔案系統,都沒有像yaffs那樣,針對於特定的實體儲存體載體來做最佳化。在對效率要求更高的基礎上,就需要針對特定的裝置進行最佳化。
zhongyh
<end>