11、IMX6ULL学习笔记-linux设备树之pinctrl和gpio子系统

本文详细介绍了一种基于Linux的嵌入式系统中LED驱动的实现过程,包括设备树配置、驱动程序编写、GPIO控制及字符设备注册。通过具体代码示例,展示了如何在设备树中添加LED控制节点,实现LED的开关功能。

一、原理图

在这里插入图片描述

二、寄存器

在这里插入图片描述

三、设备树

在iomuxc节点下的imx6ul-evk子节点下添加pinctrl_myled: ledgrp节点
在这里插入图片描述
在根节点下添加devicetree-leds-pincrl子节点
在这里插入图片描述

四、驱动程序

#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/ide.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/gpio.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_gpio.h>
#include <asm/mach/map.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#define DeviceName        "pinctrl-leds" /* 设备名称 */
#define DeviceNodes_CNT	  1		  	     /* 设备号个数 */
#define LEDOFF 			  0			     /* 关灯 */
#define LEDON 			  1			     /* 开灯 */
/* 定义一个设备结构体 */
struct mod_struct {
   
   
	dev_t devid;			  /* 设备号*/
	struct cdev cdev;		  /* cdev  */
	struct class *class;	  /* 类    */
	struct device *device;	  /* 设备  */
	int major;				  /* 主设备号 */
	int minor;				  /* 次设备号 */
	struct device_node	*nd;  /* 设备节点 */
	int led_gpio;			  /* led所使用的GPIO编号*/
};
struct mod_struct mod_device;	/* led设备 */
/*
 * @description		: 打开设备
 * @param - inode 	: 传递给驱动的inode
 * @param - filp 	: 设备文件,file结构体有个叫做private_data的成员变量
 * 					  一般在open的时候将private_data指向设备结构体。
 * @return 			: 0 成功;其他 失败
 */
static int led_open(struct inode *inode, struct file *filp)
{
   
   
	filp->private_data = &mod_device; /* 设置私有数据 */
	return 0;
}
/*
 * @description		: 从设备读取数据 
 * @param - filp 	: 要打开的设备文件(文件描述符)
 * @param - buf 	: 返回给用户空间的数据缓冲区
 * @param - cnt 	: 要读取的数据长度
 * @param - offt 	: 相对于文件首地址的偏移
 * @return 			: 读取的字节数,如果为负值,表示读取失败
 */
static ssize_t led_read(
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值