首页 > 其他分享 >编写LED驱动-设备树

编写LED驱动-设备树

时间:2023-05-21 14:12:24浏览次数:28  
标签:__ led struct LED file 驱动 编写 drv inode

写LED驱动 

首先,我们要建立一个file_operator结构体:

/* 定义自己的file_operations结构体                                              */
static struct file_operations led_drv = {
    .owner     = THIS_MODULE,       //主设备号
    .open    = led_drv_open,     // driver function
    .read    = led_drv_read,
    .write   = led_drv_write,
    .release = led_drv_close,
};

 

编写相应的四个driver function:

/* 3. 实现对应的open/read/write等函数,填入file_operations结构体                   */
static ssize_t led_drv_read (struct file *file, char __user *buf, size_t size, loff_t *offset)
{
    printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
    return 0;
}

/* write(fd, &val, 1); */
static ssize_t led_drv_write (struct file *file, const char __user *buf, size_t size, loff_t *offset)
{
    int err;
    char status;
    //struct inode *inode = file_inode(file);
    //int minor = iminor(inode);
    
    printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
    err = copy_from_user(&status, buf, 1);

    /* 根据次设备号和status控制LED */
    gpiod_set_value(led_gpio, status);
    
    return 1;
}

static int led_drv_open (struct inode *node, struct file *file)
{
    //int minor = iminor(node);
    
    printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
    /* 根据次设备号初始化LED */
    gpiod_direction_output(led_gpio, 0);
    
    return 0;
}

static int led_drv_close (struct inode *node, struct file *file)
{
    printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);
    return 0;
}

 

注册filer_operator: 告诉CPU:这里采用设备树的方式:

 

 

 

 

 b

标签:__,led,struct,LED,file,驱动,编写,drv,inode
From: https://www.cnblogs.com/lianglianglu/p/17418534.html

相关文章

  • LED硬件基本知识
    首先我们都知道LED的基本操作,通过上拉或下拉电阻的方式实现LED的开关,这里不再介绍。那么怎么知道GPIO地址在那个位置1,也就是如何通过位操作来实现硬件的开关呢?IMX6ULL的GPIO操作方法GPIO的控制涉及4大模块:CCM、IOMUXC、GPIO模块本身,框图如下:GPIOx为GPIOgroup,里面包换不......
  • Python编写输出斐波那契数列的前n项
    以下是一个使用Python编写的程序代码,可以计算并输出斐波那契数列的前n项(n由用户输入):n=int(input("请输入斐波那契数列的项数:"))a,b=0,1foriinrange(n):print(b,end="")a,b=b,a+b代码解释:用户输入斐波那契数列的项数n,并使用int()函数将输入的字符串......
  • elasticsearch 启动报错 SearchPhaseExecutionException[Failed to execute phase [qu
    Elasticsearch启动报错:[2023-05-19T22:39:32,161][DEBUG][o.e.a.s.TransportSearchAction][X-111.ecs]Allshardsfailedforphase:[query][2020-05-19T22:39:32,162][WARN][r.suppressed][X-111.ecs]path:/.kibana_task_manager/_search,params:{ign......
  • 5个编写高效Makefile文件的最佳实践
    在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动化构建、编译、测试和部署。然而,编写高效的Makefile文件并不是一件容易的事情。在本文中,我们将讨论如何编写高效的Makefile文件,以提高我们的开发效率和产品质量确定目标在编写Makefile文件之前,我们需要明确我......
  • 5个编写高效Makefile文件的最佳实践
    在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动化构建、编译、测试和部署。然而,编写高效的Makefile文件并不是一件容易的事情。在本文中,我们将讨论如何编写高效的Makefile文件,以提高我们的开发效率和产品质量确定目标在编写Makefile文件之前,我们需要明确我......
  • 编写程序,随机产生30个1-100之间的随机整数,按5行6列的格式输出
    大家好,我是皮皮。一、前言前几天在某乎上看到了一个粉丝提问,编写程序,随机产生30个1-100之间的随机整数并存入5行6列的二维列表中,按5行6列的格式输出?这里拿出来跟大家一起分享下。二、实现过程后来问了【ChatGPT】,给出的回答如下:以下是一个Python程序来实现上述任务:#coding:utf-8......
  • 常用的标准LCD驱动芯片,性价比高,稳定性好,多种封装型号选择VK1056
    型号:VK1056BVK1056C品牌:永嘉微电/VINKA封装形式:SOP24SSOP24年份:最新年份VK1056B/C概述:VK1056B/C是56点、内存映象和多功能的LCD驱动,VK1056B的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示系统,用于连接主控制器和VK1056B的管脚只有4条,VK1056B......
  • PIP SSL:CERTIFICATE_VERIFY_FAILED
    今天再安装pyserial的时候一直提示这个错误,电脑代理什么的都关掉了还是有这个错误,然后根据网上的说明,添加添加信任主机选项后就成功安装上pyserial了。pip--trusted-hostpypi.tuna.tsinghua.edu.cninstallpyserial......
  • 第十四篇——如何用通达信绘图函数画线?(从零起步编写通达信指标公式系列)
    内容提要:本文主要介绍了通达信指标公式常用绘图函数的第一种类型——画线函数,讲解了DRAWNULL、NODRAW、PLOYLINE、DRAWSL这四个画线函数的具体用法。 在上一篇文章中,给大家简单介绍了通达信指标公式绘图函数的三种类型,接下来将详细讲解这些函数的具体用法。说到绘图函数,就不......
  • linux(RK3308)添加CH9434(SPI串口扩展)驱动
    linux(RK3308)添加CH9434(SPI串口扩展)驱动1、CH9434驱动下载https://www.wch.cn/downloads/CH9434EVT_ZIP.html2、驱动移植2.1、移植准备1、查看系统是否支持DTS设备树支持,若支持DTS可以直接在DTS文件中定义SPI节点。如下所示:&spi2{status="okay";max-freq=<500......