为什么我不能通过在覆盖 dts 上通过 /delete-node/ 删除设备树节点?



我想删除覆盖 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节点。但它不起作用.
任何研究员都可以解释原因吗?

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

因此,通过简单地添加我自己的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";
};

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

"/delete-node/和/delete-prop/指令仅由 单个编译中的 DTC 编译器。

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

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

https://lore.kernel.org/lkml/c342562e-f915-a853-c2a8-eecefd94b88d@gmail.com/T/

最新更新