第二章字符设备驱动程序教程.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
上章回顾 Linux设备驱动的简介,以及分类 字符设备 块设备 网络接口 模块的应用 如何编写模块 模块相关的宏 模块和应用程序的区别 编译和装载内核模块 字符设备驱动程序 第2章 预习检查 本章目标 掌握字符设备驱动程序的基本结构和开发方法 掌握用户空间调用设备驱动程序的方法 本章结构 字符设备驱动基本结构 字符设备驱动程序 用户空间调用设备驱动程序 添加驱动程序到内核 内核配置和编译方法 添加驱动程序到内核中 主要概念和结构体 实例 字符驱动的主要组成 2-1 字符设备驱动程序基本结构 字符设备开发的基本步骤 确定主设备号和次设备号 实现字符驱动程序 实现file_operations结构体 实现初始化函数,注册字符设备 实现销毁函数,释放字符设备 创建设备文件节点 2-1 字符设备驱动程序基本结构 什么是主设备号/次设备号 主设备号是内核识别一个设备的标识。 整数(占12bits),范围从0到4095,通常使用1到255 次设备号由内核使用,用于正确确定设备文件所指的设备。 整数(占20bits),范围从0到1048575,一般使用0到255 2-1 字符设备驱动程序基本结构 设备编号的内部表达 dev_t类型(32位): 用来保存设备编号(包括主设备号(12位)和次设备号(20位)) 从dev_t获得主设备号和次设备号: MAJOR(dev_t); MINOR(dev_t); 将主设备号和次设备号转换成dev_t类型: MKDEV(int major,int minor); 2-1 字符设备驱动程序基本结构 分配主设备号 手工分配主设备号:找一个内核没有使用的主设备号来使用。 #include linux/fs.h int register_chrdev_region( dev_t first, unsigned int count, char *name ); 要分配的设备编号范围的起始值,次设备号经常为0 所请求的连续设备编号的个数 和该编号范围关联的设备名称 2-1 字符设备驱动程序基本结构 动态分配主设备号: #include linux/fs.h int alloc_chrdev_resion(dev_t *dev,unsigned int firstminor, unsigned int count,char *name); 输出的设备号 要使用的被请求的第一个次设备号 2-1 字符设备驱动程序基本结构 释放设备号 void unregister_chrdev_region(dev_t first, unsigned int count); 通常在模块的清除函数中调用。 2-1 字符设备驱动程序基本结构 实现字符驱动程序 cdev 结构体 struct cdev { struct kobject kobj; /* 内嵌的kobject 对象 */ struct module *owner; /*所属模块*/ struct file_operations *ops; /*文件操作结构体*/ struct list_head list; dev_t dev; /*设备号*/ unsigned int count; }; 2-1 字符设备驱动程序基本结构 操作cdev的函数 void cdev_init( struct cdev *, struc t file_operations *); struct cdev *cdev_alloc(void) ; int cdev_add(st ruct cdev *, dev_t, unsigned) ; void cdev_del(struct cdev *); 用于初始化cdev的成员,并建立cdev和file_operations之间的连接 分别向系统删除一个cdev,完成字符设备的注销,通常在模块的卸载函数中调用 分别向系统添加一个cdev,完成字符设备的注册,通常在模块加载函数中调用 函数用于动态申请一个cdev 内存 2-1 字符设备驱动程序基本结构 file_operations 结构体 字符驱动和内核的接口: 在include/linux/fs.h定义 字符驱动只要实现一个file_operations结构体 并注册到内核中,内核就有了操作此设备的能力。 2-1 字符设备驱动程序基本结构 file_operations的主要成员: struct module *owner: 指

文档评论(0)

金不换 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档