免费注册 查看新帖 |

Chinaunix

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

请问一个基本的字符驱动程序SCULL的具体过程? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-29 21:45 |只看该作者 |倒序浏览
各位大侠:
LDD3书上的有些概念不太明白,比如说:
1.分配和释放设备编号(是不是分配主设备号?)
2.字符设备注册是什么意思?它和加载模块进内核有什么区别?感觉字符设备注册和从系统中移除设备与分配和释放设备编号很
像,很像,它们有什么区别啊?
3.书上有这么一句话:p59 内核内部使用struct cdev 结构表示字符设备。
p60 在scull内部,它通过struct scull_dev结构表示每个设备。
这里的2句话很不理解,同样的设备怎么有2个不同的结构体表示???
还请各位指点!

论坛徽章:
0
2 [报告]
发表于 2008-05-30 13:20 |只看该作者
虽然不能很清楚地回答你,但可能会有点帮助
1。可以这么说,设备编号是通过主、次设备号生成的,主设备号确定驱动程序,次设备号确定具体的设备节点。
2。字符设备注册我是这样理解的:就是在文件系统添加设备节点信息,而它的注册方式可以是直接编译到内核和以模块的方式添加到内核。
3。struct cdev 是描述的一个字符设备, 而struct scull_dev是用户自己要添加的设备,你会发现在struct scull_dev内部包含了stuct cdev结构说明用户要添加的就是一个字符设备,之所以这样定义是为了方便管理与用户所定义设备的管理,因为我们
可能会在设备结构中还要包含其他的信息,比如信号量等。这种结构类似于继承关系。

论坛徽章:
0
3 [报告]
发表于 2008-05-30 21:15 |只看该作者
谢谢楼上的回答!
今天又看了一遍,又有个问题:
1.scull设备驱动中的read,write 系统调用为什么一次只处理一个量子?

论坛徽章:
0
4 [报告]
发表于 2008-05-30 21:27 |只看该作者
2:在write代码中有这么一段代码:
if(!dptr->data)
{dptr->data=kmalloc(qset*sizeof(char *),GFP_KERNEL);
if(dptr->data)
goto out;
memset(dptr->data,0,qset*sizeof(char *));  //这句是什么意思???
}

论坛徽章:
0
5 [报告]
发表于 2008-05-31 13:06 |只看该作者
dptr->data清 零
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP