自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 linux外设驱动实现专栏:各虚拟外设驱动代码实现集合

之前在对linux各子驱动系统的专栏分析中,已经实现了虚拟的外设驱动实现,可帮助想学习设备驱动且没有开发板的童鞋提供学习环境,目前实现的虚拟外设驱动均可在ubuntu16.04/ubuntu18.04上运行验证,本篇文章主要将这些虚拟外设驱动的实现整合在一起,方便查阅。 目前已完成了linux下i2c子系统、spi子系统、tty子系统、uart子系统、input子系统、hwmon子系统、gpio子系统、pwm子系统、led子系统、pinctrl子系统中虚拟设备的开发,可以帮助想...

2020-06-22 22:02:49 195

原创 Linux CommonClock Framework分析之四 gpio clk gate驱动实现

前面我们已经完成了CCF子系统的分析,也说明了如何实现CCF驱动,本章为该专栏的最后一篇文章,本章我们将实现一个虚拟的gpio clk gate驱动。本章大概分为如下几个章节:一、 本次驱动开发涉及的知识点二、clk provider driver的实现流程说明三、gpio clk gate driver驱动设计一、 本次驱动开发涉及的知识点本次驱动实践主要涉及如下几个方面的知识点:Platform device、platform drvier...

2020-08-04 23:33:38 43

原创 Linux CommonClock Framework分析之三 驱动开发流程说明

在上两篇文章中,我们简要介绍了CCF子系统内部的设计,并说明了CCF子系统内部数据结构的定义及关联。本篇文章主要介绍CCF子系统下驱动程序的开发,本章涉及如下三个方面的内容:一、clk注册与注销接口说明二、clk驱动开发流程三、clk使用流程四、依据clk provider用途封装的注册接口一、clk注册与注销接口说明 clk注册与注销接口分别为clk_register、clk_unregister,在上一章我们已经简要说过,c...

2020-08-02 00:39:07 17

原创 Linux CommonClock Framework分析之二 CCF子系统内部实现简述

上一章我们对CCF子系统进行了简述,本章我们将介绍CCF子系统内部设计,说明CCF子系统内部是如何实现的。我们主要从如下几点说明CCF子系统的内部设计流程:一、 CCF子系统内部数据结构的定义与关联二、CCF子系统提供的接口一、 CCF子系统内部数据结构的定义与关联 在我们学习linux内核各子系统模块时,通过其内部数据结构的定义及关联,即可大致掌握其实现过程及所需要提供的接口等等(本次分析CCF子系统是基于linux4.4内核的)。如下即为...

2020-08-01 12:35:15 23

原创 Linux CommonClock Framework子系统分析之一 系统概述

本专栏主要介绍linux的ccf子系统,主要用于系统clock的管理等操作。本专栏我们大概分为如下几章进行学习:一、CCF子系统概述二、CCF子系统数据结构分析及关联说明三、CCF子系统的clk注册与注销接口实现分析四、虚拟的clk设备驱动实现 本章我们主要进行CCF子系统的概述。大致说明下CCF的框架。以便我们后续深入的分析下CCF的实现机制。clk的种类说明如上图所示,时钟源大概可分为如下几种:提供基础时钟源的晶振(可分为有...

2020-07-26 16:29:25 34

原创 Linux 设备驱动模型的设备资源管理实现浅析

上一章我们分析了regmap子系统,本章我们讨论一下linux设备驱动模型的设备资源管理,linux设备资源管理虽然是一个小模块,却起到了一个很大的功能,那就是设备资源的自动释放功能。目前新版的内核中各设备驱动模块基本上都提供了基于设备资源管理的接口。 设备资源管理也可以理解为设备相关的资源垃圾回收功能,设备资源管理的实现虽然不复杂,却真的是解决了一个很大的问题,具体来说就是,在没有设备资源管理时,我们在设备驱动的probe接口中,需要进行内存的申请,并且各设备驱动模块自行维护申请...

2020-07-26 16:28:29 40

原创 Linux regmap子系统分析之三 regmap bus实例分析

在前面一章我们分析了regmap子系统的数据结构,基本上熟悉了数据结构的关联,也就大概理解了regmap子系统的实现流程,本章我们简要介绍下regmap子系统中接口的调用过程,然后介绍下regmap bus的实现及其提供的regmap的创建及注销接口。一、regmap子系统接口调用关系 针对regmap子系统提供的读写接口包含regmap_read、regmap_write、regmap_raw_read、regmap_raw_write等接口,此处我们主要说...

2020-07-26 16:26:27 34

原创 Linux regmap子系统分析之二 从数据结构分析系统实现

上一章我们简要分析了regmap子系统,本章我们将从regmap子系统的数据结构介绍regmap子系统的实现。一、数据结构间的关联及说明 针对regmap子系统,我们首先要知道regmap子系统要解决的痛点是什么?我们知道大多的传感器芯片(io扩展芯片、温度传感器、电源管理芯片、input设备、hwmon类型设备等等),基本上都是spi设备或者iic设备,而在这些设备的业务处理接口中充斥着大量的iic设备读写、spi设备读写的调用。另外有的设备厂家针对一款设备可能存在...

2020-07-26 16:25:21 28

原创 Linux regmap子系统分析之一 系统概述

由于最近工作有点忙,好久没有更新了(主要是懒…)。本周开始我们学习下regmap子系统的架构。本系统专栏主要涉及如下几个子章节:一、regmap子系统概述二、regmap子系统数据结构分析三、regmap子系统接口说明四、regmap bus实例说明(以i2c为例)本章我们主要对regmap子系统做一个简单的说明。涉及的内容如下:一、 regmap子系统的作用二、regmap子系统框架说明一、 regmap子系统的作用 在前面几个...

2020-07-19 23:44:27 36

原创 Linux regulator子系统分析之四 虚拟regulator device驱动实现
原力计划

在前面几章,我们分析了regulator子系统框架,主要是从数据结构及数据结构间的关联分析了regulator子系统。为了让大家对regulator子系统有一个深入的认识,我们本章将实现一个虚拟的regulator device驱动,从而掌握对regulator子系统的开发流程。 本章的主要内容分为如下几部分:一、 regulator device 驱动开发流程简要说明二、virt regulator device简要介绍三、virt regulator devic...

2020-07-04 19:08:20 134

原创 Linux regulator子系统分析之三 相关的接口说明

在上一章我们介绍了regulator子系统相关的数据结构间的关联以及每一个数据结构的定义。针对数据结构间的关联则需要regulator子系统提供的接口实现。而本章我们就说明这些接口。本章的章节如下:一、regulator device的注册与注销二、regulator的注册与注销(regulator device的使用者)三、regulator子系统提供的接口一、regulator device的注册与注销 针对regulator dev...

2020-07-04 19:04:46 56

原创 Linux regulator子系统分析之二 从数据结构理解系统实现
原力计划

上一章我们分析了regulator子系统的总体框架,本章我们将从数据结构入手,从而理解regulator子系统实现。 针对linux 内核各子系统学习而言,在理解了各子系统的实现背景后,再从数据结构入手,可快速理解其子系统的实现流程。因此本章我们从regulator子系统的数据结构入手,从而理解regulator子系统的实现。本章的提纲如下:一、数据结构间的关联说明二、各数据结构介绍一、数据结构间的关联说明 在上一章中,我们说明针对r...

2020-07-04 19:03:07 79

原创 Linux regulator子系统分析之一 总体概述

Linux regulator子系统主要用于管理电压、电流电源设备的电压、电流输入使能、动态调整电压、电流等,属于电源管理的一部分。从本章开始我们分析regulator子系统。主要分为如下几部分:一、regulator子系统总体概述二、regulator相关数据结构分析三、regulator相关注册、注销函数分析四、regulator设备驱动实现本章主要对regulator子系统进行简要说明。本章的内容主要包括:一、regulator子系统相关的...

2020-06-20 23:40:19 106

原创 Linux pinctrl子系统分析之七---一个虚拟pinctrl dev驱动开发实例
原力计划

这周主要对pinctrl子系统进行分析,该分析的基本上已经分析完成,唯一没有细说的估计就是gpio与pinctrl之间的关联了。本章即是pinctrl子系统分析的最后一章,本章我们主要实现一个虚拟的pinctrl device驱动,以便我们能够使用pinctrl子系统提供的接口,实现pinctrl device的驱动开发(本章实现的驱动代码可以在ubuntu18.04系统上正常运行)。本篇文章的目的如下:实现一个虚拟的pinctrl dev驱动,掌握pinctrl dev的驱动...

2020-06-14 07:29:27 104

原创 Linux pinctrl子系统分析之六 设备与pinctrl子系统的bind
原力计划

本章我们分析设备与pinctrl子系统的bind,在前面几章我们介绍了soc pin 描述相关的数据结构与注册接口、board pin 描述相关的数据结构与注册接口,但是我们却没有看到是在何时由谁实现对设备相关的引脚进行引脚复用与引脚配置的,而这些就是本章的内容。设备与pinctrl 子系统的bind 在前面我们说了,device是pinctrl的持有者,因此设备相关的引脚复用设置以及引脚配置均应由设备来进行控制,若由设备进行控制的话,难道由每个设备的驱动程序实现...

2020-06-14 07:24:53 113

原创 Linux pinctrl子系统分析之五 pinctrl map注册与注销

前面我们分析了pinctrl device的注册与注销接口。本章我们分析pinctrl maps的注册,pinctrl maps属于board pin描述相关的范畴。 针对pinctrl map的注册与注销主要涉及两方面:当内核不支持设备树时,则通过调用pinctrl_register_mappings、pinctrl_register_map接口实现pinctrl maps的注册; 当内核支持设备树时,则在设备与驱动match后,在设备驱动的probe...

2020-06-14 07:23:46 96

原创 Linux pinctrl子系统分析之四 pinctrl device的注册与注销
原力计划

前面我们分析了pinctrl子系统相关的数据结构等内容,本章我们分析pinctrl device的注册与注销接口。 针对pinctrl device的注册与注销主要涉及pinctrl_register、pinctrl_unregister、devm_pinctrl_register、devm_pinctrl_unregister这几个接口。而devm_pinctrl_register、devm_pinctrl_unregister这两个接口则主要由设备驱动模型实现资源申请与释放,即使用...

2020-06-10 23:44:55 134

原创 Linux pinctrl子系统分析之三 数据结构分析
原力计划

在上一章我们通过数据结构间的关联,说明了pinctrl子系统的软件框架。本章我们主要介绍每一个数据结构的定义,从而加深对pinctrl子系统相关的数据结构理解。本章我们依然从soc pin描述、board pin描述、设备模型与pinctrl关联三部分进行说明。Soc pin描述相关的数据结构 在之前两章我们也说明了pinctrl相关的概念,包括pin controller device、pinctrl dev相关的info描述(pinctrl d...

2020-06-10 23:43:44 90

原创 Linux pinctrl子系统分析之二 从数据结构关联理解pinctrl子系统

上一章我们对pinctrl子系统进行概述,说明了pinctrl子系统相关的概念、软件框架等内容,本章我们主要从pinctrl子系统数据结构间的关联,从而理解pinctrl子系统的设计。pinctrl数据结构说明 在上一章我们画出了pinctrl子系统的软件架构(如下图所示),而在linux内核的各子系统设计过程中,软件框架基本上就是由数据结构间关联以及对外接口实现子系统的设计,因此理解了一个子系统数据结构间的关联,基本上就掌握了一个子系统大致实现流程...

2020-06-08 21:07:59 136 3

原创 Linux pinctrl子系统分析之一 系统概述

前面我们已经分析了gpio子系统,从现在开始我们还是把pinctrl子系统学习一下吧,pinctrl子系统主要涉及引脚复用设置、引脚设置等操作。本专栏大概划分如下几个篇章:一、 pinctrl 子系统概述二、pinctrl 子系统相关的数据结构及关联三、pinctrl device的注册与注销四、pinctrl map的注册与注销五、pinctrl 引脚配置及复用六、pinctrl驱动实践(虚拟pinctrl device驱动实现)本篇是pinctrl子系...

2020-06-07 08:05:02 102

原创 Linux pwm子系统分析之二 gpio-pwm驱动实践
原力计划

在上面一章,我们介绍了pwm子系统的框架以及数据结构等内容,而pwm 子系统中pwm_chip的注册与注销接口也就是实现pwm_chip与pwm_device之间的关联,并将pwm_chip放入系统pwm_chip链表中,而这些接口实现也较简单,就没有展开说明。本章我们主要介绍如何实现一个pwm驱动,本章的目的如下:实现一个基于gpio的pwm chip驱动(即通过gpio模拟pwm); 为了让大家都可以验证该驱动,我们实现了一个虚拟的gpio controller驱动(在之前的lin...

2020-05-31 00:11:18 232

原创 Linux pwm子系统分析之一 系统框架说明

最近分析的几个子系统驱动,均通过sysfs下的目录及文件与子系统进行交互,今天我们顺带将pwm子系统也分析一下吧。在上一章中我们借助led子系统及gpio子系统,在led子系统下实现了针对led-gpio的gpio-pwm-trigger,因此本章我们稍微分析下pwm子系统。本章内容如下:一、 pwm子系统框架说明二、pwm相关数据结构说明三、pwm chip 驱动开发流程说明一、pwm子系统框架如下即为pwm子系统的系统框架,大致可以分为如...

2020-05-31 00:07:09 123

原创 Linux led子系统分析之三 led设备驱动与ledtrigger驱动实现
原力计划

在前面两章,我们介绍了led子系统的软件框架与数据结构,本章我们实现一个led设备驱动、ledtrigger,用于led子系统的驱动开发练习,本章的主要内容如下:一、led设备驱动开发流程二、led trigger驱动开发流程三、本次练习所涉及的开发内容说明四、led-gpio驱动开发说明五、led-trigger-pwm-gpio驱动开发说明六、验证说明一、led设备驱动开发流程针对led设备驱动,主要完成如下几步即可:初始化并设置一个...

2020-05-31 00:05:50 166

原创 Linux led子系统分析之二 led子系统软件架构及数据结构

上一章对led子系统进行了概述,本章我们主要分析led子系统软件架构及数据结构。led子系统涉及的数据结构不多,软件架构也相对简单,下面我们就简要说明一下。本章的主要内容如下:一、led子系统数据结构及关联二、led子系统相关数据结构说明一、led子系统实现说明针对led子系统,其实现主要分为三部分:led-trigger部分主要提供led触发器(或者led控制方法)的注册接口、led blink设置等; led-class部分主要完成le...

2020-05-31 00:04:23 142

原创 Linux led子系统分析之一 系统概述

从今天开始我们分析一下led子系统,该子系统主要实现对led设备的驱动和操作。led子系统和我们之前介绍的hwmon、gpio子系统有一个共同的特点,即借助sysfs创建一个设备相关的属性文件,可供应用程序借助sysfs方面的访问设备的属性。而针对led子系统的trigger模块实现而言,大多数的trigger也是借助sysfs进行trigger参数的配置(如亮灭时间设置、亮度设置等)。针对led子系统学习,主要涉及如下几方面的内容:一、led子系统概述二、led子系统软件架构...

2020-05-31 00:02:58 133

原创 Linux gpio 子系统分析之三 虚拟gpio控制器驱动实现
原力计划

在前面两章我们分析了gpio子系统的内容,主要包括gpio子系统内部架构,以及gpio子系统与其他内核子系统的关联等内容,主要主要介绍如何实现一个gpio控制器驱动。 一般来说,gpio控制器驱动一般都是soc厂商实现的,大多数驱动工程师并不需要实现gpio控制器驱动,但我们在开发过程中,当SOC自带的gpio引脚不够时,就可能用到扩展IO芯片来扩展GPIO(一般扩展IO芯片是IIC),当我们使用扩展IO芯片时,还是建议为该扩展IO实现gpio_chip,并注册至gpio子系统...

2020-05-31 00:01:13 304

原创 Linux gpio子系统分析之二 软件架构
原力计划

上一章大致对gpio子系统进行了说明,本章我们对gpio子系统的软件进行说明,本章的主要内容如下:一、gpio子系统相关数据结构及其关联说明二、gpio子系统相关接口说明gpio子系统相关数据结构及其关联说明 此处我们以linux3.10内核版本为例,该版本下gpio子系统涉及的数据结构相对比较简单,在新的版本下,加入了irqchip,支持了设备资源管理等内容。在linux3.10版本下gpio子系统主要涉及两个数据结构struct gpio_ch...

2020-05-30 23:57:45 111

原创 Linux gpio 子系统分析之一 系统概述

从今天开始我们将分析gpio子系统,gpio子系统相对来说比较简单GPIO子系统主要涉及如下内容(开启gpio子系统专栏的介绍,主要为了后面进行led子系统的分析,在led子系统的分析时,我们会借助一个虚拟的gpio控制器驱动说明led-trigger以及gpio-led代码的实现,因涉及虚拟gpio控制器的实现,因此先介绍gpio子系统,以便后续分析led子系统时能更好的说明清除)。 一、GPIO子系统概述 二、GPIO子系统相关数据结构以及接口说明...

2020-05-30 23:56:01 102

原创 Linux hwmon 子系统分析之三 新版本hwmon子系统说明

上一篇文章我们实现了一个模拟的hwmon device,且针对该hwmon device的属性访问操作均是借助sysfs file(我们创建了4个通道温度的sysfs文件temp1_input、temp2_input…),而sysfs file则是我们的虚拟驱动程序借助我们创建device_attribute实现的,然后进行了hwmon_device的注册,相对而言hwmon子系统倒没有提供太多的帮助,而在linux 4.x的版本(4.14已经支持)中,则对hwmon子系统中进行了丰富,针对te...

2020-05-30 23:52:32 249

原创 Linux hwmon子系统分析之二 hwmon driver开发实践
原力计划

在上一篇文章中,我们分析了hwmon子系统框架。针对hwmon子系统而言,在linux内核4.4及之前版本中,hwmon子系统核心功能并不多,仅仅是创建一个device类型的变量,并加入到class hwmon中,而linux 内核4.14及之后版本,针对hwmon子系统做了很多的强化,定义了统一的show/store接口,而具体的hwmon driver只需要实现hwmon_chip_info、hwmon_channel_info、hwmon_ops类型的变量,并实现对应的read/write接.

2020-05-30 23:44:54 277

原创 Linux hwmon子系统分析之一 系统框架说明

从本章开始,我们进行hwmon子系统的分析,hwmon即hardware monitoring framework,硬件监视框架,包括温度传感器、风扇、电源等器件驱动的框架。hwmon子系统主要借助sysfs提供的api接口,实现对硬件监控器件的通信,也就是借助sysfs的文件创建的机制实现应用程序与hwmon器件的通信操作。本系统主要规划如下几篇文章:一、框架说明二、hwmon 子系统详细说明三、一个hwmon 设备驱动的实现(通过实现一个虚拟的hwmon设备驱动)...

2020-05-30 23:38:26 232

原创 Linux input子系统分析之五 从一个虚拟input device驱动掌握input device驱动开发

在前面几章,我们分析了input子系统的框架,以及input handler的注册与实现,本章我们通过一个虚拟的input device驱动,说明如何开发一个input device驱动。本章涉及的内容如下:Platform device、driver的使用 Input device的注册与注销; sysfs下属性文件的注册与注销。一、input device驱动开发流程针对input device的驱动开发主要涉及如下几个开发步骤:调用input_allocate_...

2020-05-30 23:36:04 130

原创 Linux input子系统分析之四 input handler驱动实例evdev分析
原力计划

在前面几章我们介绍了input子系统的实现,针对input子系统而言,主要就包括input handler、input handle、input device这三种逻辑抽象,而在input子系统中input handler与input device是多对多的联系(而在设备驱动模型中,一般设备与驱动时1对多的关联)。本章我们将通过一个input handler实例,理解input handler驱动的实现流程。我们选用evdev进行分析。本章的主要内容如下:一、input han...

2020-05-30 23:32:05 75

原创 Linux input子系统分析之三 input device/handler注册与注销分析
原力计划

上一章我们分析了input子系统主要的数据结构,本章我们主要分析input hander、input device、input handle的注册与注销。本章的主要内容如下:一、input device的注册与注销说明二、input handler的注册与注销说明三、input handle的注册与注销说明四、input事件分发说明 在分析input device、input handler、input handle的注册与注销时,我们还是看下这些数据结构...

2020-05-30 23:29:05 39

原创 Linux input子系统分析之二 相关数据结构及其关联说明
原力计划

在上一章我们介绍了input子系统的总体框架,本章则主要说明input相关的数据结构结构,以及这些数据结构之间的关联。对于linux内核而言,只要我们理解了其数据结构之间的关联,基本上也就大致了解其子系统的实现。一、input子系统数据结构及其关联 针对input子系统而言,其数据结构主要包括input_device、input_handler、input_handle,其中input_dev用于对一个input device的抽象,而一个input_handler则可...

2020-05-30 23:23:32 220

原创 Linux input 子系统分析之一 总体框架说明

从今天开始我们进行linux input子系统内容的分析,针对linux子系统,涉及字符设备、input device、input handler,还可能涉及我们之前介绍的tty子系统。针对input子系统专栏,我们大致划分如下几个方面:一、linux input子系统软件架构说明二、input相关字符设备驱动分析三、input device分析四、input ha...

2020-04-29 23:14:58 91

原创 linux虚拟串口控制器驱动开发及代码实现(uart driver)
原力计划

在上一章我们已经说明了uart驱动的开发流程,本章我们就不再介绍uart相关的接口实现,仅通过实现一个虚拟的串口控制器程序,用以说明虚拟串口的开发流程。本次开发的虚拟串口提供的功能如下:提供两个串口实例 串口名称的前缀为vttyU 为了验证串口收发,提供了loopback机制,即应用程序向虚拟串口写入数据后,数据再回环至应用程序; 在/sys目录下提供数据写入属性文件,...

2020-04-29 23:14:01 214 2

原创 linux串口子系统设备及端口注册及注销接口说明
原力计划

上一章我们介绍了串口的数据结构,本章我们介绍串口相关的操作接口,并介绍串口的注册与注销接口,本章主要包括如下几个方面的内容:串口控制器、串口的注册与注销 既然串口子系统是对tty子系统的封装,因此其注册与注销也同样包括tty_driver、tty_port两部分。在之前阅读tty子系统时,我们可以发现真正实现读写tty端口的操作全部是由tty_dri...

2020-04-29 23:12:03 84

原创 Linux 串口子系统框架的总体说明
原力计划

在前面几个章节,我们学习了tty子系统,并借助tty子系统完成了一个虚拟串口控制器驱动,并增加了两个虚拟串口。而在串口子系统中,为了让串口的开发更加简单,串口子系统又进行了一层框架搭建,构建了串口子系统,本章我们就介绍串口子系统框架。 老规矩,在了解一个子系统之前,我们先熟悉其数据结构及数据结构间的关联,这可有助于我们快速理解该子系统的大致结构,所要实现...

2020-04-29 23:08:50 127

原创 linux虚拟串口控制器实现---适用于无开发板学习tty driver
原力计划

在前面几章,我们介绍了tty子系统的框架、数据结构、tty驱动的注册与注销等内容,本章我们借助之前学习的内容开发一个虚拟的串口控制器驱动,以便我们理解开发串口驱动的步骤及驱动开发实践。 本次实现的虚拟串口主要是借助tty_register_driver、tty_port_register_device实现,而不是借助uart_register_driver、uar...

2020-04-29 23:06:54 103 1

提示
确定要删除当前文章?
取消 删除