- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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: 指
您可能关注的文档
最近下载
- 听电影学英文律政俏佳人台词.pdf VIP
- 2025政治理论时政热点知识试题库(附完整答案).docx VIP
- 2025茶艺师(技师)重点考试题库及答案(浓缩300题).docx VIP
- 1FC5同步发电机励磁系统解析.doc VIP
- 中考必考名著--《红岩》复习资料.pdf VIP
- 【高中数学竞赛专题大全】 竞赛专题15 初等数论(50题竞赛真题强化训练)原卷版.pdf VIP
- 变频器完整电路图(清晰版).pdf VIP
- 2025年一级造价工程师造价管理考点重点知识速记总结记忆笔记.pdf
- 湖北省直机关遴选公务员面试真题及解析.docx VIP
- 中国人工智能产业联盟中国信通院2024年度AI4SE行业现状调查报告33页.pdf VIP
文档评论(0)