字符设备驱动简化框架和misc杂项设备
程序员文章站
2022-07-14 10:01:34
...
一、字符设备驱动简化框架
1.分配设备号
2.分配cdev结构体
3.初始化cdev结构体
4.添加cdev到内核
int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)
功能:注册字符设备
参数:
@major 主设备号
@name 名字
@fops 操作方法集结构体指针
返回值:如果主设备号等于0,动态分配设备号,成功返回主设备号;
如果主设备号大于0,注册设备号,成功返回0;
失败返回负数错误码
void unregister_chrdev(unsigned int major, const char *name)
功能:注销字符设备
二、misc杂项设备
头文件: <linux/miscdevice.h>
linux系统中有些字符设备不能进程更加明确的划分,就将这些设备统一归类到杂项设备中,所有这些设备都统一采用主设备号为10,次设备动态分配的方式注册到内核。
杂项设备内部就是封装了字符设备的一系列数据结构和操作接口,其本质还是字符设备类型
misc杂项设备结构体:
struct miscdevice {
int minor; //次设备号,可以自己指定注册;MISC_DYNAMIC_MINOR 动态分配
const char *name; //名字,misc杂项设备注册的时候,创建设备文件使用
const struct file_operations *fops; //操作方法集
};
杂项设备注册函数:
int misc_register(struct miscdevice * misc);
参数:
@misc misc杂项设备结构体指针
返回值:成功返回0,失败返回负数错误码
杂项设备注销函数:
int misc_deregister(struct miscdevice *misc);
参数:
@misc misc杂项设备结构体指针
返回值:成功返回0,失败返回负数错误码
unsigned iminor(const struct inode *inode)
功能:从inode结构体指针中获取次设备号