驱动框架

 

 

编写第一个驱动框架:

 

今天听了韦东山老师的课程,学到了一些驱动的知识,这里的内容是我对课程的一些总结,希望对学习驱动的同学有帮助。

0.现将头文件加进来

 

 

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <asm/arch/regs-gpio.h>
#include <asm/hardware.h>
  

 

1.先写open,write,read等函数

static int seconds_drv_open(struct inode *inode,struct file *file)
{
//printk("seconds_drv_open\n");
/* 配置gpf4,5,6引脚为输出 */
return 0;
}

static ssize_t seconds_drv_write(struct file *file,const char __user *buf,size_t count,loff_t *ppos)
{
//printk("seconds_drv_write\n");
return 0;
}

2.写file_operations结构,然后将上面的open,write函数填充到相应函数指针处

static struct file_operations seconds_drv_fops={
.owner = THIS_MODULE, 
.open = seconds_drv_open,
.write = seconds_drv_write,
};

3.在入口函数中注册驱动程序

static int seconds_drv_init(void)
{
auto_major = register_chrdev(0,"seconds_drv",&seconds_drv_fops); //当第一个参数为0时,表明让内核分配主设备号,

     //此时内核会将没有用到的主设备号分配给auto_major
secondsdrv_class = class_create(THIS_MODULE,"secondsdrv");         
secondsdrv_class_dev = class_device_create(secondsdrv_class,NULL,MKDEV(auto_major,0),NULL,"ABCD");

return 0;
}

4.在出口函数中卸载驱动

static void seconds_drv_exit(void)
{
unregister_chrdev(auto_major,"seconds_drv");
class_device_unregister(secondsdrv_class_dev);
class_destroy(secondsdrv_class);
}

5.修饰入口函数和出口函数

module_init(seconds_drv_init);
module_exit(seconds_drv_exit);
MODULE_LICENSE("GPL");

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值