驱动开发之获取中断资源

1.中断注册(当中断产生的时候,操作系统会自动调用我们中断处理函数)
**int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char name, void dev)
参数:
@irq 中断号
@handler 中断处理函数的入口地址
@flags 标志
@name 名字:/proc/interrupts
@dev 传递给中断处理函数的参数

返回值:
成功返回0,失败返回错误码

2.注销中断
void free_irq(unsigned int irq, void *dev)
参数:
@irq 中断号
@dev 注册中断的时候,传递给中断处理函数的参数

注意:
devm_request_irq申请的中断号,在驱动与设备分离的时候,自动释放中断资源

3.共享中断
多个驱动程序申请的是同一个中断号(多个设备请求的中断是同一个中断的时候)
此时中断产生的时候,操作系统是不区分那个设备产生了中断,操作系统做法是将这个中断号关联
所有中断处理函数全部调用一次,所以此时中断处理函数必须能判别是否是自己的设备产生的中断,
如果不是,立即返回,如果是,则做中断处理。

<1>注册中断的时候,需要IRQF_SHARED标志
<2>给中断处理函数传递的参数必须是唯一的,不能是NULL

4.中断上半部和下半部

将中断处理函数中需要做的事情,分成两部分,在不同的函数中完成。
中断处理函数中完成的事情,是上半部。
而另外一个函数中完成的事情,是下半部。

打游戏(进程)<----------(中断)
吃饭:重要(上半部)
吃虾:耗时时间长(下半部:进程上下文或中断上下文)<----------女友电话(中断)

上半部:
中断处理函数,不可以被打断

下半部:
可以被打断,可以在中断上下文或进程上下文执行

问:上半部什么时候执行?
答:中断产生,就执行中断处理函数(上半部)

问:下半部什么时候执行?
答:在合适的时间点执行(一般是在上半部结束的时候,开始触发下半部)

问:什么事情放在上半部,什么事情放在下半部?
答:紧急的事情,耗费时间不多,我们放在上半部
耗时的时间长或需要休眠,我们放在下半部

网卡(轮询或中断) 中断-----> 网卡收到数据 (以太网头|ip头|tcp/udp头|用户数据)

5.下半部的实现机制

软中断(理解原理) tasklet(掌握) workqueue(掌握)

注意:
<1>软中断相关的函数接口,Linux 内核并没有导出,所以在驱动中不可以直接使用
<2>tasklet是基于软中断实现
<3>workqueue它是进程上下文的下半部机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux驱动开发中,中断是一种重要的机制。在Linux中,中断有两种类型:可抢占的内核代码运行在进程上下文中,而中断上下文则是不可被抢占的,会一直运行直到结束。对于硬件产生的中断,比如按键中断或网卡中断,被称为硬件中断,每个硬件中断都有对应的处理函数。在中断处理函数中,由于中断必须短暂且不能休眠,因此不能使用信号量或互斥锁,而是使用自旋锁来实现对共享资源的保护。此外,在Linux驱动开发中,可以使用计时函数来获取当前的系统时间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [linux驱动开发-中断](https://blog.csdn.net/weixin_29898767/article/details/124320089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [关于Linux驱动开发中断处理](https://blog.csdn.net/weixin_44468026/article/details/119763134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值