快速瀏覽

設備樹覆蓋


 
  • DTBO 功能需要特定的內核版本或更高版本。請參閱以下有關板的信息。
    • Odroid-XU4:5.4
    • Odroid-N2/N2+:4.9.230
    • Odroid-C4:4.9.230
  • 並且還需要最新的boot.ini、config.ini以及BOOT分區中包含overlays目錄結構
  • 在 Android 上,/ odm/env.ini 和 /odm/boot.ini在 linux 上是相同的規則。
  • 不支持包括 C2 在內的其他板,目前沒有計劃支持它們。

通過使用此Overlay功能,我們可以輕鬆地將電路板設置為使用包括屏蔽產品在內的外圍設備。

要使用屏蔽,您應該在 Ubuntu 系統上使用“fdt”工具設置 DTB 文件。或者,您必須在下載 Odroid 內核源代碼後從頭開始構建,只是為了使用屏蔽。

如果一個盾牌使用了幾種互不相同的協議,那麼就很容易犯一些錯誤。這些錯誤很難被發現,以至於有幾個人打算放棄使用他們的盾牌。

但是,通過 DTB 覆蓋,您可以通過編輯config.ini文件來設置您的電路板。只需要為盾牌設置一個 DTBO 名稱。


現在我們在BOOT分區中除了boot.ini文件之外還提供了config.ini文件。

的config.ini文件包含可以由用戶設置來配置董事會他們的口味的各種參數,它是由被叫的boot.ini它需要多個矩文件。

如果BOOT分區上沒有config.ini文件,則將自動使用存儲在boot.ini 中的默認參數。因此,您不必擔心是否刪除了config.ini文件或錯誤地留下了一些錯別字。

但請記住,不能刪除boot.ini。這是 U-boot 使用的核心腳本文件。

Android 中,來自 /odm的env.iniconfig.ini 的作用相同。


Linux

這是Odroid-C4的config.ini文件的 DTBO 部分。它可以與您的不同,但結構是相同的。

; Device Tree Overlay
overlay_resize=16384
overlay_profile=
overlays="spi0 i2c0 i2c1 uart0"
 
[overlay_custom]
overlays="i2c0 i2c1"
 
[overlay_hktft32]
overlays="hktft32 ads7846"
 
[overlay_hktft35]
overlays="hktft35 sx865x-i2c1"
安卓

ODROID 設置提供了編輯功能,可以在 ODROID-N2/C4 上覆蓋設備樹列表。

打開 Odroid-Settings 應用程序並選擇DTB Overlay 菜單。您可以通過單擊DTB 覆蓋列表菜單來編輯設備樹覆蓋列表。

列表的內容應由型號名稱和分隔符組成。分隔符必須是 *’ ‘* 空格。

並且DTBO Size Resize值用於調整 dtbo 地址大小以應用設備樹覆蓋。

這是來自 ODROID-C4 的示例。

i2c0 i2c1 spi0 uart0 pcf8563
疊加配置文件

您應該看到每個部分的overlay_profileoverlays變量。部分用方括號括起來。

具有前綴overlay_ 的所有部分以及位於前綴之後的部分名稱的其餘部分用作配置文件名稱。配置文件名稱將位於overlays_profile 中

請參閱下面的示例。

  • [overlay_custom]:可以是疊加配置文件,配置文件名稱為custom
  • [overlay_hktft32]:可以是覆蓋配置文件,配置文件名稱為hktft32
  • [hktft32]:它不能是覆蓋配置文件。覆蓋配置文件名稱必須具有前綴overlay_

每個配置文件都應該有自己的覆蓋變量。並且overlays變量列出了對應於各個proposal 的overlay 文件。當然,它應該與覆蓋配置文件的名稱有關。

覆蓋文件位於BOOT分區中。您可以在以下路徑中看到覆蓋文件。

  • Odroid-XU4:./overlays/*.dtbo
  • Odroid-N2:./amlogic/overlays/odroidn2/*.dtbo
  • Odroid-C4:./amlogic/overlays/odroidc4/*.dtbo

在 C4 中,我們提前提供了一些有用的疊加層。準備好的 DTBO 文件可以稍後更改。

root@odroid:~# ll /media/boot/amlogic/overlays/odroidc4
total 34
drwx------ 2 root root 2048 Jun  4 01:25 ./
drwx------ 3 root root 2048 Jun  4 01:25 ../
-rwx------ 1 root root  830 Jun  4 01:25 ads7846.dtbo*
-rwx------ 1 root root  545 Jun  4 01:25 can0.dtbo*
-rwx------ 1 root root 1587 Jun  4 01:25 hifishield.dtbo*
-rwx------ 1 root root 1726 Jun  4 01:25 hifishield2.dtbo*
-rwx------ 1 root root 1238 Jun  4 01:25 hktft32.dtbo*
-rwx------ 1 root root 1877 Jun  4 01:25 hktft35.dtbo*
-rwx------ 1 root root  223 Jun  4 01:25 i2c0.dtbo*
-rwx------ 1 root root  223 Jun  4 01:25 i2c1.dtbo*
-rwx------ 1 root root  417 Jun  4 01:25 onewire.dtbo*
-rwx------ 1 root root  469 Jun  4 01:25 pcf8563.dtbo*
-rwx------ 1 root root  516 Jun  4 01:25 spi0.dtbo*
-rwx------ 1 root root  768 Jun  4 01:25 sx865x-i2c1.dtbo*
-rwx------ 1 root root  225 Jun  4 01:25 uart0.dtbo*
-rwx------ 1 root root  225 Jun  4 01:25 uart1.dtbo*
-rwx------ 1 root root  225 Jun  4 01:25 uart2.dtbo*
用法

所以,讓我們看看[overlay_hktft32]部分。在這種情況下,此部分的配置文件名稱是hktft32。這包含它自己的覆蓋變量,其中列出了hktft32 LCD DTBO 文件和ads7846觸摸屏 DTBO 文件。我們可以在BOOT分區的./amlogic/overlays/odroidc4目錄下看到hktft32.dtboads7846.dtbo文件。

如果要使用此配置文件,可以將配置文件名稱放入overlay_profile變量中。

; Device Tree Overlay
overlay_resize=16384
overlay_profile=hktft32
overlays="spi0 i2c0 i2c1 uart0"
 
[overlay_custom]
overlays="i2c0 i2c1"
 
[overlay_hktft32]
overlays="hktft32 ads7846"
 
[overlay_hktft35]
overlays="hktft35 sx865x-i2c1"

檢查overlay_profile變量。

然後 U-Boot 加載在overlays變量中命名的 DTBO 文件。在這種情況下,它只會加載hktft32.dtboads7846.dtbo

如果您將overlay_profile變量留空,作為默認狀態,則U-Boot在overlay_profile變量之後引用overlays變量。這意味著不會引用部分中的任何其他覆蓋變量。在這種情況下,U-Boot 將加載 4 個 DTBO 文件,spi0.dtbo, i2c0.dtbo, i2c1.dtbo, uart0.dtbo。這 4 個組件位於板上的 40 針接頭上。因此,默認情況下,SPI、UART 和兩條 I2C 總線是打開的,無需任何編輯。

當然,您可以根據需要製作一個部分。您唯一需要做的就是放置overlays變量並為其分配一些.dtbo文件。命名的文件必須存在於BOOT分區的覆蓋目錄下。


基礎知識

這是要編譯為.dtbo文件的.dts文件的示例源代碼。

/dts-v1/;
/plugin/;

/ {
	fragment@0 {
		// i2c2 aliased with i2c0.
		// This activates i2c2 but it will be named as i2c0 on the userspace.
		target = <&i2c2>;

		__overlay__ {
			status = "okay";
		};
	};
};

此 DTBO 啟用主 DTB 的i2c2節點。如果DTB 文件中沒有i2c2節點,則不會加載此疊加層。

您可以在文件頂部看到一些前綴。

/dts-v1/;
/plugin/;

這兩行描述了這個文件是一種設備樹 blob 的插件。需要用作 DT 覆蓋。

/ {
	fragment@0 {
		// i2c2 aliased with i2c0.
		// This activates i2c2 but it will be named as i2c0 on the userspace.
		target = <&i2c2>;

		__overlay__ {
			status = "okay";
		};
	};
};

這部分是這個覆蓋文件的主要內容。

您可以看到片段部分。該片段是一個代碼塊,其中包含一些節點或屬性。它能夠在一個 DT 覆蓋文件上定位多個片段。稍後將再次提到這樣的一個例子。

一個片段必須有一個目標屬性來確定這些新節點及其屬性所在的位置。在此示例中,i2c2節點是目標節點。這意味著扁平化的設備樹必須有一個i2c2節點。

目標屬性的下面,有一個__overlay__塊。所有的片段也必須有一個__overlay__塊。您可以將代碼(一些節點和一些屬性)寫入此塊。

簡而言之,如果 DTBO 加載成功,__overlay__塊的內容將覆蓋扁平設備樹上的目標節點。

多個片段

您可以將多個片段定位到一個要編譯為.dtbo文件的DTS 文件中。請參閱以下代碼。

/dts-v1/;
/plugin/;

/ {
	fragment@0 {
		// i2c2 aliased with i2c0.
		// This activates i2c2 but it will be named as i2c0 on the userspace.
		target = <&i2c2>;

		__overlay__ {
			status = "okay";
		};
	};

	fragment@1 {
		// i2c3 aliased with i2c1.
		// This activates i2c2 but it will be named as i2c1 on the userspace.
		target = <&i2c3>;

		__overlay__ {
			status = "okay";
		};
	};
};

有兩個片段。每個片段都有一個數字,0 和 1。這些數字是要執行的順序。在這種情況下,fragment@0將首先加載,然後fragment@1將被加載。

定位到不存在的節點

在許多情況下,如果您為傳感器編寫自己的 DTS,則沒有相應的節點可以覆蓋。在這種情況下,您可以使用target-path。請看下面的代碼。

/dts-v1/;
/plugin/;

/ {
	fragment@0 {
		target-path = "/";

		__overlay__ {
			foo: foo {
                            status = "okay";
                            compatible = "foo, bar";
                            
                            integer-property = <10>;
                        }
		};
	};
};

此示例代碼具有target-path屬性而不是target屬性來確定它的位置。

target-path屬性 的正確值是從扁平設備樹的根開始的絕對路徑。在這種情況下,foo節點將位於目標扁平化設備樹的根目錄下。


  • 您應該使用 Linux 來使用dtc工具。本指南使用 Ubuntu 20.04 LTS。
  • 如果您需要任何頭文件依賴項,例如使用特定 AP 系列的 GPIO 定義,則需要整個內核源。
    • 在這種情況下,克隆 Linux 內核源代碼並在該源代碼樹中使用make dtbs命令。

為了製作.dtbo文件,不需要下載整個內核源代碼,因為我們有dtc(設備樹編譯器)工具。

準備好 DTS 文件後,最後,您可以將其編譯為.dtbo文件並準備好在您的板上使用它。

通過包管理器 安裝dtc工具。

sudo apt install device-tree-compiler

在了解選項之前,請先查看此示例。

dtc -I dts -O dtb -o my-sensors.dtbo my-sensors.dts

此命令使用 3 個選項。

  • -I : 輸入文件格式
  • -O : 輸出文件格式
  • -o : 輸出文件名

所以這個命令意味著,

  • 其輸入文件格式為dts,輸出文件格式為dtb。輸出文件名為my-sensors.dtbo
    • 編譯我的-sensors.dts我-sensors.dtbo與指定的選項。

編譯完成後,您可以使用您的.dtbo文件和本文檔頂部描述的 config.ini。

將新的.dtbo文件放在BOOT分區上的正確目錄中。請參閱指南,包括每個 Odroid 板的目錄路徑及其在覆蓋配置文件部分的用法。


    • Raspberry Pi 的 DTBO 文檔是研究設備樹如何工作的極好指南之一。但是,R.Pi 有一個特殊的引導加載程序文件和內核成分,因此它們可以非常流暢地處理 DTBO,例如動態加載 DTBO 或 DTBO 參數。我們計劃支持他們,但害怕說它可能無法實現。
快速瀏覽

ODROID-C4

四核ARM CORTEX-A55 |4GB RAM |4 USB3 PORTS