首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux通用GPIO驱动写法与应用

说明 在Linux,可以对GPIO进行相关的控制,具体的做法就是利用字符设备驱动程序对相关的gpio进行控制。由于操作系统的限制,在Linux上又无法直接在应用程序的层面上对底层的硬件进行操作。...但是需要完成的工作量较大,既要理解驱动又要熟悉Linux应用编程。下面来介绍这种方式。 3.1 什么是ioctl ioctl是设备驱动程序对设备的I/O通道进行管理的函数。...将GPIO驱动集成到内核 由于前面已经将问题驱动模块单独编译,此时若想集成到内核,则需要做以下几件事: 4.1 向内核添加文件 由于GPIO驱动属于字符设备驱动,所以应该放在kernel/drivers...4.3 让驱动编译到内核 通过Kconfig只是选择了编译的宏,如果让驱动正真编译到内核,还需要修改Makefile。也就是修改kernel/drivers/char/Makefile ?...这个宏表示当配置了TFM_V2_GPIO宏时,tfmv2_gpio.c将会编译成驱动,内核启动时,该驱动自动加载。 下图是Linux启动后自动加载的tfm_v2的gpio驱动。 ?

9.6K43
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux驱动实践:如何编写【 GPIO 】设备的驱动程序?

    目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章,我们一块讨论了:在 Linux 系统,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。...这篇文章,我们就以此为基础,写一个有实际应用功能的驱动程序: 在驱动程序,初始化 GPIO 设备,自动创建设备节点; 在应用程序,打开 GPIO 设备,并发送控制指令设置 GPIO 口的状态; 示例程序目标...编写驱动程序 以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。...从代码可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层的 udev 服务,自动在 /dev 目录下创建了设备节点。...再来看一下 dmesg的打印信息: 可以看到:驱动程序gpio_driver_exit( ) 被调用执行了。

    5.1K30

    驱动GPIO操作总结

    设备驱动程序是软件概念和硬件电路之间的一个抽象层,软件操作硬件的关键就是对寄存器的操作。笔者使用的S5PV210是IO与内存统一编址的,在裸机中直接操作IO端口的物理地址,而在驱动必须使用虚拟地址。...考虑到GPIO作为硬件资源,存在着被多个驱动使用,还有复用的问题,所以内核提供了GPIO驱动gpiolib框架来统一管控GPIO资源,gpiolib在内核作为一个驱动所实现。...,相关宏定义在linux/gpio.h label: 名称 返回值: 成功返回0,失败返回负值 gpio_free 释放GPIO /* linux/gpio.h */ void gpio_free(unsigned...gpio) gpio: gpio编号,相关宏定义在linux/gpio.h gpio_direction_input 设置GPIO为输入模式 /* linux/gpio.h */ int gpio_direction_input...(unsigned gpio) gpio: gpio编号,相关宏定义在linux/gpio.h 返回值: 成功返回0,失败返回负值 gpio_direction_output 设置GPIO为输出模式

    94420

    高通GPIO驱动(DTS方式)

    gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态; sysfs文件系统的建立可以参照下面的博客...gpio_name = ; //gpio_99 4 ... 5 } 驱动代码: 1      int gpio_99 = of_get_named_gpio_flags...比上面的方式多了许多配置GPIO的方式,例如配置电流(可以用于睡眠唤醒的功能),管理pin脚的复用,接口规格等功能;蜗窝科技的大牛们就有几篇写的很好: linux内核GPIO系统之(1):软件框架...linux内核GPIO系统之(2):pin control subsystem Linux内核GPIO系统之(3):pin controller driver代码分析 linux内核GPIO...系统之(4):pinctrl驱动的理解和总结 linux内核GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合 DTS代码: 1 device_node

    4.7K40

    Linuxgpio接口的使用方法示例

    前言 Linux内核gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpiogpio使用0~MAX_INT之间的整数标识,...不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的 使用gpio...使用gpio接口需要包含#include ,在驱动中使用延时函数mdelay,需要包含#include 文件,Documentation/gpio.txt.../* GPIO OUTPUT */ void gpio_set_value(unsigned gpio, int value); int gpio_cansleep(unsigned gpio);...); } else { set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_RISING); } } 参考文章 Linuxgpio口使用方法

    2.6K53

    Stm32的GPIO驱动继电器

    由于单片机的GPIO口的输出电流非常小 (功率很小),所以单片机的GPIO口只能驱动类似于LED灯、数码管等小功率用电器,而不能驱动像继电器这样大功率的用电器。...继电器 SRD-03VDC-SL-C继电器:只需要3V电压就可以控制继电器的单刀双掷开关,但不能用GPIO口的高电平驱动继电器,需要用上述提到的驱动电路进行驱动。...比较安全的做法是把外接电源和常开端连接到外接的高压电路。 所以,GPIO口通过三极管驱动继电器的电路如下: 左边是STM32的单片机端口通过三极管输出电压,右边是继电器。...继电器也有2.6V电压,电流值为2.6 V / 25 Ω= 104 mA,继电器被驱动。 这个电路图中,功率要比改进前小很多。 另外,当GPIO = 0时,继电器不被驱动。...小结: 由于单片机的GPIO的电流很小,所以需要通过三极管对电流进行放大,然后驱动继电器。继电器的线圈和触点在接通和断开瞬间会对整个电路造成很大的影响,因此要对继电器的线圈和触点分别进行保护。

    4.8K30

    OpenHarmony驱动子系统开发—GPIO接口

    通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。...GPIO接口定义了操作GPIO管脚的标准方法集合,包括:设置管脚方向: 方向可以是输入或者输出(暂不支持高阻态)读写管脚电平值: 电平值可以是低电平或高电平设置管脚中断服务函数:设置一个管脚的中断响应函数...,以及中断触发方式使能和禁止管脚中断:禁止或使能管脚中断GPIO接口定义在base/iot_hardware/peripheral/interfaces/kits/iot_gpio.h文件接口说明功能分类...设置管脚上拉/下拉 使用指导使用流程GPIO标准API通过GPIO管脚号来操作指定管脚,使用GPIO的一般流程如下所示。...确定GPIO管脚号GPIO管脚号需要结合开发板的电路图来确定,具体开发板电路原理图的资料需要从开发板厂商获取。

    6200

    Linux GPIO 开发指南

    ,Pinctrl 驱动支持从device tree 定义的设备节点获取 pin 的配置信息 2.3 总体框架 Sunxi Pinctrl 驱动模块的框架如下图所示,整个驱动模块可以分成 4 个部分:...Pinctrl framework:Linux 提供的 pinctrl 驱动框架。 Pinctrl sunxi driver:sunxi 平台需要实现的驱动。...index, enum of_gpio_flags *flags) 拿到gpio的配置信息后(保存在flags参数,见4.2.8.小节),在根据需要调用相应的标准接口实现自己的功能 对于linux-...警告 linux5.4 使 用 pinctrl_gpio_set_config 配 置 gpio 属 性, 对 应 使 用pinconf_to_config_pack 生成 config 参数: •...); int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce); 在驱动,调用上面两个接口即可设置 gpio 对应的中断 debounce

    8.2K60

    linux驱动ioctl函数,Linux驱动相关的ioctl函数

    ioctl是设备驱动程序对设备的I/O通道进行管理的函数,所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如,在串口线上收发数据通过read/write操作,而串口的波特率、校验位、停止位通过...ioctl函数是文件结构的一个属性分量,就是说如果你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数控制设备的I/O通道。...例如,我们可以在驱动程序实现write的时候检查一下是否有特殊约定的数据流通过,如果有的话,那么后面就跟着控制命令(一般在socket编程中常常这样做)。...要记住,用户程序所作的只是通过命令码告诉驱动程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做的事情。...设备节点赋值,”/dev/video0″是真实的物理摄像头设备在linux的表示 if (videodevice == NULL || *videodevice == 0) { videodevice

    2.3K180

    基于IMX6的GPIO驱动程序

    Linux内核版本:linux-3.0.35 开发板: IMX6S MY-IMX6-EK200 编译环境:Ubuntu12 主要内容:IMX6S的IO驱动程序编写(ioctl) 实现功能...bit29~bit15 14位为 “数据大小” 区,表示 ioctl() 的 arg 变量传送的内存大小。           ...要按照Linux内核的约定方法为驱动程序选择ioctl编号,因为如果不按照这个约定进行编写,就有可能因为cmd参数冲突问题不能正确调用ioctl函数。...在include/asm/ioctl.h头文件,我们可以看到供我们使用的创建cmd参数的方法。...arg参数是驱动层和应用层交换的数据,例如当写GPIO,arg=1时,应用层给驱动层传递1,驱动层控制GPIO为高电平;当读GPIO时,应用层通过驱动层传递过来的arg参数的值来判别GPIO的高低电平。

    1.8K80

    OpenHarmony驱动子系统开发—GPIO按键事件中断

    所以本次开发驱动GPIO引脚是GPIO5。...arg 表示中断回调函数中使用的参数的指针案例程序解析本案例通过按键按压时触发的边沿中断,在中断回调函数更改LED灯的输出电平,来达到按压一次按键,实现点灯和熄灯的效果。...由于开发板物理按键存在抖动的问题,会在按压一次按键时,多次触发中断回调,所以我们需要在中断回调函数,进行软件防抖操作,过滤掉一些不必要的操作。...static unsigned int lastTickCount = 0;static unsigned int led_Level = 0;//GPIO5断回调函数void GpioPressedIsrFunc..._5, IOT_GPIO_DIR_IN); //设置GPIO5断 ret = IoTGpioRegisterIsrFunc(IOT_GPIO_IO_GPIO_5, IOT_INT_TYPE_EDGE

    8010

    Linux学习系列六:操作GPIO

    2.2.软件 1)需要在上一篇《Linux学习系列五:Nand Flash根文件系统制作》的基础上改动下Linux内核配置,生成新的970uimage并烧写到板子里。...4 GPIO操作 4.1.使用命令行操作GPIO GPIO驱动程序将NUC970芯片的IO口,从GPIOA~GPIOJ每组IO都保留32个号码,所以GPIOA编号0x000~0x01F,GPIOB编号0x020...LED D2对应GPIO PB4,编号0x24,对应十进制36,要控制它的话可在命令行依次输入下面指令: echo 36 > /sys/class/gpio/export echo out > /sys...实际产品这个也是比较有用的,比如可以在系统启动后,实现LED D2亮灭各1s循环,这样LED 就可以作为系统状态指示灯,我们可以通过判断LED D2是否正常闪烁来判断系统是否在正常工作。...3)使用和板子里自带文件系统匹配的交叉工具链来重新编译 arm-linux-gcc gpio_demo.c -o gpio_demo 这时它会报一个错误: ?

    3.2K20
    领券