内核在此方-基于himawari-8卫星的沙尘监测

时间:2024-06-29 20:21:01
【文件属性】:

文件名称:内核在此方-基于himawari-8卫星的沙尘监测

文件大小:7.57MB

文件格式:PDF

更新时间:2024-06-29 20:21:01

嵌入式linux 周立功

2.8 混杂设备驱动编程 2.8.1 混杂设备和驱动 回想一下 2.6 内核字符驱动编程的基本过程: (1) 首先需要通过 alloc_chrdev_region()获得设备编号; (2) 然后需要通过 cdev_alloc()申请一个 cdev 结构; (3) 接着需要通过 cdev_init()对申请到的 cdev 进行初始化; (4) 最后才能将申请到的 cdev 通过 cdev_add()往系统添加。 这样编写驱动稍微显得有点繁琐,能否简化驱动编写的初始化过程呢?2.6 内核在此方 面作了很大努力,为驱动初始化提供了更加简便的方法。 2.6 内核的驱动按照各类设备的特性,在 cdev 基础上进行了进一步封装,增加了各类设 备的特性功能管理,抽象出了多子系统,如 input、usb、scsi、sound 和 framebuffer 等。基 于子系统编程,子系统能够完成与 sysfs 的交互,直接生成设备节点,简化了驱动编程。 混杂设备(misc decive),是一些无法按照特定子系统的特性进行抽象的一些设备,在 内核中用 miscdevice 来描述。所有的混杂设备被用同一个主设备号 MISC_MAJOR(10),每 个设备只能选择自己的次设备号。如果希望为某个设备单独分配主设备号,或者一个驱动想 驱动多个设备,那这份驱动就不能通过混杂设备驱动来实现。 描述 misc 设备的结构体 miscdevice 在中定义,如程序清单 2.26 所 示。 程序清单 2.26 miscdevice 结构 struct miscdevice { int minor; const char *name; const struct file_operations *fops; struct list_head list; struct device *parent; struct device *this_device; }; 从描述混杂设备的 miscdevice 结构也可以看到,不同混杂设备只有次设备号不同。编写 混杂设备驱动,通常只需实现次设备号 minor、设备名称 name 和操作方法 fops 的定义即可。 为混杂设备定义一个 miscdevice 结构并进行初始化后,就可以通过注册函数 misc_register()完成设备注册,misc_register()函数原型如下: int misc_register(struct miscdevice * misc); 混杂设备的注销函数如下: int misc_deregister(struct miscdevice *misc);


网友评论