日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux驱动开发中与设备树相关的6种debug方法

發布時間:2023/12/20 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。