linux之misc及使用misc创建字符设备
时间: 2024-03-11 12:51:33 浏览: 148
Linux 中的 misc 是一种杂项设备类型,它可以用来创建一些没有特定驱动程序的设备文件,例如 /dev/null 和 /dev/random。
要创建一个 misc 设备,可以使用 misc_register() 函数,该函数需要一个 miscdevice 结构体作为参数,其中包含设备的名称、设备号等信息。然后,可以使用 misc_deregister() 函数来注销设备。
下面是一个简单的示例程序,用于创建一个名为 mymisc 的 misc 设备:
```c
#include <linux/module.h>
#include <linux/miscdevice.h>
static int mymisc_open(struct inode *inode, struct file *file)
{
printk(KERN_INFO "mymisc: device opened\n");
return 0;
}
static int mymisc_release(struct inode *inode, struct file *file)
{
printk(KERN_INFO "mymisc: device closed\n");
return 0;
}
static const struct file_operations mymisc_fops = {
.owner = THIS_MODULE,
.open = mymisc_open,
.release = mymisc_release,
};
static struct miscdevice mymisc_device = {
.minor = MISC_DYNAMIC_MINOR,
.name = "mymisc",
.fops = &mymisc_fops,
};
static int __init mymisc_init(void)
{
int ret;
ret = misc_register(&mymisc_device);
if (ret) {
printk(KERN_ERR "mymisc: unable to register device\n");
return ret;
}
printk(KERN_INFO "mymisc: device registered\n");
return 0;
}
static void __exit mymisc_exit(void)
{
misc_deregister(&mymisc_device);
printk(KERN_INFO "mymisc: device unregistered\n");
}
module_init(mymisc_init);
module_exit(mymisc_exit);
MODULE_LICENSE("GPL");
```
编译并安装模块后,可以使用以下命令来查看设备文件:
```
$ ls -l /dev/mymisc
crw------- 1 root root 10, 58 May 22 15:08 /dev/mymisc
```
可以使用 cat 命令来测试设备:
```
$ cat /dev/mymisc
mymisc: device opened
mymisc: device closed
```
这里的输出是由 mymisc_open() 和 mymisc_release() 函数生成的。