modir
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2004-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1383回复:7

字符设备驱动问题

楼主#
更多 发布于:2003-02-03 10:41
我写了一个字符设备的驱动,其中用register_chrdev()注册了一个字符设备,而且定义了open(),release(),ioctrl(),read(),write()这几个函数。将这个模块加入到内核中后,用cat /proc/devices可以看到这个设备,但是编程时无法用open()打开他。

请问诸位,有人知道这是为什么吗?
神龙斗士
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-08 10:54
我写了一个字符设备的驱动,其中用register_chrdev()注册了一个字符设备,而且定义了open(),release(),ioctrl(),read(),write()这几个函数。将这个模块加入到内核中后,用cat /proc/devices可以看到这个设备,但是编程时无法用open()打开他。

请问诸位,有人知道这是为什么吗?
 


1)可以在/proc/modules里看到你的模块吗? 还有你指出了其相应的设备吗? 比如/dev/yourchardevice,查一下其MAJOR号是否被用了, 还有权限的问题。 如果这些都没问题, 而且你的open定义也没什么问题, 你应该可以打开这个设备的。
2)你是动态的(/sbin/insmod)注册这个设备还是静态的(编译到内核)? 当然这个不太影响接口的一些表现。 你在用open打开时提示的错误是什么呢, 最好能描述一下, 这样回答你的问题也比较容易些
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
modir
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2004-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-08 11:28
引用:

1)可以在/proc/modules里看到你的模块吗? 还有你指出了其相应的设备吗? 比如/dev/yourchardevice,查一下其MAJOR号是否被用了, 还有权限的问题。 如果这些都没问题, 而且你的open定义也没什么问题, 你应该可以打开这个设备的。
2)你是动态的(/sbin/insmod)注册这个设备还是静态的(编译到内核)? 当然这个不太影响接口的一些表现。 你在用open打开时提示的错误是什么呢, 最好能描述一下, 这样回答你的问题也比较容易些

――

我是动态加载这个模块的,并且可以看到我加载的这个模块,major号是系统分配的(254),open的定义应该没有任何问题,编译过程中没有任何warning。还有root用户的权限应该没有什么问题吧。
另外“还有你指出了其相应的设备吗? ”是什么意思,我不太明白,谢谢。
神龙斗士
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-08 13:24
引用:
我是动态加载这个模块的,并且可以看到我加载的这个模块,major号是系统分配的(254),open的定义应该没有任何问题,编译过程中没有任何warning。还有root用户的权限应该没有什么问题吧。
另外“还有你指出了其相应的设备吗? ”是什么意思,我不太明白,谢谢。
 


 既然你的设备主设备号是254, 那么应该用mknod建立一个设备节点(inode), 这个文件建立在哪个目录底下无所谓, 一般建在/dev下。 比如可以建立一个这样的设备文件
mknod /dev/yourdefinedname(随便叫个什么名字就可以了, 因为打开是用主 设备号和次设备号) c 254 10

然后你可以写一个程序来检测:

int
main(int argc, char *argv[])
{
    int    fd;

    if ((fd = open(\"/dev/yourdefinedname\", O_RDWR)) == -1) {
        perror(\"open\");
        exit(1);
    }

    return  0;
}

注意不能打开的提示是什么
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
hnlinkun
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2016-04-05
  • 粉丝0
  • 关注0
  • 积分9449分
  • 威望49823点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-09 17:31
用户被禁言,该主题自动屏蔽!
modir
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2004-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-12 14:27
hometown,分数已经给出。
另外,还有一些问题想向大家请教。
我用request_irq()申请了4号串口中断,但是中断服务程序只响应了一次,此后当中断条件再次被满足的时候,中断始终无法得到响应。
不知道是什么原因,请指教。
神龙斗士
hometown
驱动大牛
驱动大牛
  • 注册日期2002-10-24
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-12 15:12
hometown,分数已经给出。
另外,还有一些问题想向大家请教。
我用request_irq()申请了4号串口中断,但是中断服务程序只响应了一次,此后当中断条件再次被满足的时候,中断始终无法得到响应。
不知道是什么原因,请指教。
 


响应一个中断是硬件和软件共同完成的(见INTEL的手册, 要建立中断向量表, 设置ldtr, 同时还与全局描述符表相关, 比较的复杂, 这里不详细说了)。 一般PC机的4号中断是给串口1使用的。 因此如果你的设备不是连到这个地方, 那么一定在硬件电路上有一个中断线和INTEL8259A(后来的CPU已经把这个晶片集成在一起了)的4号中断相连, 或者还有种可能是因为有的总线支持好几个中断, 连到这个总线上的设备可以选择某个中断(实现软件选择), 这就要看具体的硬件要求了。

根据你说的情况, 我认为有以下几个方面值得考虑
1)4号中断是否已经被占用。 linux可以让不同的设备共享一个中断, 它通过确定不同的设备来调用不同的中断例程, 软件实现是采用同一中断挂上不同的中断例程来完成的
2)硬件上你的设备的中断线是否和8259A的中断线相连

希望这些对你有所帮助~~~。
How fair and how pleasant art thou, O love, for delights!This thy stature is like to a palm tree, and thy breasts to clusters of grapes.I said, I will go up to the palm tree, I will take hold of the boughs thereof: now also thy breasts shall be as clusters of the vine, and the smell of thy nose like apples;And the roof of thy mouth like the best wine for my beloved, that goeth down sweetly, causing the lips of those that are asleep to speak.
modir
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2004-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-12 15:33
我要驱动的正是一个串口设备,我在dos下也写过类似的东西,而且运行良好。
神龙斗士
游客

返回顶部