探索教育裝置

edu 裝置會連線至系統 PCI 匯流排,並使用下列設定暫存值識別本身:

  • 供應商 ID (VID): 0x1234
  • 裝置 ID (DID): 0x11E8

裝置驅動程式會透過中斷和記憶體對應的 I/O (MMIO) 暫存器與裝置互動。

在本程式碼研究室中,您會編寫 Fuchsia 驅動程式庫,將這個 edu 裝置的功能提供給其他系統元件。

啟動模擬器

停止目前執行中的所有模擬器執行個體:

ffx emu stop --all

啟動啟用驅動程式架構 v2 的 Fuchsia 模擬器新執行個體:

ffx emu start core.x64 --headless

瞭解裝置節點

使用 ffx driver list-devices 指令,列出系統已知的所有裝置節點:

ffx driver list-devices

這個指令會輸出類似下方的清單:

root
root.sys
root.sys.platform
root.sys.cpu-trace
root.sys.platform.pt
root.sys.platform.00_00_2d
root.sys.platform.00_00_2e
root.sys.platform.00_00_2f
root.sys.platform.00_00_30
root.sys.platform.00_00_1b
root.sys.cpu-trace.perfmon
root.sys.platform.pt.acpi
root.sys.platform.pt.PCI0
...

edu 裝置位於 PCI 匯流排,請使用以下指令縮小裝置清單範圍:

ffx driver list-devices | grep 'PCI'

您會看到較短的清單,類似下列輸出內容:

root.sys.platform.pt.PCI0
root.sys.platform.pt.PCI0.bus
root.sys.platform.pt.PCI0.bus.00_00_0
root.sys.platform.pt.PCI0.bus.00_00_0_
root.sys.platform.pt.PCI0.bus.00_01_0
root.sys.platform.pt.PCI0.bus.00_01_0_
root.sys.platform.pt.PCI0.bus.00_02_0
root.sys.platform.pt.PCI0.bus.00_02_0_
root.sys.platform.pt.PCI0.bus.00_03_0
root.sys.platform.pt.PCI0.bus.00_03_0_
root.sys.platform.pt.PCI0.bus.00_04_0
root.sys.platform.pt.PCI0.bus.00_04_0_
root.sys.platform.pt.PCI0.bus.00_05_0
root.sys.platform.pt.PCI0.bus.00_05_0_
root.sys.platform.pt.PCI0.bus.00_06_0
root.sys.platform.pt.PCI0.bus.00_06_0_
root.sys.platform.pt.PCI0.bus.00_07_0
root.sys.platform.pt.PCI0.bus.00_07_0_
root.sys.platform.pt.PCI0.bus.00_0b_0
root.sys.platform.pt.PCI0.bus.00_0b_0_
root.sys.platform.pt.PCI0.bus.00_1f_0
root.sys.platform.pt.PCI0.bus.00_1f_0_
root.sys.platform.pt.PCI0.bus.00_1f_2
root.sys.platform.pt.PCI0.bus.00_1f_2_
root.sys.platform.pt.PCI0.bus.00_1f_3
root.sys.platform.pt.PCI0.bus.00_1f_3_

這些是目前模擬器執行個體中的 PCI 裝置節點。

找出正確的裝置

如要判斷哪個裝置節點是 edu 裝置,請使用 lspci 指令找出 edu 裝置符合 VID (0x1234) 和 DID (0x11e8) 的裝置:

ffx driver lspci

這個指令會輸出類似下方的清單,指出相符的 PCI 裝置節點為 00:06.0

00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller (rev 00)
00:01.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (rev 01)
00:02.0 SCSI storage controller: Red Hat, Inc. Virtio block device (rev 00)
00:03.0 Mouse controller: Red Hat, Inc. Virtio input (rev 01)
00:04.0 Ethernet controller: Red Hat, Inc. Virtio network device (rev 00)
00:05.0 Keyboard controller: Red Hat, Inc. Virtio input (rev 01)
00:06.0 Unclassified device: [1234:11e8] (rev 10)
00:07.0 Mouse controller: Red Hat, Inc. Virtio input (rev 01)
00:0b.0 Unclassified device: [607d:f153] (rev 01)
...

在上一節的裝置清單中,這表示 edu 裝置會對應至 PCI 裝置節點 root.sys.platform.pt.PCI0.bus.00_06_0_.pci-00_06.0-fidl

使用下列指令探索此裝置節點的屬性:

ffx driver list-devices root.sys.platform.pt.PCI0.bus.00_06_0_.pci-00_06.0-fidl --verbose

這個指令會輸出類似以下的輸出內容:

Name     : 0-fidl
Moniker  : root.sys.platform.pt.PCI0.bus.00_06_0_.pci-00_06.0-fidl
Driver   : None
11 Properties
[ 1/ 11] : Key fuchsia.BIND_FIDL_PROTOCOL     Value 0x000004
[ 2/ 11] : Key fuchsia.BIND_PCI_VID           Value 0x001234
[ 3/ 11] : Key fuchsia.BIND_PCI_DID           Value 0x0011e8
[ 4/ 11] : Key fuchsia.BIND_PCI_CLASS         Value 0x000000
[ 5/ 11] : Key fuchsia.BIND_PCI_SUBCLASS      Value 0x0000ff
[ 6/ 11] : Key fuchsia.BIND_PCI_INTERFACE     Value 0x000000
[ 7/ 11] : Key fuchsia.BIND_PCI_REVISION      Value 0x000010
[ 8/ 11] : Key fuchsia.BIND_PCI_TOPO          Value 0x000030
[ 9/ 11] : Key "fuchsia.hardware.pci.Device"  Value true
[10/ 11] : Key fuchsia.BIND_PROTOCOL          Value 0x000000
[11/ 11] : Key "fuchsia.platform.DRIVER_FRAMEWORK_VERSION" Value 0x000002

請注意,這部裝置目前並未載入驅動程式庫 (Driver 欄位設為 None)。這些屬性描述了驅動程式庫架構在判斷驅動程式庫是否與裝置節點相符時考量的值。在下一節中,您將透過這些屬性,宣告繫結到裝置的驅動程式庫元件。