wince 的BootPart的簡要要解析

2021-09-30 07:17:55 字數 2219 閱讀 6186

應該說bootpart算是微軟提供的乙個用於分割槽的模組,可以在eboot中使用。不過說實話,我很少使用它,知道有些廠商的bsp裡面支援這個功能,而且也算是eboot的一部分,所以還是介紹一下。先看一下架構,如圖:

在eboot中,blcommon處於最上層,這個在以前已經介紹過,bootpart模組會被oem函式來呼叫,而bootpart模組要操作儲存裝置需要flash driver的支援。這裡要說的是flash driver是指wince下的flash驅動,也就是fmd_***介面的驅動。所以要使用bootpart模組,首先要有flash的驅動的支援。bootpart模組在」wince600publiccommonoakdriversethdbgbootpart」下面可以找到源**,主要的實現都在bootpart.cpp中。bootpart模組主要提供對flash裝置的分割槽功能和對binfs的支援。下面介紹一下會用到的函式:

1. bool bp_init (lpbyte pmemory, dword dwsize, lpctstr lpactivereg, ppci_reg_info pregin, ppci_reg_info pregout)

該函式可以說是bootpart模組的初始化函式,看看**就知道他會呼叫fmd_init來初始化flash裝置並初始化一塊記憶體。該函式一般會在oemplatforminit函式中被呼叫。pmemory指向一塊記憶體來存放mbr資訊,dwsize為記憶體的大小,lpactivereg,pregin和pregout會被fmd_init用到,一般可以設定為null。

2. bool bp_lowlevelformat(dword dwstartblock, dword dwnumblocks, dword dwflags)

該函式用於低階格式化,它會格式化flash裝置中的block,重新建立mbr並將mbr存到第乙個blockd的第乙個扇區中。dwstartblock為起始block,dwnumblocks為多少個block,dwflags為格式化標記位,表示採用何種格式化方式。該函式會根據需要來由eboot中的函式呼叫。

3. ppartentry bp_getpartitioninfo (handle hpartition)

該函式用於獲得某個分割槽的資訊。hpartition為某乙個分割槽的控制代碼,返回相應的分割槽資訊。

4. handle bp_openpartition(dword dwstartsector, dword dwnumsectors, dword dwparttype, bool factive, dword dwcreationflags)

該函式用於開啟或者建立乙個分割槽,可以通過該函式在flash裝置上面建立分割槽。dwstartsector為起始邏輯扇區,dwnumsectors為該分割槽中包含多少個扇區,dwparttype表示分割槽的型別,factive為是否是啟用分割槽,dwcreationflags表示是建立分割槽還是開啟分割槽,執行成功後返回該分割槽的控制代碼。

5. bool bp_writedata(handle hpartition, lpbyte pbbuffer, dword dwlength)

該函式負責向某乙個分割槽寫入資料,一般eboot可以通過這個函式將wince image寫入分割槽中。hpartition為被建立的分割槽的控制代碼,pbbuffer為要寫入資料的buffer,dwlength為要寫入資料的長度。

6. bool bp_readdata(handle hpartition, lpbyte pbbuffer, dword dwlength)

該函式負責從乙個分割槽中讀出資料,eboot可以通過這個函式將wince image讀到ram中。hpartition為被建立的分割槽的控制代碼,pbbuffer為要讀出資料的buffer,dwlength為要讀出資料的長度。

7. bool bp_setdatapointer (handle hpartition, dword dwaddress)

該函式用於設定某乙個分割槽的資料指標,實際上資料指標是指在該分割槽中下一次被讀或寫的位置。一般會配合bp_readdata(..)和bp_writedata(..)兩個函式來用。hpartition為被建立分割槽的控制代碼,dwaddress為資料指標的新位置。

一般比較常用的就是這些函式。最後簡單總結一下,微軟提供的這個模組主要是用於在flash裝置上進行分割槽,或者說就是幫助我們來對flash進行layout。在eboot中要使用它,首先要實現flash的驅動才可以。其實看看**就會發現,這些函式無論是建立mbr,還是建立分割槽,本質上就是在flash裡面寫了一些標記性資訊,封裝了一些函式給使用者使用。我很少使用bootpart模組,更習慣整個flash都由自己來管理,感覺更清楚些。

eboot的分割槽管理模組bootpart

11月30日 eboot的分割槽管理模組bootpart bp init的引數。bootpart模組需要提供一塊記憶體作為模組buffer。前面2個引數就是描述這個buffer的位址和size的。eboot中使用了這個模組,eboot的做法是在boot.bib保留了一塊區域作為buffer。比如我的...

WINCE的記憶體配置

原文 http www.360doc.com content 10 1021 11 4026366 62690896.shtml wince的記憶體配置 wince的記憶體 包括sdram及flash 的配置包含兩個方面 源 包括c和彙編 中的定義,及系統配置檔案config.bib中的定義。源 中...

學習wince的痛苦

我已經接觸wince兩年多了,但是水平很一般,可以只是乙個入門,學習它是因為一門選修課,第一次接觸他不知道是幹什麼的,總是認為所有的系統都是一些高階工程師開發的,開始很新鮮,後來很喜歡。但是一直沒什麼進展,主要沒有實驗的裝置,也沒有資金去發展這個方向。很頭疼!去年參加了微軟的創新杯,感覺還行,但是自...