高通平台中用devicetree註冊裝置及驅動匹配

2021-08-03 11:25:15 字數 1057 閱讀 1470

1、在裝置樹檔案(.dts)中的相應節點下新增要註冊裝置的節點

&soc ;

...... };

定義好的裝置樹原始檔(dts檔案)會被編譯器dtc編譯成二進位制的dtb檔案。然後在系統上電時,這個二進位制檔案會被載入到記憶體中,其位址被儲存在r2暫存器中。但是,這個時候還並不存在device tree,需要經過kernel解析(主要工作分是兩次掃瞄dtb,第一次是為了根據裝置節點給裝置樹分配足夠的記憶體,第二次是將節點填入記憶體,生成裝置樹)後,才生成真正的裝置樹,然後將裝置樹的根節點位址賦值給乙個全域性變數"allnodes"。

然後,核心會根據裝置樹的內容生成相應的裝置結構體,這個結構體中包含了裝置的資源(i/o位址等),並用of_device_add函式把裝置結構體新增到裝置模型中。

2、裝置和驅動的匹配

匯流排(bus)的 match 函式通過呼叫of_driver_match_device實現驅動和裝置的匹配。確認驅動是否匹配的關鍵因素是檢查driver中的of_device_id型別的成員與device中device_node型別的成員是否匹配,device_node型別代表的是裝置樹中的樹節點,內含compatible, type, name等裝置節點資訊;of_device_id結構體包含compatible, type, name;優先對比compatible,其次是type,最後是name,這三種資訊如果出現乙個相同的,則認為裝置與驅動匹配。一般都是compatible匹配。

3、驅動程式的編寫

當使用裝置樹編寫驅動時,不需要再在**中定義device結構中的resource等成員,因為裝置的屬性資源定義在裝置樹的節點中,驅動需要是可通過相應的api獲取;而相應的driver結構體需要初始化of_device_id型別的of_match_table成員,以便匹配。由於driver中用於匹配device的資料不再是name成員,所以,name成員可以隨意定義,而不影響匹配。

高通平台中gpio簡單操作和除錯

做底層驅動免不了gpio打交道,所以對其操作和除錯進行了一下簡單的梳理 一 gpio的除錯方法 在linux下,通過sysfs,獲取gpio狀態,也可以操作gpio。1 獲取gpio狀態 cd sys kernel debug cat gpio 2 操作gpio 以gpio99為例 cd sys c...

高通平台中gpio簡單操作和除錯

做底層驅動免不了gpio打交道,所以對其操作和除錯進行了一下簡單的梳理 一 gpio的除錯方法 在linux下,通過sysfs,獲取gpio狀態,也可以操作gpio。1 獲取gpio狀態 cd sys kernel debug cat gpio 2 操作gpio 以gpio99為例 cd sys c...

高通平台Bring up

3.2.amss 部分編譯 主要由以下部分構成 adsp,boot,debug,modem,rpm,trustzone,wcnss,分別根據高通的說明編譯這些模組,不過其中有些模組我們不會改,直接用release的binary檔案就行,比如 debug,rpm,trustzone,wcnss。3.3...