抽象過的界面描述是寫在 foo_if.m 檔裡頭。 device driver 的基本界面在 /sys/kern/device_if.m 。 Bus 的界面在 /sys/kern/bus_if.m 裡。這些 .m 檔在 build 時會經由 awk script /sys/tools/makeobjops.awk 編譯成 foo_if.[ch]。繼承 bus 的 pci, isa 等還各有自己的子界面。
device_if.m 定義了 device 的基本界面。基本界面共有八個,probe, identify, attach, detach, shutdown, suspend, resume, quiesce。
- probe: 偵測符合某個 driver 的硬體是否存在。
- identify: 強制設定某個硬體為存在在系統上。這通常是給較老舊的 ISA 界面硬體使用,因為它不像 PCI 或是 ISA pnp 等較新的標準有偵測硬體的標準功能可以使用,通常都是直接定義在固定的 mem 或 I/O 位址上。使用 identify 直接告訴 parent bus, "你別管那麼多,我說有就是有,照作就是了。"
- attach: 將 driver 和硬體綁起來。同時間一個硬體上只能有一個 driver 使用它。
- detach: 解除 driver 和硬體的關係。
- shutdown: 關機時執行
- suspend: 休眠
- resume: 從休眠中回復
- quiesce: 停止 driver 的功能。
bus_if.m 包含了 system buses 上上下下的交互作用,所以界面要比 device 複雜一點:
((待續))
References:
Chapter 14 Newbus of FreeBSD Architecture Handbook
Hi~Mr. Li,
回覆刪除您好,不知道小弟是否有此榮幸向您請益與FreeBSD Device Driver相關之課題?
Best regards,
Benjamin Joseph Chen
E-Mail&MSN: bjchentc@gmail.com