linux下中断程序,Linux中断编程

Linux中断编程

视频1-Linux中中断到概念和中断处理机制

题目:中断的作用是什么?

答案:中断是外设异步通知soc的一种高效的方式,当soc正在做其他事情的时候,如果外设产生了数据,可以打断soc,然后让soc去处理刚刚产生的数据的那个硬件,至于如何处理,arm和linux会提供这样的接口出来,让驱动工程师自由的去处理,可以去读数据,也可以不管它,都是可以的

题目: 内核中是如何区分不同的中断的?

答案: 内核中会为每个中断设置一个中断号,不同的外设在硬件设计的时候就已经对应好了一个中断号,只要通过原理图和数据手册就可以查到

视频2-设备树文件中定义中断号

题目:设备树是如何定义中断号的?

答案:设备树中定义好了中断控制器,我们只需要通过继承的方式去继承,比如interrupt-parent = ;然后通过interrupts = <2 4>;定义它的号码和触发方式

视频3-驱动代码中获取到中断号码的方法

题目:驱动代码中如何获取到中断号码?

答案:首先一定要获取到中断号码定义的节点,然后通过irq_of_parse_and_map函数就可以得到,实际就是一个整数,这个整数无需去管它是多少数字,因为它是在内核中重新去用一个数字去定义的,同时代码操作中断的时候,也无需去管他,只要在设备树上定义号,并验证能响应就行了

视频4/5-申请中断处理-request_irq的使用

题目:中断的触发方式有哪些?

答案:1,内部控制器触发中断的时候的标志

2,上升沿触发

3,下降沿触发

4,高电平触发

5,低电平触发

题目:中断处理方法中返回值是什么

答案: IRQ_HANDLED

题目: 如何查看中断是否申请成功

答案:cat /proc/interrupts

题目:如何去释放中断

答案:free_irq(),当我们申请的中断,就必须去释放,否则下次装载驱动就会报错

视频6/7-驱动中获取硬件数据并传递给用户的方法

题目:按键驱动中是如何封装数据?

答案:设计了一个数据对象,用于描述按键的状态,键值

struct key_event{

int code; // 表示按键的类型: home, esc, Q,W,E,R,T, ENTER

int value; // 表示按下还是抬起 1 / 0

};

题目:应用空间读取到数据后是如何解析的?

答案:应用空间读到时struct key_event event; 然后解析code和value就可以知道是什么按键和状态了

视频8-阻塞的概念和接口使用

题目:文件io模型有哪几种?

答案:1,非阻塞

2,阻塞

3,多路复用--select/poll

4, 异步信号通知faync

题目:什么叫阻塞?

答案:当进程在读取外部设备的资源(数据),资源没有准备好,进程就会休眠linux应用中,大部分的函数接口都是阻塞

视频9-阻塞的实现-等待队列的使用

题目:进程的状态有哪些?

答案:就绪态, 运行态,挂起态,终止态

题目:如何实现阻塞?

答案:1,将当前进程加入到等待队列头中

add_wait_queue(wait_queue_head_t * q, wait_queue_t * wait)

2,将当前进程状态设置成TASK_INTERRUPTIBLE

set_current_state(TASK_INTERRUPTIBLE)

3,让出调度--休眠

schedule(void)

视频10-非阻塞模式的实现.trec

题目:什么叫做非阻塞?

答案:在读写的时候,如果没有数据,立刻返回,并且返回一个出错码,用的会比较少,因为通过循环来完成,比较耗资源

题目:驱动中如何实现非阻塞?

答案:驱动中需要去区分,当前模式是阻塞还是非阻塞, 如果当前是非阻塞模式,并且没有数据,立马返回一个出错码

视频12/13/14-多路复用select和poll的概念

题目:什么叫多路复用?

答案:当代码中需要监控多个文件的读,写,出错时,如果不考虑多进程多线程的话,某个时刻只能处理一个文件的读写出错,而多路服用就指能够通过监控多个文件的读写出错,完成多个文件的阻塞的功能

题目:应用程序使用什么来实现多路复用?

答案:select或者是poll

视频15-poll驱动的实现

题目:驱动中如何实现多路复用?

答案:1,在file_operation的接口中实现poll接口

2, 调用poll_wait,,将当前到等待队列注册系统中

3,有数据返回一个POLLIN,无数据就返回0

视频16-异步信号通知应用程序编程

题目: 什么叫做异步信号通知?

答案:当有数据到时候,驱动会发送信号(SIGIO)给应用,就可以异步去读写数据,不用主动去读写,这种方式对于应用程序而言效率就比较高了

题目:应用程序如何去实现异步信号操作?

答案:1,设置信号处理方法

2,将当前进程设置成SIGIO的属主进程

3,将io模式设置成异步模式

视频17-异步信号的驱动编程实现.trec

题目: 驱动中如何实现异步信号通知?

答案:1,需要和进程进行关联--记录信号该发送给谁

2,在某个特定的时候去发送信号,在有数据的时候

视频18-中断下半部的由来.trec

题目: 为什么有中断下半部?

答案:中断的特点就是要快,因为中断比较霸道,中断产生后,如果cpu对该中断没有禁止,cpu就必须去处理,也即是说cpu原来做的事情就被迫被打断,去执行中断处理,所以如果中断处理的时间比较长,就会导致cpu原来执行的代码出现问题,故此中断处理要快,但是有些中断的处理时间确实比较长,比如触摸屏的坐标分析,网卡的数据帧的处理,这就违背了中断处理要快的原则,因此内核就采取将一些耗时的中断处理的工作延后处理,这就是中断下半部

题目: 中断下半部有哪些实现方法?

答案: 1,softirq: 处理比较快,但是内核级别的机制,需要修改整个内核源码,不推荐也不常用

2,tasklet: 内部实现实际调用了softirq

3, workqueue: 工作队列

视频19-tasklet的实现.trec

题目: 如何实现tasklet?

答案:1,初始化tasklet

2,tasklet_schedule,在上半部中放入到内核线程中--启动

视频20-work下半部的实现.trec

题目: 如何实现工作队列work?

答案:1,初始化work

2,schedule_work,在上半部中放入到内核线程中--启动

题目: tasklet和工作队列的不同?

答案:tasklet是运行在中断上下文中的,而work是运行在进程上下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值