加入收藏 | 设为首页 | 会员中心 | 我要投稿 91站长网 (https://www.91zhanzhang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

Linux驱动实践 你知道字符装备驱动程序的两种写法吗?

发布时间:2021-11-22 14:17:12 所属栏目:系统 来源:互联网
导读:混乱的 API 函数 我在刚开始接触Linux驱动的时候,非常的困扰:注册一个字符设备,怎么有这么多的 API 函数啊? 参考的每一篇文章中,使用的函数都不一样,但是执行结果都是符合预期的! 比如下面这几个: register_chrdev(...); register_chrdev_regin(...); c
混乱的 API 函数
我在刚开始接触Linux驱动的时候,非常的困扰:注册一个字符设备,怎么有这么多的 API 函数啊?
 
参考的每一篇文章中,使用的函数都不一样,但是执行结果都是符合预期的!
 
比如下面这几个:
 
register_chrdev(...);
 
register_chrdev_regin(...);
 
cdev_add(...);
它们的功能都是向系统注册字符设备,但是只从函数名上看,初学者谁能分得清它们的区别?!
 
这也难怪,Linux系统经过这么多年的发展,代码更新是很正常的事情。
 
但是,我们参考的文章就没法做到:很详细的把文章中所描述内容的背景介绍清楚,往往都是文章作者在自己的实际工作环境中,测试某种方法解决了自己的问题,于是就记录成文。
 
不同的文章、不同的工作上下文、不同的API函数调用,这往往就苦了我们初学者,特别是我这种有选择障碍症的人!
 
其实,上面这个几个函数都是正确的,它们的功能都是类似的,它们是 Linux 系统中不同阶段的产物。
 
旧的 API 函数
在Linux内核代码2.4版本和早期的2.6版本中,注册、卸载字符设备驱动程序的经典方式是:
 
注册设备:
 
int register_chrdev(unsigned int major,const char *name,struct file_operations *fops);
参数1 major:如果为0 - 由操作系统动态分配一个主设备号给这个设备;如果非0 - 驱动程序向系统申请,使用这个主设备号;
 
参数2 name:设备名称;
 
参数3 fops:file_operations 类型的指针变量,用于操作设备;
 
如果是动态分配,那么这个函数的返回值就是:操作系统动态分配给这个设备的主设备号。
 
这个动态分配的设备号,我们要把它记住,因为在其他的API函数中需要使用它。
 
卸载设备:
 
int unregister_chrdev(unsigned int major,const char *name) 

(编辑:91站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读