第3章字符设备驱动程序ppt课件.ppt

第3章字符设备驱动程序ppt课件.ppt

ID:59492955

大小:1.48 MB

页数:68页

时间:2020-09-13

第3章字符设备驱动程序ppt课件.ppt_第1页
第3章字符设备驱动程序ppt课件.ppt_第2页
第3章字符设备驱动程序ppt课件.ppt_第3页
第3章字符设备驱动程序ppt课件.ppt_第4页
第3章字符设备驱动程序ppt课件.ppt_第5页
资源描述:

《第3章字符设备驱动程序ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1324第3章字符设备驱动程序scull的设计主设备号与次设备号一些重要的数据结构字符设备的注册open和releasescull的内存使用read和write567scull的设计scull0~scull3由全局且持久的内存区组成,可被多次打开,关闭后再打开,仍能保持原数据scullpipe0toscullpipe3FIFO(先进先出)设备,类似管道,可由一个进程读,另一个进程写Scullsingle、scullpriv、sculluid、scullwuid与scull0类似,但在open操作方面有些限制1324第3章字符设备驱动程序scull的设计主设备号

2、与次设备号一些重要的数据结构字符设备的注册open和releasescull的内存使用read和write567主设备号与次设备号$ls–l/devcrw-rw-rw-1rootroot1,3Apr112002nullcrw-------1rootroot10,1Apr112002psauxcrw-------1rootroot4,1Oct2803:04tty1crw-rw-rw-1roottty4,64Apr112002ttys0crw-rw----1rootuucp4,65Apr112002ttyS1crw--w----1vcsatty7,1Apr1120

3、02vcs1crw--w----1vcsatty7,129Apr112002vcsa1crw-rw-rw-1rootroot1,5Apr112002zero主设备号通常用于标识设备对应的驱动程序,号相同的设备共用一个驱动程序;次设备号用于标识驱动程序所服务的具体设备主设备号次设备号主设备号与次设备号设备编号的内部表达内核中,设备编号数据类型为dev_t,定义在中操作设备编号的宏MAJOR(dev_tdev);由dev_t数得到主设备号MINOR(dev_tdev);由dev_t数得到次设备号MKDEV(intmajor,intmi

4、nor);由主、次设备号得到dev_t数主设备号次设备号12位20位dev_t主设备号与次设备号静态分配设备编号intregister_chrdev_region(dev_tfirst,unsignedintcount,char*name);first:主设备号范围起始值,次设备号通常为0count:连续设备号的个数name:设备编号范围关联的设备名称,将出现在/proc/devices和/sysfs中成功返回0,失败返回负数静态分配需要预先知道可使用的设备号,如何知道?内核源代码树的Documenttation/devices.text可查到尚有哪些号可用主

5、设备号与次设备号动态分配设备编号intalloc_chrdev_region(dev_t*dev,unsignedintfirstminor,unsignedintcount,char*name);dev:调用成功后保存分配到的设备编号范围的第一个数firstminor:第一个次设备号,通常用是0count与name与静态分配时相同释放设备编号voidunregister_chrdev_region(dev_tfirst,unsignedintcount);主设备号与次设备号scull设备号分配if(scull_major){dev=MKDEV(scull_m

6、ajor,scull_minor);result=register_chrdev_region(dev,scull_nr_devs,"scull");}else{result=alloc_chrdev_region(&dev,scull_minor,scull_nr_devs,"scull");scull_major=MAJOR(dev);}if(result<0){printk(KERN_WARNING"scull:can'tgetmajor%d",scull_major);returnresult;}scull_major为全局变量,初始化值为SCUL

7、L_MAJOR,定义在scull.h中,设为0时为动态分配(默认),否则为静态分配。主设备号与次设备号scull_load静态分配的问题是:若驱动程序仅自己使用,选择一个未用的号来用没什么问题,但若驱动程序被广泛使用,则可能造成冲突动态分配的问题是:由于分配的主设备号不能始终一至,所以无法预先创建设备节点一旦分配了设备号,就可从/proc/devices中读到,因此可写一脚本代替insmod,在载入模块后读出设备号并创建节点。即用一脚本完成加载模块、读出主设备号及创建设备节点等操作。scull设备的这一脚本叫scull_load主设备号与次设备号/proc/d

8、evices文件如下:Characte

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。