Linux驱动开发中与设备树相关的6种debug方法
整理出了6種驅動開發時與設備注冊、設備樹相關的調試方法,彼此間沒有優先級之分,每種方法不一定是最優解,但可以作為一種debug查找問題的手段,快速定位問題原因。例如在芯片驗證時,不同時鐘頻率下系統啟動情況摸底時,U-Boot fdt命令可以方便快捷的幫助我們完成這個實驗。
#1. dtdiff工具
這個文件需要在宿主機安裝,在對比二進制的dtb文件時比較方便。文本格式的dts文件對比并不需要這個工具。
對比以下兩個dtb文件的結果如下:
#2. kernel device-tree base
系統啟動后進入到/sys/firmware/devicetree/base目錄可以看到當前已注冊設備的設備樹信息,通過相關命令可以查看當前設備的結點信息、狀態等。
上面各個子目錄里顯示的信息和設備樹dts文件中定義的條目數是一樣的。
#3. U-Boot fdt command
驅動代碼在debug期間,若希望更改外設模塊的設備樹屬性時,在不改變存儲設備中dtb文件的前提下,進入到U-Boot的命令行界面,通過U-Boot的fdt命令來實現。例如修改外設時鐘源、修改外設時鐘名、status屬性等。為了使U-Boot支持fdt命令需要打開CONFIG_OF_LIBFDT。
U-Boot提供的fdt命令是針對內存中的FDT而言的,因此,需要將存儲設備中的dtb文件加載到內存RAM中。然后再告知FDT設備樹在內存中的地址。
將dtb文件從mmc中加載到DDR的0x61000000地址處,并告知U-Boot FDT文件在內存中所在的位置為0x61000000。
通過fdt print查看測試驅動driver-test的設備樹信息,當查看某一個設備樹結點的信息時,需要使用絕對路徑進行設備樹結點的索引。
driver-test的設備樹定義在源文件中dts如下圖,dtb內的信息是完全展開的,實際上和dts中信息完全一致。clocks = <0x00000005>是dtc編譯時對結點引用label重新插入的phandle值。
##3. 修改設備時鐘
設備樹文件中driver_test的時鐘源為oscclk2,時鐘名為apb_clk。現在將driver_test時鐘源設置為oscclk1,時鐘名改為ahb_clk。oscclk1在dtc編譯后的label編號時0x00000012。
修改后如下圖:
修改完之后,手動加載kernel鏡像來啟動系統。系統啟動后查看設備樹信息是否修改成功。可以看見clock-names已經由原來的apb_clk更改為ahb_clk。
##3. 修改設備status狀態
設備樹里status可以決定設備使能狀態,status狀態支持以下幾種格式,若設置了status為disable,那么設備是不可用的。若不設置status,默認設備可用。
在platform_device創建時會檢查設備的可用性,若設備不可用,那么是不會創建platform_device的。of_device_is_available用于檢查status屬性。
driver-test的設備樹里定義了status = “disable”,查看設備結點的status信息也顯示為disable。
加載driver-test驅動以后設備未創建成功,當然也就無法執行驅動的probe函數。這是除compatible不匹配之外的另一個無法執行驅動probe函數的原因。
現在重啟系統進入到U-Boot的命令行模式,通過fdt修改status的值為okay。
啟動系統,再次確認設備樹結點信息是否修改成功以及驅動是否執行了probe函數。通過系統啟動的log信息可以看到,當修改完status狀態值之后,driver_test的probe函數得到了執行。
driver_test設備也正常的注冊進platform設備中。
##3. fdt 其他功能
fdt print可以打印整個的dtb FDT信息
fdt header查看dtb的頭部信息,通過size大小也可以間接的判斷當前加載的設備樹文件是否為所需的設備樹。
#4. dtc工具
dtc可以使用宿主機提供的亦可以使用kernel提供的。這個工具是將已編譯的dtb文件反匯編。
#5. 查看kernel fdt文件
這個fdt是未解壓縮的dtb文件,里面的內容和dtb完全一樣。在kernel系統中執行hexdump查看:
通過UE查看原始的dtb文件,與fdt文件內容完全一致。
#6. of_property_xxx
在代碼中可以調用of.h中提供的API來檢查或這獲取device node的信息。
例如下面的調用方式
------END------
總結
以上是生活随笔為你收集整理的Linux驱动开发中与设备树相关的6种debug方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雷神台式计算机配置,雷神新用户手册:拿到
- 下一篇: Unity 内置渲染管线转URP