imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2)
来源:互联网 发布:java教程视频下载 编辑:程序博客网 时间:2024/06/06 00:48
驱动层代码
/*************************************************************************> File Name: led_drv.c> Author: XXDK> Email: v.manstein@qq.com > Created Time: Sun 26 Feb 2017 04:28:00 AM PST ************************************************************************/#include<linux/init.h>#include<linux/module.h>#include<asm/gpio.h>#include<mach/iomux-mx6q.h>#include<linux/cdev.h>#include<linux/fs.h>#include<linux/device.h>#define SABRESD_GPIO_LED4IMX_GPIO_NR(3, 21)#define SABRESD_GPIO_LED5IMX_GPIO_NR(3, 22)#define SABRESD_GPIO_LED6 IMX_GPIO_NR(3, 23)#define LED_ON1#define LED_OFF 0struct led_resource {int gpio;char *name;int data;};static struct cdev led_cdev;static dev_t led_dev_id;static struct class *cls;static struct led_resource led_res[] = {[0] = {.gpio = SABRESD_GPIO_LED4,.name = "xxdk_led4",},[1] = {.gpio = SABRESD_GPIO_LED5,.name = "xxdk_led5",},[2] = {.gpio = SABRESD_GPIO_LED6,.name = "xxdk_led6",}};static int led_open(struct inode* ip, struct file* fp){int i;printk("%s\n", __func__);for(i=0; i<ARRAY_SIZE(led_res); i++) {gpio_set_value(led_res[i].gpio, 1);}return 0;}static int led_close(struct inode* ip, struct file* fp){int i;printk("%s\n", __func__);for(i=0; i<ARRAY_SIZE(led_res); i++) {gpio_set_value(led_res[i].gpio, 0);}return 0;}static struct file_operations led_fops = {.owner = THIS_MODULE,.open = led_open,.release = led_close };static int led_init(void){int i;alloc_chrdev_region(&led_dev_id, 0, 1, "led@xxdk");cdev_init(&led_cdev, &led_fops);cdev_add(&led_cdev, led_dev_id, 1);for(i=0; i<ARRAY_SIZE(led_res); i++) {gpio_request(led_res[i].gpio, led_res[i].name);gpio_direction_output(led_res[i].gpio, 0);}cls = class_create(THIS_MODULE, "xxdk");device_create(cls, NULL, led_dev_id, NULL, "led@xxdk");return 0;}static void led_exit(void){int i;cdev_del(&led_cdev);unregister_chrdev_region(led_dev_id, 1);for(i=0; i<ARRAY_SIZE(led_res); i++) {gpio_set_value(led_res[i].gpio, 0);gpio_free(led_res[i].gpio);}device_destroy(cls, led_dev_id);class_destroy(cls);}module_init(led_init);module_exit(led_exit);MODULE_LICENSE("GPL");应用层代码
/*************************************************************************> File Name: led_test.c> Author: XXDK> Email: v.manstein@qq.com > Created Time: Sun 26 Feb 2017 05:22:08 AM PST ************************************************************************/#include<stdio.h>#include<sys/stat.h>#include<sys/types.h>#include<fcntl.h>int main(void){int fd;fd = open("/dev/led@xxdk", O_RDWR);if(fd < 0) {printf("open led device failed!\n");return -1;}sleep(3);close(fd);return 0;}
编译脚本
#Makefilifneq ($(KERNELRELEASE),)obj-m += led_drv.oelseKERNEL_DIR = /opt/EmbedSky/TQIMX6/TQ_COREC/linux_IMX6_CoreC_3.0.35_for_Linuxall:PWD=$(shell pwd)$(MAKE) -C $(KERNEL_DIR) M=$(PWD)clean:rm -rf .*.cmd *.o *.mod.c *.ko *.tmp_versions module* Module*endif
0 0
- imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2)
- imx6q led灯驱动及测试代码(自动创建设备文件v1)
- Linux驱动开发之四-----LED改进测试(增加自动创建设备节点)
- LED驱动,自动创建设备节点
- led驱动_自动创建设备节点
- 4412驱动-led驱动 -自动创建设备节点
- 代码:编写一个简单的字符设备驱动(自动创建设备文件)
- Linux 设备驱动--- 自动创建设备文件
- Linux 设备驱动--- 自动创建设备文件
- LED驱动,自动创建设备节点 - 嵌入…
- imx6q中led驱动分析
- 基于tiny4412开发板led灯字符设备ioctl驱动写法
- linux设备驱动之LED驱动测试
- 使用ioctl方法创建字符设备驱动
- Linux2.6.32驱动笔记(4)ioctl方法解析及mini2440-led驱动实现
- Linux设备驱动第四天(自动创建设备节点、LED驱动程序)
- imx6q camera驱动添加自己的ioctl
- 字符设备驱动高级篇4——设备类(自动创建和删除设备文件的作用)相关代码分析
- STl的一些具体的例题的应用
- sql语句获取想要字段中值与实际值不一样时的拼写
- 安卓SQLite打开数据库的错误
- Linux UDP套接字编程
- 【LeetCode】1. Two Sum
- imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2)
- Quartz
- 02JVM-内存溢出
- Objective-C类的静态数据成员
- 提升树GBDT 详解
- Why is it faster to process a sorted array than an unsorted array?
- Java中Math.pow( )的使用
- 内存越界
- 使用router.post()无法获取到req.body