您的位置:首页 > 其它

自动创建节点的字符杂项设备 misc_register

2017-02-16 17:33 363 查看
杂项设备

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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: