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

Linux通用GPIO驱动写法与应用

说明 在Linux中,可以对GPIO进行相关的控制,具体的做法就是利用字符设备驱动程序对相关的gpio进行控制。由于操作系统的限制,在Linux上又无法直接在应用程序的层面上对底层的硬件进行操作。...本文主要通过一个点亮红外灯的实例,再次理解Linux下的应用程序与驱动程序的交互,同时加深驱动程序编写流程的理解。...在开发板上,输入insmod gpio.ko看到挂载完成表示成功。 ? 如果要测试该驱动程序是否成功,可以写一个测试程序来进行测试。...这个宏表示当配置了TFM_V2_GPIO宏时,tfmv2_gpio.c将会编译成驱动,内核启动时,该驱动自动加载。 下图是Linux启动后自动加载的tfm_v2的gpio驱动。 ?...通过这次的总结,对Linux驱动的内核层与应用层要区分清楚,同时也加深对驱动程序编写流程的理解。

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

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

目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。...编写驱动程序 以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。...创建驱动目录和驱动程序 $ cd linux-4.15/drivers/ $ mkdir mygpio_driver $ cd mygpio_driver $ touch mygpio.c mygpio.c...> #include #include // GPIO 硬件相关宏定义 #define MYGPIO_HW_ENABLE // 设备名称...从代码中可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层中的 udev 服务,自动在 /dev 目录下创建了设备节点。

5K30

驱动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.../* linux/gpio.h */ int gpio_direction_output(unsigned gpio, int value) gpio: gpio编号,相关宏定义在linux/gpio.h

91720

Linux驱动开发: USB驱动开发

四、 linux内核下USB相关的API函数与数据结构 前面介绍了USB相关一些基础概念与重要的数据结构,接下来就分析在linux内核中如何编写一个USB 驱动程序,编写与一个USB设备驱动程序的方法和其他总线驱动方式类似...\n"); } //定义USB驱动结构体 static struct usb_driver usbtest_driver = { .name = "linux_usb_drv", .id_table...(中断传输方式) 5.1 USB驱动注册框架代码 #include #include #include /*...[root@wbyq linux-3.5]# make menuconfig 由于内核自带了usb鼠标驱动,所以需要去除: Device Drivers ---> HID support...#include /* 本程序为USB鼠标驱动程序,要安装本驱动,需要先将内核自带的USB驱动程序卸载掉 */ //定义USB的IDTAB 24ae:2002 static

69.6K20

gpio_key按键驱动

1.gpio_key.c介绍 1.1 功能介绍 Linux内核下的 drivers/input/keyboard/gpio_keys.c实现了一个体系结构无关的GPIO按键驱动,使用此按键驱动,只需在设备树...驱动的实现非常简单,但是较适合于实现独立式按键驱动。 1.2 架构介绍 gpio-keys是基于input架构实现的一个通用GPIO按键驱动。...该驱动基于platform_driver架构,实现了驱动和设备分离,符合Linux设备驱动模型的思想。本文以自己的理解介绍gpio_keys.c驱动实现原理及代码技巧。...2.设备树 设备树节点转化成device_node.gpio_keys. c与其他驱动一样采用platform总线架构,在设备树获取硬件相关属性。 Show me the code: ?...拿第一个设备节点解析: key_power { label = "Power Key"; //按键描述性名称 linux

3.3K30

高通GPIO驱动(DTS方式)

gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态; sysfs文件系统的建立可以参照下面的博客...2.1 直接操作GPIO: 因为GPIO一般都是平台设备驱动,一般设备树挂载的节点都可以在&soc下: 1 device_node { 2 ... 3...gpio_name = ; //gpio_99 4 ... 5 } 驱动代码: 1      int gpio_99 = of_get_named_gpio_flags...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

Linux系统驱动之使用GPIO模拟I2C的驱动程序分析

视频观看 百问网驱动大全 使用GPIO模拟I2C的驱动程序分析 参考资料: i2c_spec.pdf Linux文档 Linux-5.4\Documentation\devicetree\bindings...\i2c\i2c-gpio.yaml Linux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt Linux驱动源码 Linux...-5.4\drivers\i2c\busses\i2c-gpio.c Linux-4.9.88\drivers\i2c\busses\i2c-gpio.c 1....驱动程序分析 3.1 平台总线设备驱动模型 3.2 设备树 对于GPIO引脚的定义,有两种方法: 老方法:gpios 新方法:sda-gpios、scl-gpios 3.3 驱动程序分析 1....drain了 在驱动里不需要在设置为open drain 如果需要驱动代码自己去设置SDA为open drain,就不要提供这个属性 i2c-gpio,scl-open-drain: 它表示其他驱动

3.1K32

Linux驱动开发入门 demo

驱动开发时候,尽量选择对应操作系统内核的Linux系统作为上位机平台 下载源码与编译 源码的下载可以从网站:https://mirrors.edge.kernel.org/pub/linux/kernel...没有编译过的内核,驱动开发过程中进行编译可能有错误,找不到文件等。 编写一个最简单的驱动 如下是hello.c文件的驱动程序。其中声明了证书,和模块加载后与退出时应该执行的函数。...#include #include MODULE_LICENSE("Dual BSD/GPL"); static int hello_init...卸载命令为rmmod xxx 模块之间的依赖通信 以下为add_sub.c #include #include #include"add_sub.h...然后修改上层的Makefile文件,添加如下内容: obj-$(ADD_SUB) += add_sub_Kconfig/ 就可以在主目录下执行make menuconfig后,在驱动下找到对应的驱动和编译信息了

4.2K10

Linux应用开发【第九章】GPIO编程应用开发

文章目录 9 GPIO编程应用开发 9.1 GPIO编程基础介绍 9.2 GPIO编程软件接口 9.2.1 控制接口 9.2.2 GPIO信号 9.2.3 GPIO控制器 9.3 IMX6ULL开发GPIO...编号的确定 9.3.1 LED的GPIO编号计算 9.3.2 按键的GPIO编号计算 9.3.3 特殊情况下的GPIO编号计算 9.4 实际编程操作 9.4.1 导出GPIO口 9.4.2 设置GPIO...方向 9.4.3 GPIO输出实验-LED输出控制 9.4.4 GPIO输入试验-按键值读取 9.4.5 LED和按键控制实验 9 GPIO编程应用开发 9.1 GPIO编程基础介绍 ​ GPIO(General-Purpose...-1 ” label”属性,用于判断控制器,并不总是唯一的 9.3 IMX6ULL开发GPIO编号的确定 ​ 每个芯片可以有N组GPIO,每组GPIO最多有32个GPIO,即最多有N*32个GPIO...从上图可以看到,在IMX6ULL中,共有5组GPIO,起始GPIO组为GPIO1。因此在实际GPIO编号计算中,第一组GPIO1对应的编号为031。

1.4K30

【i.MX6ULL】驱动开发3——GPIO寄存器配置原理

前面的两篇Linux驱动文章,介绍了字符设备驱动的两种新旧开发方式,并使用一个虚拟的字符驱动来学习字符设备的开发的流程。...本篇起,就要来操作Linux开发板的硬件,首先当然是通过经典的点亮LED灯程序,来学习Linux IO口操作的字符设备开发流程。...同样,i.MX6ULL也有多种点灯方式: 裸机系统:汇编操作寄存器点灯、C语言操作寄存器点灯 跑Linux系统:字符驱动LED点灯、设备树驱动LED点灯 究其本质,最终都是要操作i.MX6ULL的寄存器...1 认识Linux开发板的GPIO口 首先要明确:IO与GPIO是两个概念,GPIO是属于IO的一部分。 IO: Input Output,用于CPU与外界进行信息交互。...该模式又包含了如下的属性配置: DSE 驱动能力配置:通过调整芯片内部与引脚串联电阻 R0 的大小,从而改变引脚的驱动能力。可以把R0的值配置为原值的1/2、1/3⋯1/7 等。

1.1K31

Linux驱动开发_块设备驱动开发(内存模拟存储)

一、前言 块设备驱动块是Linux下3大设备驱动框架之一,块设备主要是针对存储类型的设备设计的驱动,配合文件系统完成数据存储。...所以大致总结下:块设备驱动的目的是给Linux文件系统提供底层接口。 二、编写块设备驱动的思路 既然学到了驱动开发,了解到块设备开发。...在Linux下完成块设备驱动编写,主要是要完成来至文件系统的存储请求,文件系统让你把数据存到那个扇区,你驱动就去存,文件系统让你从那个扇区读取输出来,驱动就去读取。...那么为了方便介绍块设备的驱动开发,我这里会先用malloc在驱动申请一块内存来当做FLASH设备,这样就不需要接任何硬件,降低了难度,纯软件的方式理解驱动框架运作流程。...没有依赖于硬件,所以:可以在任何Linux下编译安装测试,完成块设备驱动的了解学习。

4.6K30
领券