奇小葩讲设备树(5/5)-- Linux设备树详解(五)设备树的使用
對于任何的知識來說,了解了理論的知識,知道了設備樹怎么解析用以代替傳統的范式之后,我們需要知道怎么使用設備樹。對于使用我們分兩部分,一部分是它有哪些接口,能做些什么,至于怎么編寫dts文件本章不討論。主要包括兩部分:
1. 文件系統下的設備樹
一部分是出現問題后,怎么用來debug,對于內核來說一切皆是文件的思想,設備樹與文件系統的關系,在Linux系統起來后,會將解析完成的設備樹導出到用戶空間。
kernel啟動在of_init()函數中在sys/firmware/devicetree/base目錄下面為設備樹展開成sysfs的目錄和二進制屬性文件,所有的node節點就是一個目錄,所有的property屬性就是一個二進制屬性文件。
該函數比較簡單,其主要完成下面三件事情:
2. 設備樹的操作函數
學習完了設備樹的文件系統查看方法,那么對于在源碼中去拿到設備樹的節點或者屬性信息,內核提供了那些操作函數呢?內核中開放出來的接口函數的聲明大多在include/linux/下面,關于設備樹的都是以of形式開頭的命名
對應各個文件主要完成什么功能如下:
| of.h | 提供設備樹的一般處理函數,大部分的功能函數都在該文件中 |
| of_address.h | 地址相關的函數, 比如 of_get_address(獲得reg屬性中的addr, size值) |
| of_device.h | 設備相關的函數, 比如 of_match_device、of_device_register |
| of_dma.h | 設備樹中DMA相關屬性的函數 |
| of_fdt.h | dtb文件的相關操作函數,我們一般不使用 |
| of_gpio.h | GPIO相關的函數 |
| of_graph.h | GPU相關驅動中用到的函數, 從設備樹中獲得GPU信息 |
| of_iommu.h | IOMMU相關函數 |
| of_irq.h | 中斷相關的函數 |
| of_mdio.h | mdio相關的函數 |
| of_mtd.h | mtd相關的函數 |
| of_net.h | net相關的函數 |
| of_pci.h | pci相關的函數 |
| of_platform.h | 把device_node轉換為platform_device時用到的函數 |
| of_reserved_mem.h | reserved_mem的相關函數 |
- 通過compatible屬性查找指定節點
使用方法可以如下
np = of_find_compatible_node(NULL, NULL, “fsl,imx23-digctl”);
digctrl = of_iomap(np, 0);
- 通過節點名查找指定節點
- 通過路徑查找指定節點
data->current_node = of_find_node_by_path("/");
- 通過節點名查找指定節點
由于接口操作函數集比較多,詳細的需要看對應的函數定義。
總結
以上是生活随笔為你收集整理的奇小葩讲设备树(5/5)-- Linux设备树详解(五)设备树的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇小葩讲设备树(4/5)-- Linux
- 下一篇: Linux串口编程_termios