## 設備樹 設備樹屬性定義可以看這: [設備樹屬性定義](https://ithelp.ithome.com.tw/articles/10344251) **1.設備樹文件** 設備樹文件dts(Device Tree Source),裡面會包含如dtsi(Device Tree Source Include)檔案,會包含設備相關訊息,通常會有多個節點,在開發板中會以資料夾形式存在,查看設備樹之資料夾: /proc/device-tree 其中 文件夾為節點,而文件則為屬性,可通過cat指令進行查看。 dtsi 為共有的設備,dts為根據你的IC放置的設備。 ic 的 dtsi 文件當中,有些設備訊息可以根據需求自行添加於dts文件當中,透過& dtsi當中節點,以實現設備補充說明。 節點作用: 1. aliases: 作用就是在 linux /dev 顯示設備別名 可通過 & device,對設備進行引用。 2. chosen: 作用就是將 uboot 當中的 bootargs 內核命令行參數 傳遞至 linux,由uboot 自行於設備樹文件中進行添加,不需要自己設定。 節點中的常見屬性: 1. compatible : (driver會使用這個屬性進行Decive的匹配) ![image](https://hackmd.io/_uploads/B1T0YkGB0.png) 前面'fsl' 為廠商名字,而後面'imx6ul-pxp-v412'為晶片,也就是驅動模塊的名字。 可通過內核內部之值,檢查是否兼容當前設備。 2. model : 描述模塊訊息,不重要。 3. state : 設備狀態相關訊息 ![image](https://hackmd.io/_uploads/BJ7ujkMHC.png) 4. reg : 描述記憶體所在位置和長度 。 ![image](https://hackmd.io/_uploads/H1DY2kzS0.png) 而 從上一層節點之#address-cells 和 #size-cells屬性,用於描述下一層節點reg所需儲存訊息長度。 ![image](https://hackmd.io/_uploads/B1Gm61zSA.png) 舉例: ![image](https://hackmd.io/_uploads/rkdwkeGBA.png) 5. ranges :用於映射地址長度, <物理地址 虛擬地址 內存長度>。 **2.內核查看dts文件** 內核可以通過 of_fine_node_XXX函數 來讀取設備樹相關訊息 ![image](https://hackmd.io/_uploads/ry8X3gMSR.png) 可通過 of_find_node_by_name 函數,通過路徑和節點名字,來返回對應節點之結構體。 ![image](https://hackmd.io/_uploads/SyrVaeGBR.png) 直接用路徑查找 查找屬性 ![image](https://hackmd.io/_uploads/SkA8VZzS0.png)