Linux kernel 中断参数:设备树配置?

Linux kernel 中断参数:设备树配置?,linux-kernel,embedded-linux,interrupt,device-tree,Linux Kernel,Embedded Linux,Interrupt,Device Tree,我目前正在编写一个设备树节点来配置带有I2C的SCISS752双通道UART,I2C连接到从机地址0x4d。我还使用1.8432MHz的时钟。SCISSIS752的IRQ引脚连接到一个IO扩展器GPIO,在我的例子中是gpiopin 456。 我正在使用yocto创建linux发行版。我的linux内核版本4.18.25-yocto-standard 我的dts配置: /dts-v1/; #include "am33xx.dtsi" #include "am335x-bone-common.d

我目前正在编写一个设备树节点来配置带有I2C的SCISS752双通道UART,I2C连接到从机地址0x4d。我还使用1.8432MHz的时钟。SCISSIS752的IRQ引脚连接到一个IO扩展器GPIO,在我的例子中是gpiopin 456。 我正在使用yocto创建linux发行版。我的linux内核版本4.18.25-yocto-standard 我的dts配置:

/dts-v1/;

#include "am33xx.dtsi"
#include "am335x-bone-common.dtsi"
#include "am335x-boneblack-common.dtsi"

/ {
model = "TI AM335x BeagleBone Black";
compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
};

&am33xx_pinmux {
    pinctrl-0 = <&gpio_pins>;
    i2c1_pins_default: i2c1_pins_default {
    pinctrl-single,pins = <
        AM33XX_IOPAD(0x984, PIN_INPUT_PULLUP | MUX_MODE3) /* (D15) uart1_txd.I2C1_SCL */
        AM33XX_IOPAD(0x980, PIN_INPUT_PULLUP | MUX_MODE3) /* (D16) uart1_rxd.I2C1_SDA */
    >;};

&i2c1 {
    pinctrl-names = "default";
    pinctrl-0 = <&i2c1_pins_default>;
    status = "okay";
    clock-frequency = <400000>;

pcf8574a_38: pcf8574a@38 {
    compatible = "nxp,pcf8574a";
    reg = <0x38>;
    gpio-controller;            
    #gpio-cells = <2>;         
    };
sc16is752@4d {
    compatible = "nxp,sc16is752";
    reg = <0x4d>; 
    clocks = <&sc16is752_clk>;
    interrupt-parent = <&gpio3>;
    interrupts = <7 2>; 
    gpio-controller;
    #gpio-cells = <2>;

    sc16is752_clk: sc16is752_clk {
        compatible = "fixed-clock";
        #clock-cells = <0>;
        clock-frequency = <1843200>;
    };};
};
/dts-v1/;
#包括“am33xx.dtsi”
#包括“am335x bone common.dtsi”
#包括“am335x boneblack common.dtsi”
/ {
model=“TI AM335x BeagleBone Black”;
compatible=“ti,am335x骨骼黑色”、“ti,am335x骨骼”、“ti,am33xx”;
};
&am33xx_pinmux{
pinctrl-0=;
i2c1\u引脚\u默认值:i2c1\u引脚\u默认值{
pinctrl单端,引脚=<
AM33XX_IOPAD(0x984,引脚输入上拉| MUX_MODE3)/*(D15)uart1_txd.I2C1_SCL*/
AM33XX_IOPAD(0x980,引脚输入上拉|多路复用模式3)/*(D16)uart1_rxd.I2C1_SDA*/
>;};
&i2c1{
pinctrl names=“默认”;
pinctrl-0=;
status=“好”;
时钟频率=;
pcf8574a_38:pcf8574a@38 {
compatible=“nxp,pcf8574a”;
reg=;
gpio控制器;
#gpio细胞=;
};
sc16is752@4d {
compatible=“nxp,sc16is752”;
reg=;
时钟=;
中断父项=;
中断=;
gpio控制器;
#gpio细胞=;
sc16is752时钟:sc16is752时钟{
compatible=“固定时钟”;
#时钟单元=;
时钟频率=;
};};
};

我对设置中断父级和中断的值以使此配置工作感到困惑。

我看不到您的整个设备树,也不知道您正在运行什么内核…因此我无法指出您的确切问题所在。但我可以提供一些故障排除方面的指导

首先,您似乎是从
documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt
中的内核文档复制了节点。这是一个参考点,但只是为了说明

设备树并没有什么神奇之处。它是由内核中的驱动程序解析的,用来描述电气配置。这意味着,每当你不确定某个东西是如何工作的,你所需要做的就是查看驱动程序,看看它是如何解析的

我身上碰巧有4.19.0源代码。我在
drivers/tty/serial/sc16is7xx.c
中找到了您的NXP驱动程序。我通过兼容列表确认它支持
NXP,sc16is752

从输入驱动程序的探针
sc16is7xx_i2c_probe()
开始,您将立即看到一个IRQ值正在通过
i2c_客户端
结构传入,然后通过调用
sc16is7xx_probe()中的
devm_request_IRQ()
进行设置
。这意味着中断DT属性不在此驱动程序中处理。它们被传递给它


然后您需要阅读:了解中断控制器是如何工作的。您的
&gpio3
是否满足要求?它是否配置为中断控制器?它是否存在?

感谢您的回答,这很有帮助。我将查看它。此外,我还更新了我的问题,提供了更详细的设备树和内核版本还有。我希望help.gpio3肯定不符合要求。这只是供参考。由于IRQ连接到PCF8574 IO扩展器的5号引脚,我更改了这个:中断父级=;中断=;中断父级=;中断=;应该可以工作。我将通过检查中断来确认。