开发板上预留的几个gpio口全试过了都是返回-6的错误。内核报-6 意思 /* No such device or address */ 。求教大家,,,
8 个解决方案
#1
gpio_request都没报错, 上面打错了,,,,,
#2
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
#3
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
#4
在设备树里看是那么平台设备是怎样传中断号的
#5
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
在设备树里看是那么平台设备是怎样传中断号的
哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,,
configure gpio irq
默认用FILTER_NUM7,设置GPIO触发模式为下降沿。
通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。
实际内核标准的接口是gpio_to_irq()。
unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING)
gpio_for_irq(pdata->gpio, irqflag);
request irq
最后就是正常的注册中断处理函数。
如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。
比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98.
#define INT_GPIO_0 96
ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata))
如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值:
ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata)
#6
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
在设备树里看是那么平台设备是怎样传中断号的
哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,,
configure gpio irq
默认用FILTER_NUM7,设置GPIO触发模式为下降沿。
通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。
实际内核标准的接口是gpio_to_irq()。
unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING)
gpio_for_irq(pdata->gpio, irqflag);
request irq
最后就是正常的注册中断处理函数。
如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。
比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98.
#define INT_GPIO_0 96
ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata))
如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值:
ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata)
只能查看平台设备的"pdata->irq "是怎样提供了
#7
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
在设备树里看是那么平台设备是怎样传中断号的
哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,,
configure gpio irq
默认用FILTER_NUM7,设置GPIO触发模式为下降沿。
通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。
实际内核标准的接口是gpio_to_irq()。
unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING)
gpio_for_irq(pdata->gpio, irqflag);
request irq
最后就是正常的注册中断处理函数。
如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。
比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98.
#define INT_GPIO_0 96
ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata))
如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值:
ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata)
只能查看平台设备的"pdata->irq "是怎样提供了
追开发板上power按键,去内核找他的代码,发现根本就没用中断,用的是轮询,他用一个宏隔开中断和轮询,我打开这宏,使用中断方式,发现power键失灵了,没用了,真是坑死人,难怪我之前怎么弄中断就是没反应,卖着开发板的自己都不用中断。 害的我tp还要去改用轮询方式
#8
有够坑的了…………不过按键有些人喜欢用定时轮询,避免抖动问题
#1
gpio_request都没报错, 上面打错了,,,,,
#2
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
#3
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
#4
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
在设备树里看是那么平台设备是怎样传中断号的
#5
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
在设备树里看是那么平台设备是怎样传中断号的
哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,,
configure gpio irq
默认用FILTER_NUM7,设置GPIO触发模式为下降沿。
通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。
实际内核标准的接口是gpio_to_irq()。
unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING)
gpio_for_irq(pdata->gpio, irqflag);
request irq
最后就是正常的注册中断处理函数。
如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。
比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98.
#define INT_GPIO_0 96
ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata))
如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值:
ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata)
#6
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
在设备树里看是那么平台设备是怎样传中断号的
哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,,
configure gpio irq
默认用FILTER_NUM7,设置GPIO触发模式为下降沿。
通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。
实际内核标准的接口是gpio_to_irq()。
unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING)
gpio_for_irq(pdata->gpio, irqflag);
request irq
最后就是正常的注册中断处理函数。
如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。
比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98.
#define INT_GPIO_0 96
ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata))
如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值:
ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata)
只能查看平台设备的"pdata->irq "是怎样提供了
#7
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。
gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。
不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
在设备树里看是那么平台设备是怎样传中断号的
哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,,
configure gpio irq
默认用FILTER_NUM7,设置GPIO触发模式为下降沿。
通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。
实际内核标准的接口是gpio_to_irq()。
unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING)
gpio_for_irq(pdata->gpio, irqflag);
request irq
最后就是正常的注册中断处理函数。
如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。
比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98.
#define INT_GPIO_0 96
ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata))
如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值:
ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata)
只能查看平台设备的"pdata->irq "是怎样提供了
追开发板上power按键,去内核找他的代码,发现根本就没用中断,用的是轮询,他用一个宏隔开中断和轮询,我打开这宏,使用中断方式,发现power键失灵了,没用了,真是坑死人,难怪我之前怎么弄中断就是没反应,卖着开发板的自己都不用中断。 害的我tp还要去改用轮询方式
#8
有够坑的了…………不过按键有些人喜欢用定时轮询,避免抖动问题