linux杂项设备介绍
2017-08-24 11:10
99 查看
杂项设备驱动的相关介绍:
1.标准的字符设备过于浪费主设备号 为linux自有255个
2.杂项设备是以标注字符设备驱动的一种包装
3.杂项设备的主设备为10,其中的区别是此设备号,自己设定
杂项设备驱动的大概步骤
1.创建一个模块程序架构
2.注册一个杂项设备文件 misc_register
3.填充 file_operations
注意由于:杂项设备文件是对字符设备文件的一种包装 因此不需要 cdev class
设备文件节点的相关操作
相关的结构体以及函数
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;
}; //如果设置为MISC_DYNAMIC_MINOR则表示系统自动分配未使用的minor
1.注册一个杂项设备文件
int misc_register(struct miscdevice * misc);
2.销毁一个杂项设备文件
int misc_deregister(struct miscdevice *misc);
杂项设备相关的实例代码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
MODULE_LICENSE("Dual BSD/GPL");
#define Driver_name "misc_led"
static ssize_t misc_driver_write(struct file *file,
const char __user *buf,size_t count, loff_t *ppos)
{
}
static long misc_driver_ioctl(struct file *file,
unsigned int cmd, unsigned long arg)
{
}
static int misc_driver_open(struct inode *inode,
struct file *file)
{
}
static int misc_driver_close(struct inode *inode,
struct file *file)
{
}
struct file_operations misc_fops =
{
.owner
= THIS_MODULE,
.llseek
= misc_driver_llseek,
.write
= misc_driver_write,
.unlocked_ioctl
= misc_driver_ioctl,
.open = misc_driver_open,
.release
= misc_driver_close,
}
struct miscdevice misc_driver ={
.minor = MISC_DYNAMIC_MINOR,
.fops = &misc_fops,
.name = Driver_name,
.nodename = Driver_name,
};
static int misc_driver_init(void)
{
misc_register(&misc_driver);
return 0;
}
static void misc_driver_exit(void)
{
misc_deregister(&misc_driver);
}
module_init(misc_driver_init);
module_exit(misc_driver_exit);
1.标准的字符设备过于浪费主设备号 为linux自有255个
2.杂项设备是以标注字符设备驱动的一种包装
3.杂项设备的主设备为10,其中的区别是此设备号,自己设定
杂项设备驱动的大概步骤
1.创建一个模块程序架构
2.注册一个杂项设备文件 misc_register
3.填充 file_operations
注意由于:杂项设备文件是对字符设备文件的一种包装 因此不需要 cdev class
设备文件节点的相关操作
相关的结构体以及函数
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;
}; //如果设置为MISC_DYNAMIC_MINOR则表示系统自动分配未使用的minor
1.注册一个杂项设备文件
int misc_register(struct miscdevice * misc);
2.销毁一个杂项设备文件
int misc_deregister(struct miscdevice *misc);
杂项设备相关的实例代码
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
MODULE_LICENSE("Dual BSD/GPL");
#define Driver_name "misc_led"
static ssize_t misc_driver_write(struct file *file,
const char __user *buf,size_t count, loff_t *ppos)
{
}
static long misc_driver_ioctl(struct file *file,
unsigned int cmd, unsigned long arg)
{
}
static int misc_driver_open(struct inode *inode,
struct file *file)
{
}
static int misc_driver_close(struct inode *inode,
struct file *file)
{
}
struct file_operations misc_fops =
{
.owner
= THIS_MODULE,
.llseek
= misc_driver_llseek,
.write
= misc_driver_write,
.unlocked_ioctl
= misc_driver_ioctl,
.open = misc_driver_open,
.release
= misc_driver_close,
}
struct miscdevice misc_driver ={
.minor = MISC_DYNAMIC_MINOR,
.fops = &misc_fops,
.name = Driver_name,
.nodename = Driver_name,
};
static int misc_driver_init(void)
{
misc_register(&misc_driver);
return 0;
}
static void misc_driver_exit(void)
{
misc_deregister(&misc_driver);
}
module_init(misc_driver_init);
module_exit(misc_driver_exit);
相关文章推荐
- 为什么linux驱动要专门有杂项设备呢?字符设备不就可以了吗?
- linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]
- linux 高级字符设备驱动 ioctl操作介绍 例程分析实现
- Linux字符设备驱动和杂项设备驱动对比
- Linux驱动(七)设备模型介绍以及platform设备驱动
- Linux设备驱动程序学习(0) -设备驱动介绍& Hello, world!模块
- Udev:介绍现代Linux系统的设备管理
- Udev:介绍现代Linux系统的设备管理
- Linux 杂项设备驱动开发
- linux 驱动设备模型介绍
- 学习笔记:Linux杂项设备驱动框架
- 基于Linux的USB设备的详细介绍
- Linux杂项设备驱动
- 嵌入式设备上的LINUX系统开发与嵌入式linux的入门学习介绍
- 详细介绍 Linux 2.6 设备的驱动模型
- Linux设备驱动Hello World程序介绍
- Linux设备驱动程序学习(0) -设备驱动介绍& Hello, world!模块
- linux驱动杂项设备类misc
- linux 高级字符设备驱动 ioctl操作介绍 例程分析实现
- Linux设备模型--总线、驱动、设备、设备类 (相关结构介绍)