【Linux】【驱动】杂项设备驱动
- Linux三大设备驱动
- 1. 我们这节课要讲的杂项设备驱动是属于我们这三大设备驱动里面的哪个呢?
- 2.杂项设备除了比字符设备代码简单,还有别的区别吗?
- 3.主设备号和次设备号是什么?
- 挂载驱动
杂项设备驱动是字符设备驱动的一种,他相对完整的字符驱动来说信息会稍微减少一点
Linux三大设备驱动
字符设备:IO 的传输过程是以字符为单位的,没有缓冲。比如2C,SPI 都是字符设备
块设备:I0 的传输过程是以块为单位的。根存储相关的,都属于块设备,比如,tf 卡
网络设备: 与前俩个不一样,是以 socket 套接字来访问的。
1. 我们这节课要讲的杂项设备驱动是属于我们这三大设备驱动里面的哪个呢?
杂项设备是字符设备的一种。可以自动生成设备节点
我们的系统里面有很多杂项设备。我们可以输入 cat /pro/misc 命令来查看
2.杂项设备除了比字符设备代码简单,还有别的区别吗?
杂项设备的主设备号是相同的,均为 10,次设备号是不同的。主设设备号相同就可以节省内核的资源
3.主设备号和次设备号是什么?
设备号包含主设备号和次设备号,主设备号在 Linux 系统里面是唯一的,次设备号不一定唯一
设备号是计算机识别设备的一种方式,主设备相同的就被视为同一类设备
主设备号可以比做成电话号码的区号。比如北京的区号是 010次设备号可以比作成电话号码。
主设备号可以通过命令 cat /proc/devices 来查看。
下面是代码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
struct file_operations misc_fops = {
.owner = THIS_MODULE
};
struct miscdevice misc_dev =
{
.minor = MISC_DYNAMIC_MINOR,
.name = "hello_misc",
.fops = &misc_fops
};
//drivers for init
static int misc_init(void)
{
int ret = 0;
ret = misc_register(&misc_dev);
if(ret<0)
{
printk("misc_register is failed\n");
return -1;
}
printk("misc registe is succeed \n");
return 0;
}
//drivers for exit
static void misc_exit(void)
{
//
misc_deregister(&misc_dev);
printk("misc exit \n");
}
module_init(misc_init);
module_exit(misc_exit);
MODULE_LICENSE("GPL");
挂载驱动
ret = misc_register(&misc_dev);//挂载驱动
misc_deregister(&misc_dev);//移除驱动