[国嵌攻略][118][混杂设备模型]

本文介绍了Linux系统中混杂设备的概念及其实现方式。混杂设备是具有相同主设备号但不同次设备号的一组字符设备,通过struct miscdevice进行描述,并使用misc_register函数注册。文章还提供了一个具体的混杂设备驱动实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

混杂设备概念

在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);

 

转载于:https://www.cnblogs.com/d442130165/p/5253298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值