【发布时间】:2021-08-26 08:32:55
【问题描述】:
我想借助 DT 覆盖在我的 Raspberry Pi3 B+ Linux 中集成/加载 gpio-pca953x 驱动程序。该驱动程序是通用 I²C 控制的 I/O 扩展器 gpio 驱动程序,适用于各种芯片,即 TCA6416。我设法创建了一个启用驱动程序的 dts 覆盖。
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
fragment@0 {
target = <&i2c1>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
tca6416: tca6416@20 {
compatible = "ti,tca6416";
reg = <0x20>;
gpio-controller;
#gpio-cells = <2>;
interrupt-parent = <&gpio>;
interrupts = <18 0x02>; //IRQ_TYPE_EDGE_FALLING
};
};
};
};
有一个新的 gpiochip /sys/class/gpio/gpiochip488 并且中断似乎也可以工作。
我认为下一个简单的步骤是在gpio-keys 模块的帮助下创建一个虚拟输入设备。不过好像我错了。
我像这样创建了另一个 DT 叠加层:
fragment@1 {
target-path = "/soc";
__overlay__ {
gpio: gpio-button {
compatible = "gpio-keys";
autorepeat;
button@14 {
label = "TestKey";
linux,code = <14>;
gpios = <&tca6416 0 1>;
};
};
};
};
但这一次,这个叠加层永远无法加载。我得到的错误总是在实时设备树符号表中找不到符号 tca6416 。我在这里做错了什么?有没有工作的例子?我还尝试用 gpio488 或任何其他可能的名称替换上面 gpios 中的 tca6416。两者都不起作用。
【问题讨论】:
-
第一个叠加层是用
-@(或--symbols)命令行选项编译的吗? -
我都用 -@ 选项编译了。
-
如果将它们放在一个叠加层中,它会起作用吗?
-
我想知道第一个叠加层中的符号是否被调整为引用活动树,或者它们是否仍然引用活动树中的
fragment@1。您能否列出系统上的活动设备树并检查tca6416是否出现在__symbols__节点中,它指的是什么? -
No tca6416 不会出现在活动树中的
__symbols__中。经过多次测试后,我设法找到了一个可行的解决方案,但不使用覆盖,而是修改 dts 文件。我会尽快相应地更改我的帖子。 可能是命名问题,tca6416: tca6416@20 应该是 tca6416_20: tca6416@20 我的第一次测试表明至少是这样。
标签: linux raspberry-pi linux-device-driver gpio device-tree