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

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c