混杂设备(miscdevice)

一、什么是混杂设备

混杂设备也叫杂项设备,是普通字符设备驱动(struct cdev)的一个封装,可以简化一个普通字符设备驱动的设计流程。

混杂设备的特点:
1)主设备号10,次设备号不同。
2)简化cdev的设计流程
3)使用上和cdev是没有差异。

二、查看一下系统中的混杂设备

[root@GEC6818 /]#cat /proc/devices
Character devices:
  1 mem
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  5 ttyprintk
 10 misc    ----->混杂设备


[root@GEC6818 /]#cat /proc/misc 
 42 network_throughput
 43 memory_throughput
 44 network_latency
 45 cpu_dma_latency
 46 xt_qtaguid
 47 alarm
 48 log_system
 49 log_radio
 50 log_events
 51 log_main
 52 ashmem
 53 binder
 54 uhid
236 device-mapper
 55 hdmi-cec
 56 nxp-scaler
223 uinput
 57 keychord
  1 psaux
 58 usb_accessory
 59 mtp_usb
 60 android_adb
200 tun
 61 tgt
237 loop-control
 62 sw_sync
229 fuse
235 autofs
 63 ion



[root@GEC6818 /]#ls /dev/ -l
crw-rw----    1 root     root       10,  63 Jan  1  1970 ion
crw-rw----    1 root     root       10,  50 Jan  1  1970 log_events
crw-rw----    1 root     root       10,  51 Jan  1  1970 log_main
crw-rw----    1 root     root       10,  49 Jan  1  1970 log_radio
crw-rw----    1 root     root       10,  48 Jan  1  1970 log_system
crw-rw----    1 root     root       10, 237 Jan  1  1970 loop-control

三、混杂设备的设计过程

1. 普通字符设备驱动的设计流程

-------定义并初始化一个字符设备---------

1)定义一个字符设备—>struct cdev
2)定义并初始化字符设备的文件操作集—>struct file_operations
3)给字符设备申请一个设备号—>设备号=主设备号<<20 + 次设备号
4)初始化字符设备
5)将字符设备加入内核

-------自动生成设备文件---------

6)创建class
7)创建device,其中device是属于class的

-------得到物理地址对应的虚拟地址-------

8)申请物理内存区,申请SFR的地址区。SFR — Special Function Register: GPIOEOUT
9)内存的动态映射,得到物理地址对应的虚拟地址
10)访问虚拟地址

2. 混杂设备驱动的设计流程

1)定义文件操作集
2)定义一个混杂设备,并完成混杂设备的初始化
3)注册一个混杂设备

4)申请物理内存区,申请SFR的地址区。SFR — Special Function Register: GPIOEOUT
5)内存的动态映射,得到物理地址对应的虚拟地址
6)访问虚拟地址

三、混杂设备的设计模型

#include <linux/miscdevice.h>

1. 混杂设备

struct miscdevice ---->描述一个混杂设备

struct miscdevice  {
	int minor;
	const char *name;
	const struct file_operations *fops;
	struct list_head list;
	struct device *parent;
	struct device *this_device;
	const char *nodename;
	umode_t mode;
};

成员说明:
int minor; —>次设备号
const char *name; ---->混杂设备的名字,也是设备文件的名字。
const struct file_operations *fops; —>文件操作集

2. 混杂设备的注册

int misc_register(struct miscdevice * misc);

3. 混杂设备的注销

int misc_deregister(struct miscdevice *misc);

四、源码

例程源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值