linux-kernel - 在设备树中使用 __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";
};
};
推荐阅读
- python - python - 使用 re.sub 删除两个字符之间的空格
- azure - Programmatically verify whether TTL enabled on Cosmos DB collections
- curl - Character Limit For IBM Watson Using Curl
- sql - Displaying data by only month and year in SQL (Oracle)
- java - How does is autoboxing different from assigning a value?
- svelte - Passing a list of components in Svelte
- python-3.x - Run queries in AWS Athena from boto3 gives bad permissions
- azure-analysis-services - 如何增量刷新以突触池为源的 Azure 分析服务。“默认”处理选项是否支持增量刷新
- javascript - 如何从另一个 JS 数组创建新的 JS 数组
- sed - 如何使用 sed 去除两个图案之间的点