免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1795 | 回复: 5
打印 上一主题 下一主题

字符设备驱动的 问題 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-13 16:27 |只看该作者 |倒序浏览
我 成功创建了字符设备, 写了 一个 用戶程序去打开它 ,  反回到是没错 ,但是底下driver的 open中 的打印信息 却没有,


似乎设备文件没真正被打开 ,


这样現象 的 原因会 是 什们呢 ?



主要 的代码


494         cdev_init(tcd->cdev,&tw_fops);  --------> (1)                                                                                                                          
495         //tcd->cdev->ops = &tw_fops;                                                                                                                              
496         tcd->cdev->owner = tcd->tcd_fops->owner;                                                                                                                  
497         ret = cdev_add(tcd->cdev,MKDEV(TW_CHIP_MAJOR,minor),1);                                                                                                   
498         if(ret < 0){                                                                                                                                             
499                 flag = 1;                                                                                                                                         
500                 printk("cdev_add failed!\n");                                                                                                                     
501                 goto cleanup;                                                                                                                                    
502         }   
........
               tcd->minor = minor;                                                                                                                                       
509                                                                                                                                                                  
510         //tcd->dev.class = &twell_class;                                                                                                                          
511         tcd->dev.parent = NULL;                                                                                                                                   
512         tcd->dev.kobj.parent = NULL;//kobj;                                                                                                                       
513         tcd->dev.devt =  MKDEV(TW_CHIP_MAJOR,minor);                                                                                                              
514         snprintf(tcd->dev.bus_id,sizeof(tcd->dev.bus_id),"%scontrol%02d",tcd->name,minor);                                                                        
515         ret = device_register(&tcd->dev);                                                                                                                        
516         if(ret < 0){                                                                                                                                             
517                 printk("device register failed!\n");                                                                                                              
518                 goto cleanup;                                                                                                                                    
519         }                                      


而 cdev的fop tw_fops的 定义如下
293 struct file_operations tw_fops = {
294         .owner = THIS_MODULE,
295         .open = twc_open,
296         .release = twc_release,
297         .read = twc_read,
298         .write = twc_write,
299         .ioctl = twc_ioctl,
300 };


打印信息就 在  twc_open函数中 , 但就是 始终没 看到.

论坛徽章:
0
2 [报告]
发表于 2010-04-13 17:48 |只看该作者
在线等 啊  , 很急

我 的 tcd 结构体 是 这样 的

struct tw_tcd
{
......
struct device    dev;
struct cdev      cdev;
struct tcd_file_operations  tcd_fops;
......
}

论坛徽章:
0
3 [报告]
发表于 2010-04-13 18:06 |只看该作者
dmesg看下,应该是message没有写到屏幕吧。

论坛徽章:
0
4 [报告]
发表于 2010-04-13 18:55 |只看该作者
可以分成2层来调试~
1.看看在mknod的时候有没有将节点的file_operations和cdev中的进行挂接~
2.open是否真正调用了 在open中加printk(KERN_INFO "hello \n"); 使用dmesg查看~

论坛徽章:
0
5 [报告]
发表于 2010-04-13 18:56 |只看该作者
应该不会把!
我是 tail - 50 /var/log/messages 去 看 的 ,

论坛徽章:
0
6 [报告]
发表于 2010-04-14 18:55 |只看该作者
/var/log/message不清楚~
内核信息的话一般是用dmsg来看~
dmesg也是用的/proc/kmsg中的内容

cat /proc/kmsg就可以了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP