阅读:1599回复:7
请教pci多块卡的驱动问题驱动多个相同的设备的时候,我觉得应该设定静态的全局数组,然后以次设备号来区分.可是2.4的内核Write.Read操作没有inode参数,从哪里分离次设备号呢?怎么样对应呢? |
|
沙发#
发布于:2002-07-14 14:50
“ 驱动多个相同的设备的时候,我觉得应该设定静态的全局数组,然后以次设备号来区分”
这是对的。 对设备文件的第一个操作总是open,它的函数原型如下: int (*open) (struct inode* inode, struct file* filp) 它的第一个参数是inode指针。在open中,通常会将filp->private_data赋值为一个设备指针。所以read和write操作就不不需要inode指针了。 |
|
板凳#
发布于:2002-07-14 16:38
可中断处理程序怎么区分呢?
|
|
地板#
发布于:2002-07-15 11:24
可中断处理程序怎么区分呢? 中断处理程序用request_irq注册 : int request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long irqflags, const char * devname, void *dev_id) 它的最后一个参数dev_id指向唯一标识该设备的对象,通常是设备对象指针。该指针将被传递给handler。在中断共享时,dev_id不能为NULL。 在中断处理程序中,检查本设备是否发出中断,如果不是,应立刻退出。 |
|
地下室#
发布于:2002-07-15 11:28
几张卡的
base+int_c_s_reg_offset应该是不一样的,中断来的时候,看看是谁的中断,然后做相应的处理 |
|
|
5楼#
发布于:2002-07-15 16:52
几张卡的 我想问一下关与中断处理,我在WINDOWS中都是通过DPC调用处理具体的中断调用,但LINUX中似乎没有,我看到的是下半部处理或立即队列,请问一下,用下半部处理我是否可以自己定义mark_bh()里的函数. 您那可有相关例子程序可让我拜读一下. 我很着急. |
|
6楼#
发布于:2002-07-15 18:13
我有几个问题不明白,请教一下:
1.如果我在init_module中找到了同样的两块或更多PCI卡,我用一个全局结构数组来分别存储它们各自的基地址,中断号等资源信息,但我不知道应用层如何访问每块卡,我的想法是,我在/DEV下创立两个或更多主设备号一样,而次设备号递增的设备,用OPEN 函数打开,通过MINOR取得次设备号,从而得到具体的数组地址,但如何区分掉用的IOCTL,这样可以实现并行吗? |
|
7楼#
发布于:2002-07-15 18:45
几张卡的 怎样看是谁的中断?难道仅仅从寄存器的状态判断?冲突时怎么处理? |
|