驱动学习8--gpiolib的使用
来源:互联网 发布:python 编码问题 编辑:程序博客网 时间:2024/04/28 23:44
驱动
#include <linux/module.h> // module_init module_exit#include <linux/init.h> // __init __exit#include <linux/fs.h>#include <linux/leds.h> //struct led_classdev#include <mach/regs-gpio.h> //gpio virtual address#include <mach/gpio-bank.h> //gpio virtual address#include <linux/io.h>#include <linux/ioport.h>#include <mach/gpio.h> //S5PV210_GPxx(x)#define GPIO_LED1 S5PV210_GPJ0(3)#define GPIO_LED2 S5PV210_GPJ0(4)#define GPIO_LED3 S5PV210_GPJ0(5)static struct led_classdev led_cdev1; // 定义结构体变量static struct led_classdev led_cdev2; // 定义结构体变量static struct led_classdev led_cdev3; // 定义结构体变量static void s5pv210_led_set1(struct led_classdev *led_cdev,enum led_brightness value){ if(value == LED_OFF) gpio_set_value(GPIO_LED1,1); else gpio_set_value(GPIO_LED1,0); printk(KERN_INFO "value = %d\n",value);}static void s5pv210_led_set2(struct led_classdev *led_cdev,enum led_brightness value){ if(value == LED_OFF) gpio_set_value(GPIO_LED2,1); else gpio_set_value(GPIO_LED2,0); printk(KERN_INFO "value = %d\n",value);}static void s5pv210_led_set3(struct led_classdev *led_cdev,enum led_brightness value){ if(value == LED_OFF) gpio_set_value(GPIO_LED3,1); else gpio_set_value(GPIO_LED3,0); printk(KERN_INFO "value = %d\n",value);}static int __init s5pv210_led_init(void){ int ret = -1; ret = gpio_request(GPIO_LED1, "GPJ0"); if(ret) printk("gpio_request1 fail\n"); gpio_direction_output(GPIO_LED1, 1); ret = gpio_request(GPIO_LED2, "GPJ0"); if(ret) printk("gpio_request2 fail\n"); gpio_direction_output(GPIO_LED2, 1); ret = gpio_request(GPIO_LED3, "GPJ0"); if(ret) printk("gpio_request3 fail\n"); gpio_direction_output(GPIO_LED3, 1); led_cdev1.name = "led1"; led_cdev1.max_brightness = 1000;/*设置最大亮度*/ led_cdev1.brightness = 0;/*设置亮度初始值 */ led_cdev1.brightness_set = s5pv210_led_set1;/*具体操控硬件*/ ret = led_classdev_register(NULL, &led_cdev1); if (ret < 0) { printk(KERN_ERR "led_classdev_register failed\n"); return ret; } led_cdev2.name = "led2"; led_cdev2.max_brightness = 1000;/*设置最大亮度*/ led_cdev2.brightness = 0;/*设置亮度初始值 */ led_cdev2.brightness_set = s5pv210_led_set2;/*具体操控硬件*/ ret = led_classdev_register(NULL, &led_cdev2); if (ret < 0) { printk(KERN_ERR "led_classdev_register failed\n"); return ret; } led_cdev3.name = "led3"; led_cdev3.max_brightness = 1000;/*设置最大亮度*/ led_cdev3.brightness = 0;/*设置亮度初始值 */ led_cdev3.brightness_set = s5pv210_led_set3;/*具体操控硬件*/ ret = led_classdev_register(NULL, &led_cdev3); if (ret < 0) { printk(KERN_ERR "led_classdev_register failed\n"); return ret; } return 0;}static void __exit s5pv210_led_exit(void){ led_classdev_unregister(&led_cdev1); led_classdev_unregister(&led_cdev2); led_classdev_unregister(&led_cdev3); gpio_free(GPIO_LED1); gpio_free(GPIO_LED2); gpio_free(GPIO_LED3);}module_init(s5pv210_led_init);module_exit(s5pv210_led_exit);MODULE_LICENSE("GPL");/*描述模块的许可证*/MODULE_AUTHOR("Xin-Ya Zhu<mhzhuxinya@outlook.com>");/*描述模块的作者*/MODULE_DESCRIPTION("s5pv210 led driver");/*描述模块的介绍信息*/ MODULE_ALIAS("s5pv210_leds");/*描述模块的别名信息*/
应用
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h> //open close#include <sys/stat.h>#include <fcntl.h>#define FILE "/sys/class/leds/led1/brightness"#define LED_ON "1"#define LED_OFF "0"int main(void){ int fd = -1; char buf[100] = {0}; fd = open(FILE,O_RDWR); if(fd<0) { printf("open error.\n"); return -1; } write(fd,LED_ON,strlen(LED_ON)); sleep(1); write(fd,LED_OFF,strlen(LED_OFF)); sleep(1); write(fd,LED_ON,strlen(LED_ON)); sleep(1); write(fd,LED_OFF,strlen(LED_OFF)); sleep(1); close(fd); return 0;}
阅读全文
0 0
- 驱动学习8--gpiolib的使用
- 驱动开发之gpiolib库的学习及使用
- 驱动框架6——linux内核的gpiolib学习
- 驱动框架7——使用gpiolib完成led驱动
- 整理--linux内核的gpiolib学习
- 使用gpiolib的GPIO应用例子
- 使用gpiolib的GPIO应用例子
- 君正X系列开发---GPIO在用户空间使用&platform_device驱动&gpiolib库的使用5
- 知识整理–linux内核的gpiolib学习
- Linux GPIO 驱动(基于GPIOLIB)
- linux驱动(七)gpiolib库详解
- gpiolib的调用过程分析
- gpiolib的调用过程分析
- [Linux笔记]gpiolib的调用过程分析
- linux驱动学习之旗标的使用
- gpiolib文档
- gpiolib文档
- 驱动学习之——内核等待队列的使用
- 富文本编辑+fs操作文件+Buffer练习(头像上传功能)
- 105 C语言函数指针(指向函数的指针)
- spring AOP自定义注解方式实现日志管理 详解
- Vue初体验(六)组件component
- 106 只需一招,彻底攻克C语言指针
- 驱动学习8--gpiolib的使用
- python中使用plot画图,图不显示
- android中如何在代码中直接设置View的layout_weight属性
- Educational Codeforces Round 22 C. The Tag Game(思维 搜索)
- 107 再谈main()函数,接收控制台数据
- EC插件—修改指南(汇总)
- 【ARM】一步一步移植Linux Kernel 2.6.13到板子
- SpringMVC使用 @responseBody Annotation 在老版本IE会变成下载
- WIN32SDK : TranslateAccelerator参数1填错引起加速键失效