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编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06