前面有说到过字符设备和块设备,这里写写混杂字符设备。
在我们Linux内核中,有一类特殊的字符设备,就是混杂字符设备(英文名:misc)。
下面说说他的一些特点:
1.内核使用miscdevice数据结构来描述这个设备。
2.所有混杂字符设备都共享一个主设备号,那就是10。
3.既然主设备号都共享,我们就必须得用次设备号来区分设备个体。
混杂字符设备使用起来比普通的字符设备要方便的很多。
下面看下miscdevice数据结构:
头文件:#include
struct miscdevice
{
int minor; //次设备号
const char *name; //设备名称
const struct file_operations *fops;//设备操作集合
struct list_head list; //混杂字符设备数据链节点
struct device *parent; //可能存在父设备指针
struct device *this_device; //设备的device结构体指针
};
这里我们课上主要讲了前三个...
minor:次设备号,区分各个混杂设备,如果要让内核帮你分配一个此设备可以用MISC_DYNAMIC_MINOR这个宏。
name:设备文件名,混杂设备文件名内核会帮你创建。
fops:给混杂设备提供的硬件访问的方法,并且将这些方法提供用户使用,访问接口。
重点来了,如何实现混杂设备的使用:
分配初始化一个混杂字符设备对象:
struct file_operations led_fops = {
...
};
struct miscdevice led_misc= {
.minor = MISC_DYNAMIC_MINOR, (让内核帮我分配)
.name = "myled",
.fops = &led_fops
};
注册字符混杂设备:misc_register (&led_misc);
卸载字符混杂设备:misc_deregister (&led_misc);
这样看下来,绝对要比普通的字符设备使用方法简单很多。强烈推荐!
无需
mknod
指令创建设备文件。
因为
misc_register()
会调用
class_device_create()
或者
device_create()
。
阅读(1457) | 评论(0) | 转发(0) |