[国嵌攻略][118][混杂设备模型]
混杂设备概念
在linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链,对设备访问时内核根据次设备号查找到相应的混杂设备。
设备描述
Linux中使用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;
};
设备注册
Linux系统中使用misc_register函数来注册一个混杂设备驱动。
int misc_register(struct miscdevice (misc)
混杂设备驱动
1.初始化miscdevivce
1.1.minor
1.2.name
1.3.fops
2.注册miscdevice
2.1.misc_register
头文件
<linux/miscdevice.h>
struct miscdevice //混杂设备描述
misc_register() //混杂设备注册
misc_deregister() //混杂设备注销
keydev.c
/******************************************************************** *头文件 *********************************************************************/ #include <linux/init.h> #include <linux/module.h> #include <linux/miscdevice.h> /******************************************************************** *设备方法 *********************************************************************/ //打开设备 int key_open(struct inode *node, struct file *filp){ return 0; } //关闭设备 int key_close(struct inode *node, struct file *filp){ return 0; } //设备方法 struct file_operations key_fops = { .open = key_open, .release = key_close }; /******************************************************************** *模块安装 *********************************************************************/ struct miscdevice misdev = { .minor = 200, //次设备号 .name = "mykey", //设备名称 .fops = &key_fops //设备方法 }; //安装模块 static int led_init(){ //注册混杂设备 misc_register(&misdev); return 0; } //卸载模块 static void led_exit(){ //注销混杂设备 misc_deregister(&misdev); } /******************************************************************** *模块声明 *********************************************************************/ MODULE_LICENSE("GPL"); MODULE_AUTHOR("D"); MODULE_DESCRIPTION(""); MODULE_VERSION("v1.0"); module_init(key_init); module_exit(key_exit);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术