设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 服务器 > 系统 > 正文

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

发布时间:2021-11-22 13:54 所属栏目:52 来源:互联网
导读:混乱的 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) 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读