Linux简单驱动框架
来源:互联网 发布:学java可以找什么工作 编辑:程序博客网 时间:2024/06/05 19:00
1、驱动理解
Linux下的驱动,主要是符合Linux驱动的框架,满足Linux函数要求。通过对驱动的学习,简单字符驱动整体框架如下:
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>
struct cdev cdev1; //描述一个字符设备,属于Linux内部定义结构
dev_t devno; //设备号
static ssize_t mem_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos)
{
printk("mem_write\r\n");
return 0;
}
static ssize_t mem_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos)
{
printk("mem_read\r\n");
return 0;
}
int mem_open(struct inode *inode, struct file *filp)
{
printk("mem_open\r\n");
return 0;
}
int mem_release(struct inode *inode, struct file *filp)
{
printk("mem_release\r\n");
return 0;
}
static const struct file_operations mem_fops =
{ owner : THIS_MODULE,
write : mem_write,
read : mem_read,
open : mem_open,
release : mem_release,
};
static int driver_init(void)
{
int result;
//动态生存设备号,
result = alloc_chrdev_region(&devno, 0, 2, "dev0");
if (result < 0)
return result;
/*************初始化cdev结构体*****************/
//初始化cdev成员,并建立cdev与file_operation之间的连接
cdev_init(&cdev1, &mem_fops);
cdev1.ops = &mem_fops;
cdev1.owner = THIS_MODULE;
//注册字符设备
//还可以使用register_chrdev函数进行注册
cdev_add(&cdev1, devno, 1);
printk("driver_init\r\n");
return 0;
}
static void driver_exit(void)
{
printk("driver_exit\r\n");
unregister_chrdev_region(devno, 2); /*释放设备号*/
}
module_init(driver_init);
module_exit(driver_exit);
MODULE_AUTHOR("RK");
MODULE_LICENSE("GPL");
2、注意事项
static ssize_t mem_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos)
static ssize_t mem_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos)
write、read等函数类型都是不一样的
其实Linux驱动就是对 struct cdev结构体进行操作,初始化,匹配各个结构体中各个元素(其实也就是所谓的注册)。
- Linux简单驱动框架
- 嵌入式linux下,简单的misc设备驱动框架
- Linux 设备驱动框架
- Linux驱动框架
- linux驱动框架
- Linux 设备驱动框架
- Linux设备驱动框架
- Linux 设备驱动框架
- Linux驱动框架----hwmon
- Linux驱动框架----hwmon
- Linux 设备驱动框架
- Linux 设备驱动框架
- linux clk驱动框架
- Linux驱动框架解析
- Linux网络驱动框架
- linux clk驱动框架
- SCSI miniport 驱动简单框架
- PCI驱动框架简单分析
- 【JavaScript】学后总结
- Lipshitz Sequence Codeforces Round #333 (Div. 1) B(单调栈)
- 第14周项目5 二叉树排序树中查找的路径
- Jquery库和自己编写的base.js之间的冲突
- 【置换+DP】BZOJ1025
- Linux简单驱动框架
- 多媒体名词介绍
- android sdk content loader 0%不动
- 为ListView添加分段标头
- Android:fragment书上例子详细介绍
- Java EE HTML5 WebSocket 示例
- 第16周项目2-大数据集上排序算法性能的体验
- 反射
- win8 64位 下 安装Openfire