系统环境如下:
1 | ./+o+- root@linux |
为什么要学习misc设备的编程?
因为,如果我们 每个驱动设备都要像最初那样子去写一个字符设备驱动一样,要分配主设备号,次设备号,实现对应的文件操作函数等等的步骤,未免就有点多了,而且也不好记住它,为此,Linux内核提供了一系列偷懒的技巧,那就是实现了misc设备,其实misc设备,也算是字符设备,只不过对字符设备进行了封装,看看下面的介绍就知道了。
打开内核/include/linux/miscdevice.h
找到misc设备的结构体:
1 | struct miscdevice { |
这里我只实现最简单的misc设备,只需要关注minor(次设备号),name(设备名称),fops(文件操作函数).
misc设备是对字符设备做了一个再次的封装,而且,在misc设备中,主设备号都是一样的,都是10,只有次设备号不同,当我们不知道内核中应该去分配那个此设备号时,可以直接给minor赋值为MISC_DYNAMIC_MINOR这个宏,意思就是由内核来帮我们分配次设备号。
name就不用说了,如果设备注册成功,在根文件系统/dev/下就会有注册设备后的name。
fops就是一系列的文件操作函数啦,什么open , read ,write , ioctl等等,很多,跟写字符设备是一样的
驱动实现源码代码如下:
1 | #include<linux/kernel.h> |
Makefile:
1 | TARGET ?= $(shell uname -r) |
编译程序,加载驱动,可以看到设备注册成功,主设备号:10,次设备号55
![misc](Linux驱动学习笔记-实现一个misc设备驱动/misc 01.png)