USB 大量儲存驅動程式庫用於與大量儲存裝置通訊,例如透過 USB 連接的隨身碟、外接硬碟和其他類型的卸除式媒體。USB 大量儲存驅動程式庫分為兩部分:
- SCSI 區塊裝置會提供
fuchsia.hardware.block.volume.Service。 - 核心裝置介面與 USB 堆疊互動。
SCSI 區塊裝置
區塊裝置會使用 block_server 程式庫提供 fuchsia.hardware.block.volume.Service。支援讀取、寫入和清除作業。如果在寫入作業和清除作業之間失去電力,寫入 USB 大容量儲存裝置的變更可能不會保留在裝置上。驅動程式沒有任何機制,可通知堆疊中較高層級的驅動程式,寫入作業實際寫入實體媒體的時間。就 USB 大量儲存裝置而言,裝置確認寫入作業後,即視為完成寫入。
核心裝置
核心裝置可做為 SCSI 區塊裝置和 USB 堆疊之間的介面。核心會接受來自區塊裝置的 SCSI 要求,並將其轉換為 USB 要求,最終透過 USB 堆疊傳送至硬體。系統會針對每項要求執行下列步驟:
- SCSI 層會收到來自區塊伺服器的要求,並將要求加入背景工作執行緒的佇列。
- 背景工作執行緒會接收要求,並透過 USB 將 SCSI 指令傳送至裝置。
- 透過 USB 在要求 VMO 和裝置之間傳輸資料 (如適用)。
- 從裝置讀回要求狀態。
- 要求完成,透過封鎖伺服器傳回回覆。
部分 USB 大量儲存裝置可能有多個區塊裝置,例如磁碟陣列。在本例中,核心驅動程式會為每個磁碟建立一個區塊裝置。