本实验基于Tiny6410开发板上的模块
代码如下:代码声明是参考友善之臂论坛里面的,注释是自己添加的。
#include <linux/module.h> //最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了
#include <linux/fs.h> //包含了文件操作相关struct的定义,例如大名鼎鼎的struct file_operations
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/cdev.h> //对字符设备结构cdev以及一系列的操作函数的定义。//包含了cdev 结构及相关函数的定义。
#include <linux/device.h> //包含了device、class 等结构的定义
#include <linux/gpio.h>
#include <plat/gpio-cfg.h>
#define DEVICE_NAME "temp"
static struct cdev cdev; //linux/cdev.h
struct class *tem_class;
static dev_t devno;
static int major = 243;
void tem_reset(void)
{
s3c_gpio_cfgpin(S3C64XX_GPN(8), S3C_GPIO_SFN(1)); //设置gpio8为为中断8使能
/* S3C64XX_GPN(8)在arch\arm\plat-s3c64xx\Irq_eint.c中定义;
* s3c_gpio_cfgpin(S3C64XX_GPN(offs), 0x2 << (offs * 2)); offs指的是S3C64XX的哪个中断,参考Tiny6410硬件手册知道,本温度传感器硬件用到的是EINT8;
* int offs = eint_offset(irq); 定义了offs是如何得来的,
* #define eint_offset(irq) ((irq) - IRQ_EINT(0)) 其中的IRQ_EINT(0)意思是外部中断0吧,irq代表你要用到的中断号;
***********************************************************/