內容概要
本篇內容主要介紹,BIOS標準中的Standard package。所謂Standard package就是按照用途將package分為幾種標準型別,每種型別根據標準提供相應的服務。
Standard packageStandard system nodes:
這種型別的package用於包含系統資訊,通常package內只包含屬性而沒有方法。
Device type package:
這種型別的package都對應一種裝置,package內部包含裝置的屬性和方法。BIOS標準規定了一些標準裝置的package應該提供哪些屬性和方法(後續文章會介紹)。比如:固態硬碟和機械硬碟都屬於block裝置,他們都要提供BIOS標準規定的屬性和方法,這樣作業系統就不用區分到底是什麼硬碟了。
Standard support package:
這種package都位於/packages之下,其作用就是提供一些標準的方法,方便別的package使用。
一些標準package的methods下面介紹一下,於BIOS標準中規定的通用的標準裝置和support package的定義和方法。
Parent methods
開啟和關閉裝置時需要將其父節點一起開啟和關閉(之前的文章介紹過)。開啟裝置透過open-dev指令,該指令要求被開啟的節點以及其父節點的package都必須提供open和close這兩個method。
如果一個父節點代表的是一個匯流排裝置(如系統匯流排,USB匯流排),那麼為了確定它下面子節點的地址,該父節點的package必須提供decode-unit和encode-unit這兩個method。decode-unit用於將文字描述的地址轉換成物理地址;encode-unit用於將物理地址轉換成用文字表示的地址。
Generic methods
無論是什麼型別的裝置,其package通常都需要提供selftest這個method。這樣使用者就可以透過test指令來測試該裝置了。
無論是什麼型別的裝置,其package通常都要提供reset這個method。該method用於重置裝置。
Package I/O model
對於儲存裝置他們提供的method要遮蔽他們的底層邏輯。比如硬碟,其package只需要提供以位元組為單位的method(read、write、seek),而不必暴露硬碟的扇區/柱面等底層細節。
儲存裝置的package只需要提供有意義的方法,比如對於CD-ROM來說只需要提供read即可,不需要提供write。
Expansion bus device class template
某些匯流排裝置提供memory-mapped功能,就是將裝置在總線上的地址對映為處理器的地址,這樣處理器就可以直接透過自己的地址來訪問這些裝置了。不同的匯流排提供本功能的方法不同,這裡只介紹一個通用方法,關於memory-mapped更詳細的標準可以參見《IEEE Std 1275.2-1994》。
map-in:傳入要對映空間,返回對映後的虛擬地址map-out:解除對映dma-alloc:分配DMA空間dma-free:釋放DMA空間dma-map-in:用虛擬地址覆蓋DMA空間dma-map-out:解除DMA空間的虛擬地址dma-sync:重新整理DMA空間probe-self:呼叫本節點下FCode下面是此類匯流排裝置的一些屬性
ranges:裝置的物理地址#address-cells:package地址格式#size-cells:package地址格式的大小Memory management device class template
MMU是將處理的虛擬地址轉換成物理地址的裝置。將虛擬地址轉換物理地址的具體方式是由處理器和匯流排決定的,BIOS標準裡不會對其作出規定,這裡只是大概描述幾個可能用到的method。
claim:分配可用資源release:釋放已分配資源map:建立地址轉換unmap:使已存在的地址轉換失效modify:修改已存在的地址轉換translate:將虛擬地址轉換成物理地址除了以上方法BIOS標準還建議MMU裝置要有以下兩個屬性
available:沒有被分配的(可用的)空間existing:被MMU裝置管理的全部空間結束(目前讀到26頁)#作業系統# #BIOS#