imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2)

2024-06-12 14:38

本文主要是介绍imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

微笑驱动层代码微笑

/*************************************************************************> 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_LED4	IMX_GPIO_NR(3, 21)
#define SABRESD_GPIO_LED5	IMX_GPIO_NR(3, 22)
#define SABRESD_GPIO_LED6   IMX_GPIO_NR(3, 23)
#define LED_ON	1
#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;
}

偷笑编译脚本 偷笑

#Makefil
ifneq ($(KERNELRELEASE),)obj-m += led_drv.o
elseKERNEL_DIR = /opt/EmbedSky/TQIMX6/TQ_COREC/linux_IMX6_CoreC_3.0.35_for_Linux
all:PWD=$(shell pwd)$(MAKE) -C $(KERNEL_DIR) M=$(PWD)
clean:rm -rf .*.cmd *.o *.mod.c *.ko *.tmp_versions module* Module*
endif



这篇关于imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054504

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur