Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67947
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 213
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-24 12:38
个人简介

专注的力量很大,它能把一个人的潜力发挥到极致,一旦达到那种状态你就没有了自我的概念,所有的精力集中到了一点。

文章分类
文章存档

2015年(11)

2014年(6)

我的朋友

分类: 嵌入式

2015-01-06 11:22:41

前面有说到过字符设备和块设备,这里写写混杂字符设备。
在我们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) |
给主人留下些什么吧!~~