新闻  |   论坛  |   博客  |   在线研讨会
迅为iTOP-iMX6开发板-设备树内核-中断例程
daybydayi | 2019-08-29 10:57:10    阅读:431   发布文章

1.1 中断概述

ARM 架构 linux 内核中,有 5 种常见的异常,其中中断异常是其一,Linux 内核将所

有中断统一编号,使用一个 irq_desc 结构体来描述这些中断,里面记录了中断名称、中断状

态、中断标记、并提供了中断的底层硬件访问函数(如:清除、屏蔽、使能中断),提供了这

个中断的处理函数入口,通过它还可以调用用户注册的的中断处理函数。linux 内核的中断体

系已经很完善了,驱动工程师需要做的就是调用 request_irq 函数向内核注册中断处理函

数,下面我们来看看 request_irq 函数的定义:

static inline int __must_check

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,

const char *name, void *dev)

第一个参数 irq:中断号,与平台架构相关;

第二个参数 handler:用户中断处理函数;

第三个参数 flags:中断标记

第四个参数 devname:中断名字,可以通过 cat /proc/interrupts 查看;

第五个参数 dev_id:在 free_irq 中有用,也用做区分中断处理函数;

有注册就得对应着有注销,驱动的注销函数是 free_irq,其定义如下:

void free_irq(unsigned int irq, void *dev_id)

第一个参数 irq:中断号,与 request_irq 中的 irq 一致,用于定位 action 链表;

第二个参数 dev_id:用于在 action 链表中找到要卸载的表项;同一个中断的不同中断

处理函数必须使用不通的 dev_id 来区分,这就要求在注册中断共享时参数 dev_id 必须唯

一。

1.2 设备树文件修改

这里我们选用 back 按键用于测试,它的网络标号是“DISP0_WR”,对应的 IO 管脚编

号是“NANDF_WP”,对应的宏定义为“MX6QDL_PAD_NANDF_WP_B__GPIO6_IO09 ”

这个管脚在 gpio-keys 驱动中已经使用,我们需要在设备树中将其屏蔽,然后在设备树

文件中增加测试例程的设备树代码。

打开“arch/arm/boot/dts/imx6qdl-sabresd.dtsi”设备树文件。

将 gpios = <&gpio6 9 GPIO_ACTIVE_LOW>; 屏蔽掉,如下图所示。

01.jpg

在“itop_max485_ctl”之后添加以下代码:

key_int{

compatible = "itop,key_int_name";

pinctrl-names = "default";

gpio_key_int = <&gpio6 9 GPIO_ACTIVE_LOW>;

status = "okay";

};

添加完成之后如下图所示,

03.jpg

重新烧写设备树文件,在开发板“/sys/bus/platform/device”目录下会有 key_int 文件

夹生成,表明设备注册完成。

1.3 测试驱动

驱动源码在压缩包“独立中断例程_V1.0”中。

使用“insmod key_int.ko”命令加载驱动模块。如下图。

04.jpg

按下按键“Back”,会有打印信息,如下图所示。

05.jpg

卸载驱动如下图。

06.jpg

测试完成。

9911245-4af7a16ceefa7f25.webp.jpg


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客