dtsファイルを修正する際には

dtsファイルは、上から下に向けて読み込まれていき、同じプロパティ名では上書きされていきます。

&emac1 {
  status = "okay";
  status = "disable";
}

と書くと、statusは最後に書いたstatus = “disable”が有効となる。

dtsファイルでは先頭に、
#include “hogehoge.dtsi”
と書かれている際は、まずそのファイルの定義が設定される。


hogehoge.dtsi

/ {
  mmc2: mmc@4022000 {
    compatible = "allwinner,sun50i-h616-emmc",
                 "allwinner,sun50i-a100-emmc";
    reg = <0x04022000 0x1000>;
    clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
    clock-names = "ahb", "mmc";
    status = "disabled";
    cap-sd-highspeed;
    cap-mmc-highspeed;
    #address-cells = <1>;
    #size-cells = <0>;
  };
};
  

foobar.dts

/dts-v1/;

#include "hogehoge.dtsi"

&mmc2 {
  interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
  pinctrl-names = "default";
  pinctrl-0 = <&mmc2_pins>;
  status = "okay";
};

と書いて、dtbファイルへ変換すると、

  mmc2: mmc@4022000 {
    compatible = "allwinner,sun50i-h616-emmc",
                 "allwinner,sun50i-a100-emmc";
    reg = <0x04022000 0x1000>;
    clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
    clock-names = "ahb", "mmc";
    interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
    pinctrl-names = "default";
    pinctrl-0 = <&mmc2_pins>;
    status = "okay";
    cap-sd-highspeed;
    cap-mmc-highspeed;
    #address-cells = <1>;
    #size-cells = <0>;

となり、未定義のプロパティ名は追加され、定義済みのプロパティ名は値が更新される。

プロパティを削除したい場合

dtsiファイルで、
 status = “disabled”;
となっていても、
dtsファイルで、
 status = “okay”;
となっていれば、dtbファイルは、
 status = “okay”;
となるが、「cap-sd-highspeed;」を削除したい場合は、
/delete-property/ プロパティ名;
を使用する。

foobar.dtsで

&mmc2 {
  interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
  pinctrl-names = "default";
  pinctrl-0 = <&mmc2_pins>;
  status = "okay";
  /delete-property/ cap-sd-highspeed;
};

と書けば、以下の様にdtbファイルでは「cap-sd-highspeed」は削除される

  mmc2: mmc@4022000 {
    compatible = "allwinner,sun50i-h616-emmc",
                 "allwinner,sun50i-a100-emmc";
    reg = <0x04022000 0x1000>;
    clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
    clock-names = "ahb", "mmc";
    interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
    pinctrl-names = "default";
    pinctrl-0 = <&mmc2_pins>;
    status = "okay";
    cap-mmc-highspeed;
    #address-cells = <1>;
    #size-cells = <0>;

ノードを削除したい場合

/delete-node/ ノード名;
を利用する。

/delete-node/ mmc2;

と書けば、ノード名 mmc2が削除される(mmc2内で定義された全てのプロパティが削除される)