驱动框架
来源:互联网 发布:物业网络拓扑图 编辑:程序博客网 时间:2024/06/06 12:43
今天听了韦东山老师的课程,学到了一些驱动的知识,这里的内容是我对课程的一些总结,希望对学习驱动的同学有帮助。
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");
- 驱动框架
- 驱动框架
- 驱动框架
- 驱动框架
- 驱动框架
- i2c驱动--驱动框架
- 驱动框架,驱动模型
- javascript事件驱动框架
- 2.6 内核驱动框架
- Linux 设备驱动框架
- Linux驱动框架
- V4L2驱动框架
- 关键字驱动测试框架
- linux驱动框架
- V4L2驱动框架
- ata驱动框架
- USB硬盘驱动框架
- V4L2驱动框架
- Redux原理(一):Store实现分析
- T20天正结构软件v4.0官方版下载附安装教程
- mybatis系列四:动态SQL
- getfloat的代码
- TF-IDF与余弦相似性的应用(三):自动摘要
- 驱动框架
- java基础复习七:数组的声明与扩容
- java中类测试总结
- String hashCode() 设计的道理
- Centos7防火墙
- 对webmagic的一个example进行Debug——框架执行流程
- java IO学习
- spring对dao层的支持(datasource的作用)
- Linux操作系统与实训教程(习题2)