Mini2440的ADC linux驱动 之 定格式

    在展讯平台的驱动中,我经常会说“驱动者,三分硬件,三分格式,四分软件”,但是并没有过多的体现出来格式的重要性,因为展讯平台有他自己的格式,这种格式往往不是通用的(虽然思想一样),但Linux就更具有普遍性了!

    硬件平台是mini2440

    Linux版本2.6.32   

    首先,按照官方的或是网上的将Linux移植到开发板里面,这样我们就有了一个实验的田地!最近在看Linux设备驱动开发详解和LDD3,感觉两本书结合着看比较好!学以致用,先试一试一个简单的字符串设备吧 --- ADC的驱动!


    因为ADC驱动不用对ADC进行写操作和一些特殊的iocontrol,所以,只定义一个读操作函数就OK了,先把格式定下来,然后再填充!


#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/init.h>
#include <linux/serio.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <linux/wait.h>
#include <linux/sched.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/uaccess.h>
#include <mach/regs-clock.h>
#include <plat/regs-timer.h>

#include <plat/regs-adc.h>
#include <mach/regs-gpio.h>
#include <linux/cdev.h>
#include <linux/miscdevice.h>

#include "s3c24xx-adc.h"

#define DEVICE_NAME	"adc"

static irqreturn_t adcdone_int_handler(int irq, void *dev_id)
{

}

static SSIZE_T s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
{

} 

static int s3c2410_adc_open(struct inode *inode, struct file *filp)
{

}

static int s3c2410_adc_release(struct inode *inode, struct file *filp)
{

}

static struct file_operations devfops = {
    owner: THIS_MODULE,
    open: s3c2410_adc_open,
    read: s3c2410_adc_read,
    release:s3c2410_adc_release,
};

static struct miscdevice misc = {
	.minor = MISC_DYNAMIC_MINOR,
	.name = DEVICE_NAME,
	.fops = &dev_fops,
};

static int __init dev_init(void)
{

}

static void __exit dev_exit(void)
{

}

module_init(dev_init);
module_exit(dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("lowkeyway");


    写上必不可少的头文件,模块化编程中,module_init(dev_init);module_exit(dev_exit);是必须的,设备的初始化和退出,设备类型注册为杂项,设备的操作函数,中断函数一一写成空函数,等想好了再往上填写,因为每个函数的返回类型和传入参数都是固定的,不必担心多余的改动!


好了,关于ADC的驱动格式大约就有这么多了!

soeasy

你可能感兴趣的:(linux,struct,File,Module,buffer,平台)