簡介
在 Fuchsia 中,裝置驅動程式會實作為 ELF 共用程式庫 (DSO),並載入至驅動程式主機程序。驅動程式管理工具程序包含裝置協調器,可追蹤驅動程式和裝置、管理驅動程式的探索作業、建立及導向驅動程式主機程序,並維護裝置檔案系統 (devfs)。這是舊版機制,使用者空間服務和應用程式 (受命名空間限制) 可透過此機制存取裝置。
裝置管理工具會將裝置視為單一整合樹狀結構的一部分。 該樹狀結構的分支 (和子分支) 包含驅動程式主機程序中的若干裝置。如何將整體樹狀結構細分成多個驅動程式主機,取決於系統政策,目的是為了隔離驅動程式以確保安全性或穩定性,以及為了提升效能而共置驅動程式。
裝置、驅動程式和驅動程式主機
以下是 Qemu x86-64 上執行的 Fuchsia 裝置樹狀結構傾印 (為求明確,已稍微修剪):
$ driver dump
[root] pid=4766 fuchsia-boot:///#meta/platform-bus.cm
[sys] pid=4766
[platform] pid=4766
[pt] pid=4766 fuchsia-boot:///#meta/platform-bus-x86.cm
[acpi] pid=4766
[pwrbtn] pid=4766 fuchsia-boot:///#meta/hid.cm
[_SB_] pid=4766
[PCI0] pid=4766
[ISA_] pid=4766
[RTC_] pid=7264 fuchsia-boot:///#meta/intel-rtc.cm
[rtc] pid=7264
[KBD_] pid=7359 fuchsia-boot:///#meta/pc-ps2.cm
[i8042] pid=7359
[i8042-keyboard] pid=7359
[i8042-mouse] pid=7359
[MOU_] pid=4766
[COM1] pid=4766
[PRES] pid=4766
[GPE0] pid=4766
[FWCF] pid=4766
[S00_] pid=4766
[S08_] pid=4766
[S10_] pid=4766
[S18_] pid=4766
[S20_] pid=4766
[S28_] pid=4766
[S30_] pid=4766
[S38_] pid=4766
[S58_] pid=4766
[HPET] pid=4766
[LNKE] pid=4766
[LNKF] pid=4766
[LNKG] pid=4766
[LNKH] pid=4766
[GSIE] pid=4766
[GSIF] pid=4766
[GSIG] pid=4766
[GSIH] pid=4766
[GFBY] pid=4766
[GFEV] pid=4766
[GFPP] pid=4766
[GFFB] pid=4766
[GFAU] pid=4766
[GFSK] pid=4766
[GFRT] pid=4766
[GFRO] pid=4766
[CPUS] pid=4766
[_TZ_] pid=4766
[PCI0] pid=4766 fuchsia-boot:///#meta/bus-pci.cm
[bus] pid=4766
[00_00_0] pid=4766
[00_00_0_] pid=4766
[00_01_0] pid=4766
[00_01_0_] pid=4766
[00_02_0] pid=4766 fuchsia-boot:///#meta/virtio_block.cm
[virtio-block] pid=4766 fuchsia-boot:///#meta/block.core.cm
[block] pid=4766 fuchsia-boot:///#meta/fvm.cm
[fvm] pid=4766
[blobfs-p-1] pid=4766 fuchsia-boot:///#meta/block.core.cm
[block] pid=4766
[data-p-2] pid=4766 fuchsia-boot:///#meta/block.core.cm
[block] pid=4766 fuchsia-boot:///#meta/zxcrypt.cm
[zxcrypt] pid=4766
[unsealed] pid=4766 fuchsia-boot:///#meta/block.core.cm
[block] pid=4766
[00_02_0_] pid=4766
[00_03_0] pid=4766
[00_03_0_] pid=4766
[00_04_0] pid=4766 fuchsia-boot:///#meta/virtio_ethernet.cm
[virtio-net] pid=4766 fuchsia-boot:///#meta/netdevice-migration.cm
[netdevice-migration] pid=4766 fuchsia-boot:///#meta/network-device.cm
[network-device] pid=4766
[00_04_0_] pid=4766
[00_05_0] pid=4766
[00_05_0_] pid=4766
[00_06_0] pid=4766
[00_06_0_] pid=4766
[00_07_0] pid=4766
[00_07_0_] pid=4766
[00_0b_0] pid=4766
[00_0b_0_] pid=4766
[00_1f_0] pid=4766
[00_1f_0_] pid=4766
[00_1f_2] pid=4766
[00_1f_2_] pid=4766
[00_1f_3] pid=4766
[00_1f_3_] pid=4766
[ram-disk] pid=4766 fuchsia-boot:///#meta/ramdisk.cm
[ramctl] pid=4766
[ram-nand] pid=4766
[virtual-audio] pid=4766 fuchsia-pkg://fuchsia.com/virtual_audio#meta/virtual_audio_driver.cm
[virtual_audio] pid=4766
[bt-hci-emulator] pid=4766
[00_00_1b] pid=4766 fuchsia-boot:///#meta/sysmem.cm
[sysmem] pid=4766
方括號中的名稱是節點。pid= 欄位表示裝置所屬驅動程式代管程序的程序物件 ID。這個網址是繫結至節點的驅動程式庫元件資訊清單。沒有網址的節點不會繫結驅動程式庫。
舉例來說,上方的 pid 4766 驅動程式代管程序包含 pci 匯流排驅動程式,該驅動程式已為系統中的每個 PCI 裝置建立子節點。其子節點 00_04_0 具有網路裝置,virtio 乙太網路驅動程式已繫結至該裝置,且元件網址為 fuchsia-boot:///#meta/virtio_ethernet.cm。