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