gyh2002
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1589回复:13

有关加载问题!

楼主#
更多 发布于:2002-11-13 22:21
1.我的网卡驱动程序的目标文件以动态形式加载模块,用法如下:
#insmod ****.o回车
..........
........  //以上是显示了我的驱动程序中探测函数中printk中内容
****.o:init_module:Device or resourse busy
Hint:insmod errors can be caused by incorrect module parameters,including invalid IO or IRQ parameters
之后我用命令
#lsmod 回车
并没有看到我的模块
我再次执行
#insmod ****.o 回车
这次不显示出以上任何信息,用lsmod能看到我的模块了,说明我的模块已经加载上去了!
但为什么总是要执行两次,才能加载上去呢?一次为什么不行,问题出现在什么地方?

2.再有如果我加载上去后,如果这期间我重新编译了模块,就先把加载的卸载
#rmmod ****.o
我再次执行
#insmod ****.o
则出现网卡连接不上的信息!为什么?我必须重新启机才行,这是为什么?

谁做过网卡驱动调试的或者哪位高手能回答此问题,在此先谢了!
gyh2002
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-20 23:11
这个问题已经解决了,我用pci_module_init替换了原来的pci_register_dev,不知道为什么用后者就会出现错误,用前者就没有,我看了一下这两个函数,只不过在pci_module_init中最后有一个函数pci_unregister_dev,我很想知道为什么?两者有什么区别?
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-20 11:35
cat /proc/ioport
看看是否有冲突。
gyh2002
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-20 00:14
这种方法是在驱动程序书中建议的,我想知道如果是i/o的问题,我如何做,才能确定这个结果呢?
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-19 08:40
我程序中申请irq号是在open函数中的,而刚加载时,还没执行到open函数,因此,我想不是irq的问题,我在初始化函数里分配了i/o与内存空间,这个会造成冲突吗?导致上述的错误?设备或资源忙?

为什么要在open函数里request呢?
都是在init理申请的。
gyh2002
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-18 23:37
我程序中申请irq号是在open函数中的,而刚加载时,还没执行到open函数,因此,我想不是irq的问题,我在初始化函数里分配了i/o与内存空间,这个会造成冲突吗?导致上述的错误?设备或资源忙?
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-18 16:37
你的irq不是动态分配的。是静态分配的。
是否申请内存空间或io口资源等等。
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-18 16:36
为了确定是不是irq的问题,你把动态分配irq的语句去掉。
我说的应该在open函数里。
gyh2002
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-15 23:31
你说的这个语句在什么函数里出现的呢?
我的程序是这样的:
static struct pci_driver ***_pci_driver = {
name: ***,
id_table: ***_pci_tbl,
probe: ***_probe,
           ........
}
static int __init ***_init_module (void)
{        
       printk(\"......\\n\");
       return pci_register_driver(&***_pci_driver);
}

module_init(***_init_module);

我的irq是动态分配的,是用这个函数:
request_irq()
加载后显示出的信息irq 的值是与刚启机时电脑显示出的irq是同一个值。
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-15 11:45
怎莫检查?为何第二次就可以了?

看看是否有if(opened)
{return -ebusy}
这样的语句阿。
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-15 11:44
因为你的驱动程序里可能有io或irq冲突的地方。
你的irq是动态分配还是自己分配的?
能否把你init函数给我看看。
resourse busy说明硬件有冲突。
你第一次insmod时加-s看看。
gyh2002
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-14 20:35
怎莫检查?为何第二次就可以了?
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-11-14 09:17
这种情况是在init_module中返回了-EBUSY之类的非0负数之类的值就会出现。你检查一下。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
ricky_ma
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2002-12-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-11-13 22:50
你的驱动有分配buffer吗?
游客

返回顶部