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结构体进行操作,初始化,匹配各个结构体中各个元素(其实也就是所谓的注册)。

1 0
原创粉丝点击