目標和動力
驅動程式架構管理硬體裝置與
用戶端。此連線過去曾提供三種 FIDL 通訊協定:
- fuchsia.io/Node
- fuchsia.device/Controller
- 裝置的實際 FIDL 通訊協定
這項多工處理需要驅動程式架構擁有該管道, 可以手動提供 Node 與控制器通訊協定。這樣一來, 因為這能限制司機能擁有的 並阻止駕駛人使用標準 FIDL 電線伺服器物件, 例如模式
這種隱含多工處理也違反
組合的 FIDL 設計原則。
根據 FIDL 設計原則,通訊協定可以是 composed
的
也就是編譯期間的通訊協定不過,驅動程式架構
組合來執行,且無從得知
裝置。
許多與開發人員互動的用戶端會從同一個 FIDL 投放頻道 外部通訊協定,移除類型安全性,且通常能使程式碼更加 難以遵循
這項專案最終會從驅動程式架構中移除 FIDL 多工處理功能。 這麼做會要求更新與駕駛人互動的用戶端。
這項專案完成後,司機將可擁有 代表自己和客戶
技術背景
貢獻者必須熟悉 FIDL 用戶端。 貢獻者不必熟悉驅動程式或驅動程式庫架構。
如何提供協助
選取工作
許可清單中的每一行都代表 工作。使用者可自行選擇這些工作。
以下為「fuchsia.io/Node
」和一個許可清單
fuchsia.device/Controller
。
執行工作
不過,多工處理是隱性的概念,所以 預先掌握需要這項資訊的程式碼我們最滿意的工具就是 從許可清單中移除一行,看看有哪些中斷問題
要尋找元件,最簡單的方法是先確認 QEMU 開機。如果是 系統順利啟動網頁,進行檢查並修正錯誤。QEMU 啟動後 來嘗試從 CL 到 CQ 來嘗試並找出其他錯誤。
需要多工處理的元件必須先取得
專屬的 devfs 路徑在 CML 檔案中搜尋 dev
、dev-class
或
dev-class-{name}
是尋找相關元件的好方法。
修正 fuchsia.io/Node
若移除這個多工處理功能,程式碼就會造成裝置無法使用
檔案描述元或 fd
程式碼看起來很可疑:
fbl::unique_fd fd;
zx_status_t status = fdio_open(dev_path, 0, fd.reset_and_get_address());
應替換為 FIDL 導向的程式碼:
zx::result client_end = component::Connect<fidl_my_protocol::Protocol>(dev_path);
修正 fuchsia.device/Controller
如果移除這個多工處理方式,連結至 fuchsia.device/Controller
的程式碼就會
。這些地點可能會經過緊急處理,因此可能較容易找到
,並在損毀的元件中使用這個通訊協定。
程式碼看起來會像這樣:
component::ConnectAt<fuchsia_device::Controller>(caller.directory(), device_path);
解決方法是開啟裝置控制器的路徑,該路徑一律為裝置的路徑
加上 /device_controller
。
例如,更新後的程式碼如下:
std::string device_controller_path = device_path + "/device_controller";
component::ConnectAt<fuchsia_device::Controller>(caller.directory(), device_controller_path);
這適用於類別路徑和拓撲路徑,例如:
/dev/class/input/000/device_controller
/dev/sys/platform/usb/usb-hid/device_controller
您也應留意將管道投放到裝置控制器的程式碼:
fidl::WireCall<fuchsia_device::Controller>(channel)->Rebind();
您必須找出程式碼接收 channel
的位置,並更新該程式碼以連線至
裝置控制器。
必須更新才能來回轉換單一管道的程式碼,才能使其順利執行 兩個頻道
完成工作
CL 通過 CQ 後,即可進行合併!感謝你提供協助。
範例
偵錯
如果您在移除類別時仍有需要多工處理的程式碼, 請參閱下列錯誤訊息:
{$TOPOLOGICAL_PATH} ({$PROTOCOL_ID}): Failed to send message with ordinal={$ORDINAL} to device: FIDL endpoint was unbound due to unexpected message, status: ZX_ERR_NOT_SUPPORTED (-2), detail: unknown ordinal
It is possible that this message relied on deprecated FIDL multiplexing.
For more information see https://fuchsia.dev/fuchsia-src/contribute/open_projects/drivers/fidl_multiplexing
拓撲路徑和通訊協定 ID 對於裝置和 FIDL 通訊協定都有明確提示 多工處理仍仰賴多工處理
贊助者
如有問題或想掌握最新狀態,請與我們聯絡: