Linux-笔记 Linux内核中断心得

本文详细介绍了Linux中断的使用流程,包括获取中断号、中断处理函数的划分(上半部和下半部)、软中断、tasklet和工作队列的应用,以及如何从设备树中获取中断信息。
摘要由CSDN通过智能技术生成

一、linux中断使用流程

        1、先获取要使用中断对应的中断号。

        2、使用request_irq申请中断,此函数会激活中断,不用了就用free_irq。

        3、注册中断处理函数irqreturn_t (*irq_handler_t)(int, void*)。

        4、使能、禁止。

二、上半部和下半部

        1、上半部:中断处理函数,处理比较快的不会占用很长时间的可以放到上半部完成。

        2、下半部:处理时间较长的,把那部分代码提取出来叫给下半部去处理。

        3、中断服务函数一定要处理的越快越好,没有绝对的指明那些属于上半部哪些属于下半部,有以下建议:

                1)如果处理的内容不希望被其他中断打断,放上半部。

                2)如果处理的任务对时间敏感,放上半部。

                3)如果处理的任务与硬件有关,放上半部。

                4)除上述特点的其他任务放下半部执行。

        4、上半部的执行方式就是中断处理函数,下半部提供了以下几种机制:

                1)软中断

                        “BH” ,谁触发谁执行。               

struct softirq_action
{
	void	(*action)(struct softirq_action *);
};

                2)tasklet

                       利用软中断来实现的机制,也需要用到上半部,在上半部中调用tasklet_schedule函数使tasklet在合适的时间内运行。

                3)工作队列

                       特点是将推后的工作交给一个内核线程是执行,因为工作在进程上下文,所以工作队列允许睡眠或重新调度。

三、设备树中中断节点信息

        1、 interrupts 属性描述中断信息, #interrupt-cells 描述了 interrupts 属性的 cells 大小,也就是一条信息有几个 cells。interrupt-parent指定父中断,interrupt第一个cells是gpio编号。

四、获取中断号

        1、中断信息已经写入到设备树中,编写驱动需要使用到中断号,使用函数irq_of_parse_and_map函数从interrupt属性中提取对应的设备号,也可以使用函数gpio_to_irq获取gpio对应的中断号。

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值