【linux】驅動-9-設備樹插件


前言

建議:去原文鏈接觀看,排版、觀感便於學習。
鏈接:

參考:用到野火提供的工具腳本。

9. Linux設備樹插件

設備樹插件(Dynamic DeviceTree)與 Linux4.4 後引入。
設備樹插件可以理解為設備樹的補丁。可以動態加載到系統中,無需重新編譯整個設備樹。

9.1 格式

設備樹插件是有相對固定的格式的,相當於多穿一件衣服而已。
格式如下

/dts-v1/;
/plugin/;

 / {
        fragment@0 {
            target-path = "/";
            __overlay__ {
                /*在此添加要插入的節點*/
            };
        };
 };

分析

  • /dts-v1/:指定 dts 版本。
  • /plugin/:表示設備樹插件中可以引用設備樹中的節點。因為這些節點在設備樹插件中是未定義的,所以,要加上本行code。
  • target-path = "/";:指定設備樹插件加載的位置。(默認在根節點下
  • 我們要插入的設備及節點或者要引用(追加)的設備樹節點放在 __overlay__ {…}; 內。
  • 其它都是固定的。

9.2 設備樹插件的編譯和加載

9.2.1 單獨使用dtc工具編譯

設備樹和設備樹插件都是使用 DTC 編譯工具編譯。
設備樹編譯後得到的是 .dtb 文件;
而設備樹插件編譯後得到的是 .dtbo 文件。
使用野火提供的一鍵式編譯工具:

  • 地址:git clone //gitee.com/Embedfire/ebf-linux-dtoverlays.git
  • 要編譯的設備樹插件源文件放在 ebf-linux-dtoverlays/overlays/ebf 目錄下, 然後回到編譯工具的根目錄 ebf-linux-dtoverlays/ 執行 make 即可。
  • 生成的.dtbo位於 ~/ebf-linux-dtoverlays/output 目錄下。
  • 注意:如果你在執行 make 後出現報錯,可以嘗試先卸載 device-tree-compiler(卸載命令為:sudo apt-get autoremove device-tree-compiler), 重新安裝,然後在 ebf-linux-dtoverlays/basic/fixdep 文件的權限, 修改權限命令為:chmod 777 scripts/basic/fixdep

9.2.2 內核dtc工具編譯設備樹插件

編譯設備樹插件和編譯設備樹類似,這裡使用內核中的dtc工具編譯編譯設備樹插件。
編譯命令:內核構建目錄/scripts/dtc/dtc -I dts -O dtb -o xxx.dtbo xxx.dts

  • 意為編譯 dts 為 dtbo

9.2.3 加載設備樹插件

先拷貝設備樹插件文件到開發板上。

9.2.3.1 使用 echo 命令加載

先在 /sys/kernel/config/device-tree/overlays/下創建一個新目錄,名字自定義。
然後將 dtbo 固件 echopath 屬性文件中或將 dtbo 的內容 catdtbo 屬性文件中。

echo xxx.dtbo >/sys/kernel/config/device-tree/overlays/xxx/path
# 或
cat xxx.dtbo >/sys/kernel/config/device-tree/overlays/xxx/dtbo

刪除設備插件:rmdir /sys/kernel/config/device-tree/overlays/xxx

9.2.3.2 uboot 加載

不同的板子可能不支持。
修改環境變量文件即可,進入/boot目錄下 修改 vim uEnv.txt