malinru
驱动牛犊
驱动牛犊
  • 注册日期2001-12-18
  • 最后登录2002-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1599回复:7

请教pci多块卡的驱动问题

楼主#
更多 发布于:2002-07-14 10:41

 驱动多个相同的设备的时候,我觉得应该设定静态的全局数组,然后以次设备号来区分.可是2.4的内核Write.Read操作没有inode参数,从哪里分离次设备号呢?怎么样对应呢?
pengyc
驱动牛犊
驱动牛犊
  • 注册日期2001-07-16
  • 最后登录2010-04-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-14 14:50
“ 驱动多个相同的设备的时候,我觉得应该设定静态的全局数组,然后以次设备号来区分”
 这是对的。
对设备文件的第一个操作总是open,它的函数原型如下:
int (*open) (struct  inode* inode,  struct file* filp)
它的第一个参数是inode指针。在open中,通常会将filp->private_data赋值为一个设备指针。所以read和write操作就不不需要inode指针了。
malinru
驱动牛犊
驱动牛犊
  • 注册日期2001-12-18
  • 最后登录2002-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-14 16:38
可中断处理程序怎么区分呢?
pengyc
驱动牛犊
驱动牛犊
  • 注册日期2001-07-16
  • 最后登录2010-04-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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。
在中断处理程序中,检查本设备是否发出中断,如果不是,应立刻退出。
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-15 11:28
几张卡的
base+int_c_s_reg_offset应该是不一样的,中断来的时候,看看是谁的中断,然后做相应的处理
111
liaoliao123
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2005-01-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-15 16:52
几张卡的
base+int_c_s_reg_offset应该是不一样的,中断来的时候,看看是谁的中断,然后做相应的处理

我想问一下关与中断处理,我在WINDOWS中都是通过DPC调用处理具体的中断调用,但LINUX中似乎没有,我看到的是下半部处理或立即队列,请问一下,用下半部处理我是否可以自己定义mark_bh()里的函数.
您那可有相关例子程序可让我拜读一下.
我很着急.
liaoliao123
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2005-01-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-15 18:13
 我有几个问题不明白,请教一下:
    1.如果我在init_module中找到了同样的两块或更多PCI卡,我用一个全局结构数组来分别存储它们各自的基地址,中断号等资源信息,但我不知道应用层如何访问每块卡,我的想法是,我在/DEV下创立两个或更多主设备号一样,而次设备号递增的设备,用OPEN 函数打开,通过MINOR取得次设备号,从而得到具体的数组地址,但如何区分掉用的IOCTL,这样可以实现并行吗?
malinru
驱动牛犊
驱动牛犊
  • 注册日期2001-12-18
  • 最后登录2002-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-15 18:45
几张卡的
base+int_c_s_reg_offset应该是不一样的,中断来的时候,看看是谁的中断,然后做相应的处理


怎样看是谁的中断?难道仅仅从寄存器的状态判断?冲突时怎么处理?
游客

返回顶部