QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1549|回复: 10

Dragonfly大哥帮忙:驱动程序模块出错

[复制链接]
发表于 2003-9-1 15:45:37 | 显示全部楼层 |阅读模式
系统:Redhat 9
内核:2.4.20-8

我写了一个ps/2的鼠标驱动程序,是作为模块插入内核当中的。而内核中原有的ps/2 mouse support已经被我编译出内核。
问题是这个样子的,我在模块的初始化当中,申请了12号IRQ,并且申请了从0x300开始的3个ioports,insmod时显示申请成功,注册miscdevice成功。在/dev中mknod一个c设备mknod ps2mousec c 10 1也没有出错。cat /proc/interrupts显示中断号也申请成功。这个时候我的驱动程序应该和设备文件ps2mouse挂接起来了的,但是为什么lsmod仍然显示我的模块为unused?????
而且在我rmmod时并未打印我在cleanup_module中定义的打印信息。在rmmod后再insmod我的模块,系统出错。我怀疑是我的cleanup没有作用,irq和ioports都没有被释放。按理说cleanup应该不会出错啊,而且就算释放资源出错,也应该给我个打印信息啊!但是现在什么都没有,为什么???
请Dragonfly大哥指点一下!!
发表于 2003-9-1 22:51:37 | 显示全部楼层
u can try to open the file /dev/ps2mouse by uself to see if the used count increases.
u create a ps2mouse file, but who will use that file as u mouse device?

u rmmod code is strangce, have u run dmesg to check? after u run rmmod, cat /proc/interrupts to see if it is cleared?
回复

使用道具 举报

 楼主| 发表于 2003-9-2 09:46:41 | 显示全部楼层
我mknod了一个minor为1的ps2mouse misc设备文件,而我的驱动里面也申请一个minor为一的miscdevice啊,那么在系统里面它们应该关联起来了的。
我在console下面挂gpm: gpm -m /dev/ps2mouse -t imps2,有两种结果:一个就是cann't open the device,我的理解是不是说无法调用我的file_operation()里面的open函数?还有一个就是说ps2mouse init fail,但是我在init_module里面并没有干什么啊!而且used count也一直显示unused!!
init_module():

int init_module(void)
{
  if(request_irq(MOUSE_IRQ, mouse_interrupt, 0, "ps2mouse", NULL))
  {
    printk(KERN_ERR "ps2mouse:request_irq failed.\n");
    return -EBUSY;
  }
  printk("ps2mouse:request_irq success.\n");

  if(request_region(MOUSE_BASE, 3, "ps2mouse") < 0)
    {
      printk(KERN_ERR "ps2mouse: request_region failed.\n");
      return -ENODEV;
    }
  printk("ps2mouse:request_region success.\n");

  if(misc_register(&mouse_dev) < 0)
    {
      printk(KERN_ERR "ps2mouse: cannot register misc device.\n");
      release_region(MOUSE_BASE, 3);
      return -EBUSY;
    }
  printk("register misc device success.\n");

  return 0;
}

只是申请irq,io, 注册miscdevice,而且insmod的时候都显示申请成功了的啊:cat /proc/interrupts 显示irq12是我的ps2mouse, cat /proc/misc 显示minor为1的ps2mouse,应该都是没有问题了的,但是就是不知道为什么不能init and open!!!

我的cleanup_module()也有问题,rmmod之后,cat /proc/interrupts显示出错,再insmod时就报错,说是资源忙

cleanup_module()

void cleanup_moduel(void)
{
  printk("cleanup module begin.\n");
  misc_deregister(&mouse_dev);
  printk("deregister miscdevice success.\n");
  release_region(MOUSE_BASE, 3);
  printk("release_region success.\n");
  free_irq(MOUSE_IRQ, NULL);
  printk("free_irq success.\n");
}
而且连第一句都没有打印!!
重启之后就能insmod了,虽然情况和前面一样!
现在我暂时不管释放资源的问题我想先让我的鼠标动起来啊
但是现在............................

劳Dragonfly大哥帮我看看了
这几天一直在麻烦Dragonfly大哥,不好意思了!!
回复

使用道具 举报

发表于 2003-9-2 11:23:37 | 显示全部楼层
no that can not open or init fail happend why try to call u open function. u init_module is called when insmod

did u use dmesg to monitor the output? a low level may not allow all msg printed on u screen.
回复

使用道具 举报

 楼主| 发表于 2003-9-2 18:26:49 | 显示全部楼层
dmesg showed what the screen shows, just some printks, no more!

i dont know what wrong with my initialize
while i cannt init my driver, i cannt go down for other func, like interrupt, and so on!!
i dont know how to do!

maybe i cannt finish it before next monday!(my project asked me to finish that before then.)
555555.........................
回复

使用道具 举报

发表于 2003-9-3 11:15:52 | 显示全部楼层
can u read that qpmouse.c? it is base on ps/2 mouse code. and it is a module. maybe u can try to learn that code first?
回复

使用道具 举报

 楼主| 发表于 2003-9-3 11:50:22 | 显示全部楼层
我现在已经把pc_keyb.c模块化了
在我把内核中的ps/2 mouse support编译出来之后,我把我的pc_keyb模块插入内核,可以正常工作
我现在就是想让它跑起来,已经可以了!然后我在把pc_keyb.o中的键盘支持拿出来(内核里面已经有了),再来研究里面的鼠标支持
相信把pc_keyb和qpmouse合起来看应该能比较快的搞定吧(但愿如此)!!!!!
谢谢Dragonfly大哥(你在学校呆了21年,我呆了16年,呵呵,还是要喊你大哥才好!)

btw:你现在是在攻读博士学位吗!加油!!
回复

使用道具 举报

发表于 2003-9-4 10:24:40 | 显示全部楼层
nose_roxete在文中写到:

cleanup_module()

void cleanup_moduel(void)
{
printk("cleanup module begin.\n");
misc_deregister(&mouse_dev);
printk("deregister miscdevice success.\n");
release_region(MOUSE_BASE, 3);
printk("release_region success.\n");
free_irq(MOUSE_IRQ, NULL);
printk("free_irq success.\n");
}

我想rmmod 的时候没出来打印信息是不是因为你把"module"写成了"moduel"
回复

使用道具 举报

 楼主| 发表于 2003-9-4 12:28:49 | 显示全部楼层
呵呵
笔误,已经纠正过来了
thanx!
回复

使用道具 举报

发表于 2003-9-5 08:03:37 | 显示全部楼层
yes, i think u can modularize it. and u shoudl be able to figure out teh problem with these two code.


yes, i am trying to get my doctor degree. but too tough for me.
回复

使用道具 举报

 楼主| 发表于 2003-9-5 09:08:32 | 显示全部楼层
只要你想,你就能做到的,我相信你
很多事情不是因为难而使你没有信心,往往是因为你没有信心所以才变得难

加油!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 09:29 , Processed in 0.065810 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表