在设备树中使用__overrides__可防止加载驱动程序



你好,为了支持我自己的设备,我创建了一个自定义的设备树覆盖。我在yocto中集成了它,在内核中添加了一个补丁。

我还想通过简单地更改boot/config.txt中的数据来允许更改设备参数,所以我在设备树覆盖文件中添加了覆盖部分。但问题是,当这个部分出现时,内核并没有加载我的驱动程序。当我从文件中删除这个部分时,一切都很好。一个驱动程序加载了,我可以对它进行操作。这里可能有什么问题?

不工作的设备树覆盖:

/dts-v1/;
/plugin/;
&soc {
hatch2sr {
compatible = "hatch2sr";
pwm-names = "motor1";
pwms  = <&pwm 0 1000000>;

openpossensor-gpios  = <&gpio 3  1>;
closepossensor-gpios = <&gpio 26 1>;
relay-gpios =          <&gpio 25 1>;
};
__overrides__ {
openpos_sensor_pin    = <&hatch2sr>,"openpossensor-gpios:4";
openpos_sensor_flags  = <&hatch2sr>,"openpossensor-gpios:8";
closepos_sensor_pin   = <&hatch2sr>,"closepossensor-gpios:4";
closepos_sensor_flags = <&hatch2sr>,"closepossensor-gpios:8";
relay_pin             = <&hatch2sr>,"relay-gpios:4";
relay_flags           = <&hatch2sr>,"relay-gpios:8";
};
};

工作设备树:

/dts-v1/;
/plugin/;
&soc {
hatch2sr {
compatible = "hatch2sr";
pwm-names = "motor1";
pwms  = <&pwm 0 1000000>;

openpossensor-gpios  = <&gpio 3  1>;
closepossensor-gpios = <&gpio 26 1>;
relay-gpios =          <&gpio 25 1>;
};
};

/boot/config.txt的最后一行:

dtoverlay=hatch2sr

内核编译和引导时没有任何抱怨。

一个问题是&hatch2sr无法解决,因为没有该名称的标签。如果Raspberry Pi加载程序无法解析引用,它将不会应用覆盖。这可以通过将标签附加到预期节点来修复,如下所示:

&soc {
hatch2sr: hatch2sr {

另一个问题是Raspberry Pi加载程序在加载覆盖时没有应用在__overrides__节点中指定的设备树参数。我认为这是因为__overrides__节点需要放在设备树的根节点中,但它目前在&soc节点中。如下图所示移动__overrides__节点可能会解决问题:

/dts-v1/;
/plugin/;
&soc {
hatch2sr: hatch2sr {
compatible = "hatch2sr";
pwm-names = "motor1";
pwms  = <&pwm 0 1000000>;

openpossensor-gpios  = <&gpio 3  1>;
closepossensor-gpios = <&gpio 26 1>;
relay-gpios =          <&gpio 25 1>;
};
};
/ {
__overrides__ {
openpos_sensor_pin    = <&hatch2sr>,"openpossensor-gpios:4";
openpos_sensor_flags  = <&hatch2sr>,"openpossensor-gpios:8";
closepos_sensor_pin   = <&hatch2sr>,"closepossensor-gpios:4";
closepos_sensor_flags = <&hatch2sr>,"closepossensor-gpios:8";
relay_pin             = <&hatch2sr>,"relay-gpios:4";
relay_flags           = <&hatch2sr>,"relay-gpios:8";
};
};

最新更新