【linux】驅動-9-裝置樹外掛

李柱明 發表於 2021-04-07


前言

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

參考:用到野火提供的工具指令碼。

9. Linux裝置樹外掛

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

9.1 格式

裝置樹外掛是有相對固定的格式的,相當於多穿一件衣服而已。
格式如下

/dts-v1/;
/plugin/;

 / {
        [email protected] {
            target-path = "/";
            __overlay__ {
                /*在此新增要插入的節點*/
            };
        };
 };

分析

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

9.2 裝置樹外掛的編譯和載入

9.2.1 單獨使用dtc工具編譯

裝置樹和裝置樹外掛都是使用 DTC 編譯工具編譯。
裝置樹編譯後得到的是 .dtb 檔案;
而裝置樹外掛編譯後得到的是 .dtbo 檔案。
使用野火提供的一鍵式編譯工具:

  • 地址:git clone https://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