misc设备

一、步骤:

1.定义miscdevice结构体:

struct miscdevice misc;

2.初始化miscdevice结构体

misc.minor = MISC_DYNAMIC_MINOR;//动态分配
misc.name = "xxxx";   //设备名
misc.fops = &myfops;  //操作方法集(myfops要预先准备好)
struct file_operations myfops = {
    .owner = THIS_MODULE,
    .open = myopen,
    .release = myrelease,
    .read = myread,
    .write = mywrite,
} 

3.注册

/*
* 功能: 注册
* 输入参数: struct miscdevice
* 输出参数:
* 返回值: 成功:0    失败:负数
* 注意:这个注册函数会自动创建设备文件,不用我们管,misc设备的主设备号恒为10,它靠次设备号区分不同的misc
*/
int misc_register(struct miscdevice * misc)

4.释放

/*
* 功能: 注销
* 输入参数: struct miscdevice
* 输出参数:
* 返回值: none
* 注意:
*/
void misc_deregister(struct miscdevice *misc)

二、向上提供接口:

1.open:

/*
* 功能: 给运用层的接口---打开
* 输入参数: @struct inode  --inod节点
* 输入参数: @struct file   --file指针
* 输出参数:
* 返回值: 成功:0    失败:负数
* 注意:
*/
int myopen(struct inode *, struct file *) 
{
    //1.使用计数
    //2.识别子设备(将私有的设备结构体赋值给pfile->pravite_data)
    //3.必要的设备初始化
}

2.close:

/*
* 功能: 给运用层的接口---关闭
* 输入参数: @struct inode  --inod节点
* 输入参数: @struct file   --file指针
* 输出参数:
* 返回值: 成功:0    失败:负数
* 注意:
*/
int myrelease(struct inode *, struct file *)

3.read:

/*
* 功能: 给运用层的接口---读
* 输入参数: @struct file   --file指针
* 输入参数: @__user        --运用层传进来的bufer
* 输入参数: @size          --大小
* 输入参数: @loff_t        --偏移
* 输出参数:
* 返回值: 成功:实际能读到的字节数    失败:负数
* 注意:
*/
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *)

4.write:

/*
* 功能: 给运用层的接口---读
* 输入参数: @struct file   --file指针
* 输入参数: @__user        --运用层传进来的bufer
* 输入参数: @size          --大小
* 输入参数: @loff_t        --偏移
* 输出参数:
* 返回值: 成功:实际写入的字节数    失败:负数
* 注意:
*/
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxgui1992

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值