册和注销中断处理
程序?
1)MDA不需CPU参与而中断是需要CPU参与的。2)中断注册函数和中断注销函数注册中断:i
trequest_irqu
sig
edi
tirqirqretur
_tha
dleri
tvoidstruct
fpt_regsu
sig
edlo
gflagsco
stchardev_
amevoiddev_id注销中断;Voidfree_irqu
sig
edi
tirqvoiddev_id释放中断和中断信号线7中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?
中断是CPU处于被中状态下来接受设备的信号,而轮询是CPU主动去查询该设备是否有请求。如果是请求设备是一个频繁请求cpu的设备,或者有大量数据请求的网络设备,那么轮询的效率是比中断高。如果是一般设备,并且该设备请求cpu的频率比较底,则用中断效率要高一些。8驱动中操作物理绝对地址为什么要先ioremap因为内核没有办法直接访问物理内存地址,必须先通过ioremap获得对应的虚拟地址。9设备驱动模型三个重要成员是?platfoem总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?Li
ux设备模型中三个很重要的概念就是总线设备驱动即busdevicedriver。platform总线是内核注册好的用于管理设备及驱动的一种模式。总线实现好了匹配规则,内核对于往platform总线上注册的设备及驱动对应的类型做了抽象。10i
smod一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?i
smod调用i
it函数,rmmod调用exit函数。注意在i
it函数中申请的资源在exit函数中要释放,包括存储,ioremap,定时器,工作队列等等。也就是一个模块注册进内核,退出内核时要清理所带来的影响,带走一切不留下一点痕迹。卸载模块时曾出现卸载失败的情形,原因是存在进程正在使用模块,检查代码后发现产生了死锁的问题。11原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源只有一个使用者行不行?所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位。定义一个变量比如i
tflag0
ifflag0
flag1操作临界区;flag0这样应该不能起到互斥的作用。因为另外一个进程根本没有flag这个变量,自然不用
f检查就能进入临界区。充当互斥的变量应该是访问进程都可见的
12自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋
锁还是信号量?还是两者都能用?为什么?
使用自旋锁的进程不r