博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动创建节点的字符杂项设备 misc_register
阅读量:4284 次
发布时间:2019-05-27

本文共 1467 字,大约阅读时间需要 4 分钟。

杂项设备

Linux里面的misc杂项设备是主设备号为10的驱动设备
定义头文件: <linux/miscdevice.h>
结构体:
struct miscdevice  {
int minor;
const char *name;
const struct file_operations *fops;
struct list_head list;
struct device *parent;
struct device *this_device;
const char *nodename;
mode_t mode;
};
minor 是misc设备的副设备号,misc设备主要依赖minor去区分
如果设置为MISC_DYNAMIC_MINOR则表示系统自动分配未使用的minor
nodename 是在/dev下面创建的设备驱动节点
fops 是驱动主体处理函数入口指针
注册和释放
注册
int misc_register(struct miscdevice * misc);
释放
int misc_deregister(struct miscdevice *misc);

misc_device 是特殊的字符设备。注册驱动程序时采用misc_register函数注册,此函数中会自动创建设备节点,即设备文件。无需mknod指令创建设备文件。 因为misc_register()会调用class_device_create()或者device_create()。

*********************************************************************************************

#include <linux/module.h>

#include <linux/fs.h>

#include <miscdevice.h>

#include <linux/init.h>

#define MISC_NAME "miscdriver"

static int misc_open(struct inode *inode, struct file *file)

{
 printk("misc open\n");
 return 0;
}

static const struct file_operations misc_fops =

{
    .owner   =   THIS_MODULE,
    .open    =   misc_open,
};

static struct miscdevice misc_dev =

{
 .minor = MISC_DYNAMIC_MINOR,
 .name = MISC_NAME,
 .fops = &misc_fops,
};

static int __init misc_init(void)

{
 int ret;
 ret = misc_register(&misc_dev);
 if (ret)
 {
  printk("misc_register error\n");
  return ret;
 }
 
 return 0;
}

static void __exit misc_exit(void)

{
  misc_deregister(&misc_dev);
}

module_init(misc_init);

module_exit(misc_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("XXX");

转载地址:http://yingi.baihongyu.com/

你可能感兴趣的文章
HUB 與 Switch 差別
查看>>
linux產生 core dump文件方法及設置
查看>>
How to pass macro definition from “makefile” command line arguments to C source code?
查看>>
英文句型
查看>>
mtd and /dev/mtd*相關資料
查看>>
cp: cannot create symbolic link to fat format of usb: Operation not permitted
查看>>
MTD bad Block issue
查看>>
How to change network interface name
查看>>
ubifs and ubi and mtd
查看>>
shell script set 用法
查看>>
英文序數寫法與唸法 Ordinal Numbers(轉載)
查看>>
DVB-S info
查看>>
绿盟扫描操作指导
查看>>
理解链路本地址与站点本地地址
查看>>
/proc/mtd 各个参数含义 -- linux内核
查看>>
linux nand flash常用命令
查看>>
NESSUS扫描操作指导
查看>>
C语言读取文件大小,载入文件全部内容
查看>>
C语言 static静态变量的作用
查看>>
Linux(C/C++)下的文件操作open、fopen与freopen
查看>>