字符设备驱动注册方式有哪些类型

传统方式

在传统方式下,驱动注册分为三个步骤: 驱动初始化、设备初始化、驱动向内核注册设备。

首先,驱动程序需要注册到内核中。这可以通过在驱动程序中使用request_module()或者insmod/modprobe来进行自动加载的方式,也可以在内核中注册一个字符设备。

其次,我们需要为设备分配以下最基本的信息:设备类型、主设备号和设备的名称。其中,设备类型对应的是字符设备,主设备号对应的是设备类型的标识,设备名称可以通过在/dev目录下创建设备节点的方式来实现。

最后,我们需要将驱动和所创建的设备实例相连接,这可以通过这些函数实现:
register_chrdev()
cdev_init()
cdev_add()

新式驱动注册方式

新式驱动注册方式下使用的数据结构是struct class和struct device。这种注册方式使用内核对象的方式创建设备,并将它们连接到相应的驱动程序中。它的具体实现如下:

首先,通过class_create()函数创建一个class对象,用于代表所创建设备的类。这个class对象会自动连接到内核,因此驱动只需要填写在类中所包含的设备的一些通用的属性信息。

其次,调用device_create()函数创建一个设备。第二个参数是必需的,它通过指向已经创建的class对象的指针来指示这个设备实例所属的类是哪一个。这个函数会创建一个设备实例,并把它连接到设备对象和驱动对象所表示的设备文件上。

最后,驱动程序需要为设备实例编写相应的sysfs属性和属性操作函数。

Devtmpfs自动设备节点创建法

由于之前的两种注册方式在设备文件的管理上存在一些问题,新的Linux内核提供了一种完全自动化的方式。Devtmpfs是由udev守护进程创建的虚拟文件系统,用于自动创建设备实例,并在系统启动过程中自动链接所有设备实例到内核。

使用其中一种注册方式时,驱动程序不需要创建设备文件或节点,只需要获取设备编号,并通过对应的驱动程序来管理这些设备即可。这样,它就可以免去繁琐的创建、注册和卸载设备节点的工作。

不同的注册方式有各自的优点和限制。 在选择使用注册技术时,开发人员应当考虑到他们的具体需求和代码的可维护性。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/arm-ufye.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年5月1日 下午3:42
下一篇 2023年5月1日 下午3:42

猜你喜欢