Android驱动开发实例(控制LED灯)

上传人:woxinch****an2018 文档编号:38641824 上传时间:2018-05-05 格式:DOCX 页数:11 大小:76.23KB
返回 下载 相关 举报
Android驱动开发实例(控制LED灯)_第1页
第1页 / 共11页
Android驱动开发实例(控制LED灯)_第2页
第2页 / 共11页
Android驱动开发实例(控制LED灯)_第3页
第3页 / 共11页
Android驱动开发实例(控制LED灯)_第4页
第4页 / 共11页
Android驱动开发实例(控制LED灯)_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Android驱动开发实例(控制LED灯)》由会员分享,可在线阅读,更多相关《Android驱动开发实例(控制LED灯)(11页珍藏版)》请在金锄头文库上搜索。

1、Android 驱动例子(驱动例子(LED 灯控制)灯控制)本例子,讲述在 Android2.1 上完全自已开发一个驱动去控制硬件口并写应用测试该驱动,通过这样一个例子,解析 android 下的驱动开发流程的应用调用流程,可以说是很好的入门引导 要达到的效果要达到的效果:通过 Android 的应用,调用驱动程序,在开发板上控制 4 个 LED 的亮灭。一、硬件原理一、硬件原理如上图,通过 4 个 IO 口控制这 LED,低电平 LED 亮,这 4 个 IO 口分别是 GPM1, GPM2, GPM3, GPM4,二、驱动程序二、驱动程序1、在 kernel 文件夹下的 driver 目录,

2、新键驱动文件夹# cd kernel_Android_2.6.28.6/drivers进到开发板的 kernel 目录,建驱动文件夹#mkdir ledtest2、在/driver/ledtest 目录下,新建 leddriver.c ,leddriver.h , Kconfig, Makefile 等 4 个文件leddriver.cleddriver.c1. #include 2. #include 3. #include 4. #include /* For _init/_exit/. */ 5. #include 6. #include 7. #include 8. #include

3、9. #include 10.#include 11.#include 12.#include 13.#include 14.#include 15.#include 16.#include 17.#include /for register_chrdev() 18.#include 19.#include 20.#include “leddriver.h“ 21.#include /* For MODULE_ALIAS_MISCDEV 22. (WATCHDOG_MINOR) */ 23.#include /* For the watchdog specific items */ 24.#i

4、nclude /* For file operations */ 25.#define Viberator_MAJOR 97 /?o? 26.#define SCULL_NR_DEVS 4 27.#define SCULL_QUANTUM 4000 28.#define SCULL_QSET 1000 29./-do as the GIO driver 30.#define DEVCOUNT 4 31.#define GIO_MINOR 2 /* GIO minor no. */ 32.static dev_t dev; / ? ? ? o? 33.static struct cdev *cd

5、ev_p; 34.static int openCnt; 35./-?- 36.int VIB_major = 97;/we asigment it for test 37.int VIB_minor = 0; 38.int VIB_nr_devs = SCULL_NR_DEVS; 39.int VIB_quantum = SCULL_QUANTUM; 40.int VIB_qset = SCULL_QSET; 41. 42.static struct class *vib_dev_class; 43.#define GPNCON S3C64XX_GPNCON 44.#define GPNDA

6、T S3C64XX_GPNDAT 45.#define GPNPUD S3C64XX_GPNPUD 46.#define GPMCON S3C64XX_GPMCON 47.#define GPMDAT S3C64XX_GPMDAT 48.#define GPMPUD S3C64XX_GPMPUD 49. 50.#define VIB_ON 0x11 51. #defineVIB_OFF 0x22 52.static const struct file_operations GPIO_Viberator_ctl_ops= 53. .owner = THIS_MODULE, 54. .open =

7、 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

8、);/ 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,un

9、signed int cmd, long data) 74.static int GPIO_VIB_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) 75. 76. printk(KERN_ERR“VIB: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_outp

10、ut(S3C64XX_GPM(2), 0);/ 82. gpio_direction_output(S3C64XX_GPM(3), 0);/ 83. gpio_direction_output(S3C64XX_GPM(4), 1);/ 84. printk(KERN_ERR“VIB:GPIO_VIB_ioctl -VIB_ONn“); 85. break; 86. case VIB_OFF: 87. 88. printk(KERN_ERR“VIB:GPIO_VIB_ioctl -VIB_OFFn“); 89. gpio_direction_output(S3C64XX_GPM(1), 1);/

11、 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,struct file * file) 101. 102./?y 1

12、03. /MOD_INC_USE_COUNT; 104. printk(“GPIO_VIB_open() n“); 105. return 0; 106. 107.ssize_t GPIO_VIB_release(struct inode * inode, struct file * file) 108. 109. / MOD_DEC_USE_COUNT;/?y? 110. printk(“GPIO_VIB_release() n“); 111. return 0; 112. 113.static int GPIO_VIB_CTL_init(void) 114. 115. int ret =

13、-ENODEV; 116. int error ; 117. printk(“- rn“); 118. /3? 119. s3c_gpio_cfgpin(S3C64XX_GPM(1), S3C_GPIO_SFN(1);/GPM1 output 120. s3c_gpio_cfgpin(S3C64XX_GPM(2), S3C_GPIO_SFN(1);/GPM2 output 121. s3c_gpio_cfgpin(S3C64XX_GPM(3), S3C_GPIO_SFN(1);/GPM3 output 122. s3c_gpio_cfgpin(S3C64XX_GPM(4), S3C_GPIO_

14、SFN(1);/GPM4 output 123.#if 1 /*?2?2?y?*/ 124.ret = register_chrdev(Viberator_MAJOR, “viberator“, 125.if (ret ops = 152. error = cdev_add(cdev_p, dev, DEVCOUNT); 153. if (error) 154. printk(KERN_ERR 155. “VIB: Couldnt cdev_add, error=%dn“, error); 156. return 1; 157. 158. 159. vib_dev_class = class_create(THIS_MODULE, “vib-dev“); 160. if (IS_ERR(vib_dev_class)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 高中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号