资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
An droid 驱动例子(LED灯控制)本例子,讲述在 Android 2.1上完全自已开发一个驱动去控制硬件口并写应用测试该驱动,通过这样一个例 子,解析android下的驱动开发流程的应用调用流程,可以说是很好的入门引导要达到的效果:通过Android的应用,调用驱动程序,在开发板上控制4个LED的亮灭。、硬件原理1 VDOJOJD7Cec去nLxL:4D11H-LED如上图,通过 4个10 口控制这LED,低电平LED亮, 这 4 个 I0 口分别是 GPM1, GPM2, GPM3, GPM4,二、驱动程序1、 在kernel文件夹下的driver目录,新键驱动文件夹# cd kernel_ Android _2 6 28 6/drivers进到开发板的kernel目录,建驱动文件夹#mkdir ledtest2、 在 /driver/ledtest 目录下,新建 leddriver.c ,leddriver.h , Kconfig, Makefile 等 4 个文件leddriver.c1.#include2.#include3.#include4.#include/* For _init/_exit/.*/5.#include6.#include7.#include8.#include9.#includevplat/gpio-cfg.h10.#includevplat/regs-clock.h11.#include12.#include13.#include14.#include15.#include16.#include17.#include/for register_chrdev()18.#include19.#include20.#includeleddriver.h21.#include/* For MODULE_ALIAS_MISCDEV22.(WATCHDOG_MINOR) */23.#include/* For the watchdog specific items */24.#include/* For file operations */25.#defineViberator_MAJOR97/? -ee ?o?26.#defineSCULL_NR_DEVS427.#defineSCULL_QUANTUM400028.#defineSCULL_QSET100029./-do as the GIO driver30.#defineDEVCOUNT431.#defineGIO_MINOR2/* GIO minor no. */32.staticdev_t dev;/ ee ?g?g?* ee士? o?33.staticstruct cdev *cdev_p;34.staticint openCnt;35./- e?d?36.intVIB_major = 97;/we asigment it for test37.intVIB_minor = 0;38.intVIB_nr_devs = SCULL_NR_DEVS;39.int VIB_quantum = SCULL_QUANTUM;40.int VIB_qset = SCULL_QSET;41.42.staticstructclass *vib_dev_class;43.#defineGPNCON S3C64XX_GPNCON44.#defineGPNDAT S3C64XX_GPNDAT45.#define GPNPUD S3C64XX_GPNPUD46.#define GPMCON S3C64XX_GPMCON47.#define GPMDAT S3C64XX_GPMDAT48.#define GPMPUD S3C64XX_GPMPUD49.50.#define VIB_ON 0x1151.#define VIB_OFF 0x2252.staticconst struct file_operations GPIO_Viberator_ctl_ops=53.owner= THIS_MODULE,54.open = GPIO_VIB_open,55.read =GPIO_VIB_read,56.write =GPIO_VIB_write,57.ioctl = GPIO_VIB_ioctl,58.release =GPIO_VIB_release,59.;60.ssize_t GPIO_VIB_read(struct file * file,char * buf,size_t count,loff_t * f_ops)61.62.printk( GPIO_VIB_read rn);63.gpio_direction_output(S3C64XX_GPM(3), 0);/64.return count ;65.66.ssize_t GPIO_VIB_write (struct file * file,const char * buf, size_t count,loff_t * f_ops)67.68.printk( GPIO_VIB_write rn);69.gpio_direction_output(S3C64XX_GPM(3), 1);/70.return count;71.72.73.ssize_t GPIO_VIB_ioctl(struct inode * inode,struct file *file,unsigned intcmd, long data)74.staticint GPIO_VIB_ioctl(structinode *inode,structfile *file,unsignedintcmd, unsignedlong arg)75.76.printk(KERN_ERRVIB:GPIO_VIB_ioctl -CMD=%x n,cmd);77.switch (cmd)78.79.case VIB_ON:80.gpio_direction_output(S3C64XX_GPM(1), 0);/81.gpio_direction_output(S3C64XX_GPM(2), 0);/82.gpio_direction_output(S3C64XX_GPM(3), 0);/83.gpio_direction_output(S3C64XX_GPM(4), 1);/84.printk(KERN_ERRVIB:GPIO_VIB_ioctl -VIB_ONn);85.break ;86.case VIB_OFF:87.88.printk(KERN_ERRVIB:GPIO_VIB_ioctl -VIB_OFFn);89.gpio_direction_output(S3C64XX_GPM(1), 1);/90.gpio_direction_output(S3C64XX_GPM(2), 1);/91.gpio_direction_output(S3C64XX_GPM(3), 1);/92.gpio_direction_output(S3C64XX_GPM(4), 0);/93.break ;94.95.default : break ;96.97.98.gpio_free(S3C64XX_GPN(7);99. 100.ssize_t GPIO_VIB_open(struct inode * inode,struclfile* file)101.102./? ?eey103.MOD_INC_USE_COUNT;104.printk(GPIO_VIB_open() n);105.return 0;106.107.ssize_t GPIO_VIB_release(struct inode * inode,structfile* file)108.109./ MOD_DEC_USE_COUNT;? ?ee y?110.printk(GPIO_VIB_release() n);111.return 0;112.113.staticint GPIO_VIB_CTL_ini
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号