日期:2014-05-16  浏览次数:20982 次

linux下中断号分配和申请的问题
有关中断号分配和申请的问题:

问题1:linux系统下中断号是否是已经分配好的?我看到有这么一句话:
  LINUX内核对中断向量号的使用规定如下: 0-31号中断向量对应于异常类型,
  32-47号中断向量分配给可屏蔽硬件中断,48-255号分配给软件中断。
  那么,对于硬件来说,每个硬件是否都已经分配好了自己的中断号?
  比如说,现在遇到的一个驱动程序(IIC的驱动),它的中断号是43.
  那么我写IIC的驱动程序时,是不是必须用43的中断号?
问题2:我查看了/proc/interrupts,发现我要用的中断号已经被占用。
  但是我有想用这个中断号的话,我能否把已经占用的中断号释放掉呢?

以上问题如果已经看明白了,就不用看下面的内容了。
我现在想自己写一个IIC的驱动程序。但是,用的板子中,根文件系统已经植入了一个IIC的驱动。
我的理解是,一个硬件设备,应该是可以有多个驱动程序的。只要申请的设备号不重复就可以。
但是现在,申请设备成功了,在文件打开是,无法申请中断号。因为中断号已经被占用了(返回的错误代码为-16)。
我尝试着换了一个好申请,但是还是失败了(返回的错误代码为-22)。问什么?




请高手帮忙看一下。。。。


------解决方案--------------------
终端号是bios启动的时候就分配好的。
一个中断是可以设置多个中断程序的,但是必须在申请设置中断的时候需要设置共享模式。
按你的情况应该是原有的程序使用了独占模式了。
中断程序中可以自己判断是否是自己关心的设备发出的中断,如果不是就应该返回pass。还有如果返回了handled系统会认为已经处理完成,不再调用后续的中断程序。
------解决方案--------------------
楼上基本正解, 中断时可以共享的。
 
除了 PCI 总线以为,其他总线的外设 的中断都是由硬件设计决定的,
是不可更改的。
------解决方案--------------------
只有i2c适配器才要用i2c的中断吧!一般i2c只要与i2c_adapter通信就行了。

你是什么驱动呢?