为什么我无法通过overlay dts上的/delete-node/删除设备树节点?

问题描述 投票:0回答:2

我想删除overlay dts上的设备节点,但它不起作用。
示例代码如下:

a.dtsi:
&soc {
    gpio_keys {
        compatible = "gpio-keys";
        label = "gpio-keys";
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&gpio_key_active>;
        pinctrl-1 = <&gpio_key_suspend>;

        vol_up {
            label = "volume_up";
            gpios = <&tlmm 85 GPIO_ACTIVE_LOW>;
            linux,input-type = <1>;
            linux,code = <115>;
            gpio-key,wakeup;
            debounce-interval = <15>;
            linux,can-disable;
            };
        };
};

b.dts
#include "a.dtsi"
&soc {
    /delete-node/ gpio_keys;
};

我想删除 b.dts 上的 gpio_keys 节点。但这不起作用。
有哪位大佬能解释一下原因吗

device-tree
2个回答
4
投票

我刚刚使用您所做的确切语法实现了它,基于此处所述:设备树源未记录

因此,只需添加我自己的 dts(如下所示),我就能够删除不需要的节点,并实现我想要的配置。

#include "am335x-nand-eeprom-rtc.dtsi"
#include "am335x-pcm-953.dtsi"

//Remove ecap node
/delete-node/ &ecap0_pins;
/delete-node/ &ecap0;

// Remove touchscreen related nodes
/delete-node/ &i2c_ts;
/delete-node/ &ts_irq_pin;
/delete-node/ &backlight;
/delete-node/ &lcd_pins;
/delete-node/ &lcdc;
/delete-node/ &lcd_3v3;
/delete-node/ &panel;

&sound {
    status = "disabled";
};

2
投票

根据下面的来源,这是不可能的:

/delete-node/
/delete-prop/
指令仅由dtc编译器在单个编译中使用。

devicetree blob 格式中没有任何内容可以表示删除属性或节点的概念。

您无法删除覆盖 dtb 中的属性或节点。

https://lore.kernel.org/lkml/[电子邮件受保护]/T/

© www.soinside.com 2019 - 2024. All rights reserved.