gpio 和 pinctrl 子系统在内核里的使用率非常高,和嵌入式产品的关联非常大。从这两个子系统开始学习驱动开发是个不错的入门选择。...本文目录: 一、gpio 与 pinctrl 二、内核里如何引用 gpio 三、gpio 子系统框架 四、应用层如何访问 gpio 一、gpio 与 pinctrl 本文主要关注 gpio 子系统,但是老吴认为必要先说明一下...pinctrl 子系统和 gpio 子系统的之间关系。...列举一些使用了gpio子系统的常见驱动,例如 leds-gpio.c、gpio_keys.c 等 legacy.rst 描述 legacy gpio 接口 注:本文基于 Linux-4.19。...Linux-4.19 Documentation Linux Device Drivers Development / GPIO Controller Drivers
视频观看 百问网驱动大全 16.2 GPIO子系统重要概念 16.2.1 引入 要操作GPIO引脚,先把所用引脚配置为GPIO功能,这通过Pinctrl子系统来实现。...在驱动代码中: 使用GPIO子系统的标准函数获得GPIO、设置GPIO方向、读取/设置GPIO值。 这样的驱动代码,将是单板无关的。...16.2.3 在驱动代码中调用GPIO子系统 在设备树中指定了GPIO引脚,在驱动代码中如何使用? 也就是GPIO子系统的接口函数是什么?...驱动程序中要包含头文件, #include linux/gpio/consumer.h> // descriptor-based 或 #include linux/gpio.h>...比如在Linux开发过程中,先申请了GPIO,再申请内存;如果内存申请失败,那么在返回之前就需要先释放GPIO资源。
视频观看 百问网驱动大全 GPIO子系统与Pinctrl子系统的交互 参考资料: Linux 5.x内核文档 Linux-5.4\Documentation\driver-api Linux-5.4...\Documentation\devicetree\bindings\gpio\gpio.txt Linux-5.4\drivers\gpio\gpio-74x164.c Linux 4.x内核文档...Linux-4.9.88\Documentation\gpio Linux-4.9.88\Documentation\devicetree\bindings\gpio\gpio.txt Linux-...,假设在GPIO子系统中全局编号为100103 GPIO1内部引脚编号为03,假设在GPIO子系统中全局编号为104107 假设我们要使用pin1_1,应该这样做: 根据GPIO1的内部编号1,可以换算为...GPIO调用Pinctrl的过程 GPIO子系统中的request函数,用来申请某个GPIO引脚, 它会导致Pinctrl子系统中的这2个函数之一被调用:pmxops->gpio_request_enable
视频观看 百问网驱动大全 GPIO子系统视频介绍 参考资料: Linux 5.x内核文档 Linux-5.4\Documentation\driver-api Linux-5.4\Documentation...\devicetree\bindings\gpio\gpio.txt Linux 4.x内核文档 Linux-4.9.88\Documentation\gpio Linux-4.9.88\Documentation...预计录制的内容 使用GPIO子系统要掌握的重要概念 基于GPIO子系统的LED驱动程序 LED驱动程序上机实验(分为多个单板) GPIO子系统层次与数据结构 具体单板上GPIO子系统源码分析(分为多个单板...) 编写一个GPIO扩展芯片的驱动程序 GPIO子系统与Pinctrl子系统的交互 GPIO子系统的sysfs接口 结构 具体单板上GPIO子系统源码分析(分为多个单板) 编写一个GPIO扩展芯片的驱动程序...GPIO子系统与Pinctrl子系统的交互 GPIO子系统的sysfs接口
通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。...GPIO接口定义了操作GPIO管脚的标准方法集合,包括:设置管脚方向: 方向可以是输入或者输出(暂不支持高阻态)读写管脚电平值: 电平值可以是低电平或高电平设置管脚中断服务函数:设置一个管脚的中断响应函数...,以及中断触发方式使能和禁止管脚中断:禁止或使能管脚中断GPIO接口定义在base/iot_hardware/peripheral/interfaces/kits/iot_gpio.h文件中接口说明功能分类...设置管脚上拉/下拉 使用指导使用流程GPIO标准API通过GPIO管脚号来操作指定管脚,使用GPIO的一般流程如下所示。...确定GPIO管脚号GPIO管脚号需要结合开发板的电路图来确定,具体开发板电路原理图的资料需要从开发板厂商获取。
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 GPIO子系统的sysfs接口 参考资料: 1....常用的SYSFS文件 2.1 有哪些GPIO控制器 /sys/bus/gpio/devices目录下,列出了所有的GPIO控制器,如下表示有11个GPIO控制器: /sys/bus/gpio/devices...gpio/devices/gpiochip10 2.2 每个GPIO控制器的详细信息 /sys/class/gpio/gpiochipXXX下,有这些信息: /sys/class/gpio/gpiochip508...确定GPIO编号 查看每个/sys/bus/gpio/devices/gpiochipXXX目录下的label,确定是你要用的GPIO控制器,也称为GPIO Bank。
本文讲解 pinctrl 子系统和 gpio 子系统的 API,以及使用示例。 传统的配置 pin 的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问题(比如 pin 功能冲突)。...如果 pinctrl 将一个 pin 脚初始化为 GPIO 而不是 IIC 或者 SPI,那么接下来就可以使用 gpio 子系统的API。 gpio 子系统是基于 pinctrl 子系统的!...(pinctrl 的 api 其实可以实现所有需求,但 gpio 的函数更常用一些) 1、gpio 子系统 API gpio 子系统中操作一个 GPIO 需要如下几步: 1、of_find_compatible_node...gpio.c #include linux/init.h> #include linux/kernel.h> #include linux/module.h> #include linux/gpio.h...2、pinctrl 子系统 API pinctrl 子系统的 API 有很多,对于驱动工程师来说,pinctrl 操作一个 GPIO 只需要三步: 1、devm_pinctrl_get 2、pinctrl_lookup_state
所以本次开发驱动的GPIO引脚是GPIO5。...isr demo -----\r\n"); IoTGpioInit(IOT_GPIO_IO_GPIO_9); IoTIoSetFunc(IOT_GPIO_IO_GPIO_9, HI_IO_FUNC_GPIO..._9_GPIO); IoTGpioSetDir(IOT_GPIO_IO_GPIO_9, IOT_GPIO_DIR_OUT); IoTGpioSetOutputVal(IOT_GPIO_IO_GPIO..._9, IOT_GPIO_VALUE0); //初始化GPIO5引脚 IoTGpioInit(IOT_GPIO_IO_GPIO_5); IoTIoSetFunc(IOT_GPIO_IO_GPIO..._5, HI_IO_FUNC_GPIO_5_GPIO); IoTIoSetPull(IOT_GPIO_IO_GPIO_5, IOT_IO_PULL_UP); IoTGpioSetDir(IOT_GPIO_IO_GPIO
视频观看 百问网驱动大全 GPIO子系统层次与数据结构 参考资料: Linux 5.x内核文档 Linux-5.4\Documentation\driver-api Linux-5.4\Documentation...\devicetree\bindings\gpio\gpio.txt Linux-5.4\drivers\gpio\gpio-74x164.c Linux 4.x内核文档 Linux-4.9.88...\Documentation\gpio Linux-4.9.88\Documentation\devicetree\bindings\gpio\gpio.txt Linux-4.9.88\drivers...GPIO子系统的层次 1.1 层次 1.2 GPIOLIB向上提供的接口 descriptor-based legacy 说明 获得GPIO gpiod_get gpio_request gpiod_get_index...2.3 gpio_desc 我们去使用GPIO子系统时,首先是获得某个引脚对应的gpio_desc。 gpio_device表示一个GPIO Controller,里面支持多个GPIO。
Linux下针对引脚有2个重要的子系统:GPIO、Pinctrl。 1.Pinctrl子系统重要概念 1.1 引入 无论是哪种芯片,都有类似下图的结构: ?...子系统重要概念 2.1 引入 要操作GPIO引脚,先把所用引脚配置为GPIO功能,这通过Pinctrl子系统来实现。...2.3 在驱动代码中调用GPIO子系统 在设备树中指定了GPIO引脚,在驱动代码中如何使用? 也就是GPIO子系统的接口函数是什么?...驱动程序中要包含头文件, #include linux/gpio/consumer.h> // descriptor-based 或 #include linux/gpio.h> // legacy...比如在Linux开发过程中,先申请了GPIO,再申请内存;如果内存申请失败,那么在返回之前就需要先释放GPIO资源。
本篇介绍的Pinctrl子系统与GPIO子系统的方式,不需要再直接操作寄存器了,因为这两个子系统已经替我们实现了对寄存器的操作,我们只需要操作这两个子系统提供的API函数即可。...1 Pinctrl子系统 Pintrl子系统,顾名思义,就是管理pin引脚的一个系统,比如要点亮LED,即要控制LED对应引脚的高低电平,就要先通过Pintrl子系统将LED对应的引脚复用为GPIO功能...子系统 GPIO子系统,顾名思义,就是管理GPIO功能的一个系统,其作用是初始化配置GPIO(这一点是不是和之前寄存器配置时使用的PAD寄存器的功能有点像),并提供对外的API接口。...使用GPIO子系统后,就不需要自己操作寄存器,通过调用GPIO子系统提供的API函数即可实现对GPIO的控制。...头文件需要添加一个: #include linux/of_gpio.h> 设备结构体改为gpio_led: /* gpioled设备结构体 */ struct gpioled_dev{ dev_t
/types.h> 15 #include linux/delay.h> 16 #include linux/platform_device.h> 17 #include linux/init.h...> 18 #include linux/input.h> 19 #include linux/irq.h> 20 #include linux/interrupt.h> 21 #include...linux/jiffies.h> 22 #include linux/module.h> 23 #include linux/gpio.h> 24 #include linux/input...97 disable_irq_nosync(gpio_to_irq(pdata->row_gpios[i])); 98 } 99 使用input子系统的一般流程为...: input_allocate_device()申请一个input_dev设备――> 初始化该input_dev――> input_register_device()向子系统注册该设备――> 中断时input_event
一文搞懂 | Linux 时钟子系统 Clock 时钟就是 SoC 中的脉搏,由它来控制各个部件按各自的节奏跳动。比如,CPU主频设置,串口的波特率设置,I2S的采样率设置,I2C的速率设置等等。
2、概述 led 子系统驱动框架: 所有 led 共性: 有和用户通信的设备节点 亮和灭 不同点: 有的 led 可能是接在 gpio 管脚上,不同的 led 有不同的 gpio 来控制 有的 led...可能由其他的芯片来控制(节约 cpu 的 pin,或者为了控制 led 的电流等) 可以设置亮度 可以闪烁 所以 Linux led 子系统把所有 led 的共性给实现了,把不同的地方留给驱动工程师去做...led 子系统核心文件: driver/leds/led-class.c driver/leds/led-core.c driver/leds/led-triggers.c include/linux/...led 子系统是一个简单的 Linux 子系统 ,在目录 /sys/class/leds 下展示该子系统设备,每个设备都有自己的属性: brightness:设置 LED 亮度,范围 0 ~ max_brightness...,可以直接参考 /drivers/leds/leds-gpio.c
这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 设备的时候,为此引入了 Regmap 子系统。...Linux 下使用 i2c_transfer 来读写 I2C 设备中的寄存器,SPI 接口的话使用 spi_write/spi_read等。...I2C/SPI 芯片又非常的多,因此 Linux 内核里面就会充斥了大量的 i2c_transfer 这类的冗余代码,再者,代码的复用性也会降低。...regmap 是 Linux 内核为了减少慢速 I/O 在驱动上的冗余开销,提供了一种通用的接口来操作硬件寄存器。...Linux 内核提供了针对不同接口的 regmap 初始化函数。
rtc 一般负责系统关机后计时、闹钟等,Linux 内核提供了一个 rtc 子系统,来支持所有的 rtc 设备。...rtc 设备本质上是一个字符设备,rtc 子系统在字符设备的基础上抽象与硬件无关的部分,并在这个基础上拓展 sysfs 和 proc 文件系统下的访问。...rx8010_set_alarm rx8010_set_time 软件逻辑就不在这里赘述了,大家可以参考下面链接 https://jasper1024.com/jasper/c089e4b/ 大家多看几个 Linux...子系统就会发现,基本上每个子系统都差不多,Linux 都会封装上中下 3 层,然后给你一些数据结构让你填充,就可以将这个子系统用起来了。
Linux 内核为了管理这些日益增多的 ADC 类传感器,特地推出了 IIO 子系统,我们学习如何使用 IIO 子系统来编写 ADC 类传感器驱动。...1、IIO 子系统简介 IIO 全称是 Industrial I/O,翻译过来就是工业 I/O,大家不要看到“工业”两个字就觉得 IIO 是只用于工业领域的。...大家一般在搜索 IIO 子系统的时候,会发现大多数讲的都是 ADC,这是因为 IIO 就是为 ADC 类传感器准备的,当然了 DAC 也是可以的。...1、iio_dev 结构体 IIO 子系统使用结构体 iio_dev 来描述一个具体 IIO 设备,此设备结构体定义在include/linux/iio/iio.h 文件中 2、iio_dev 申请与释放...Linux 内核使用 iio_chan_spec 结构体来描述通道,定义在 include/linux/iio/iio.h 文件中。
2 模块介绍 Pinctrl 框架是 linux 系统为统一各 SoC 厂商 pin 管理,避免各 SoC 厂商各自实现相同 pin 管理子系统而提出的。目的是为了减少 SoC 厂商系统移植工作量。...• 与 gpio 子系统的交互 • 实现 pin 中断 2.2 相关术语介绍 表 2-1: Pinctrl 模块相关术语介绍 术语 解释说明 SUNXI Allwinner 一系列 SOC 硬件平台...因此管脚控制器子系统需要一个机制用来枚举管脚组且检索一个特定组中实际枚举的管脚 Pinconfig 管脚可以被软件配置成多种方式,多数与它们作为输入/输出时的电气特性相关。...linux-5.4 已经标准化该接口,直接采用 enum of_gpio_flags 的定义。...-5.4,则应该为gpios = GPIO_ACTIVE_HIGH>; linux,input-type = "1>"; linux
8)底层的时钟、稳压器、频率/电压表(OPP模块完成)支撑,各驱动子系统都可能用到。...1、CPUFreq 驱动 CPUFreq 子系统位于 drivers/cpufreq 目录下,负责进行运行过程中 CPU 频率和电压的动态调整,即 DVFS(Dynamic Voltage Frequency...6、Regulator 驱动 Regulator是Linux系统中电源管理的基础设施之一,用于稳压电源的管理,是各种驱动子系统中设置电压的标准接口。...Linux的Regulator子系统提供如下API以用于注册/注销一个稳压器: structregulator_dev * regulator_register(conststructregulator_desc...Linux运行时PM最早是在Linux2.6.32内核中被合并的。
今天分享一篇经典Linux协议栈文章,主要讲解Linux网络子系统,看完相信大家对协议栈又会加深不少,不光可以了解协议栈处理流程,方便定位问题,还可以学习一下怎么去设计一个可扩展的子系统,屏蔽不同层次的差异...目录 Linux网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API...中TCP,UDP协议包在网络子系统中的实现流程。...创建ksoftirqd内核线程 linux内核通过调用subsys_initcall来初始化各个子系统,在源代码目录里你可以grep出许多对这个函数的调用。...网络子系统的分层 Linux网络子系统实现需要: 支持不同的协议族 ( INET, INET6, UNIX, NETLINK…) 支持不同的网络设备 支持统一的BSD socket API 需要屏蔽协议
领取专属 10元无门槛券
手把手带您无忧上云