自定义博客皮肤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 1971

原创 LINUX epoll实现原理介绍

好久没有更新了,今天更新一篇epoll的介绍文档,后续继续更新linux 设备驱动。针对linux支持select、poll、epoll等IO多路复用机制,本篇文章主要介绍epoll的实现原理。本篇文章主要分为如下几部分:Epoll api接口说明; epoll内核层实现原理说明(eventpoll)。Epoll api接口说明epoll向应用层提供三个api接口,分别为epoll_create、epoll_ctrl、epoll_wait,下面分别说明这三个接口的用处。...

2022-02-28 23:35:41 1603

原创 Linux V4l2子系统专栏之一 子系统概述

从本章开始,我们开始分析V4L2子系统(Video for Linux two),主要用于音视频设备的框架。V4l2主要用于驱动视频输出设备(video outpt interface)、Video overlay interface、Video output overlay device、VBI interface、Radio interface等。本专栏主要分为如下几章:一、LINUX V4L2子系统概述二、LINUX V4L2相关数据结构说明三、LINUX video d...

2020-10-25 23:47:44 1575 5

原创 LINUX IIO子系统分析之七 虚拟iio device驱动实现

前面几章我们基本完成了IIO子系统的所有内容,而该章即为本专栏的结束篇,主要用来实现一个虚拟的IIO DEVICE DRIVER,本章的内容主要包括如下几部分:一、 虚拟IIO DEVICE的说明二、虚拟IIO DEVICE DRIVER实现所需的知识点三、虚拟IIO DEVICE DRIVER的数据结构及实现说明四、虚拟IIO DEVICE DRIVER的测试验证一、 虚拟IIO DEVICE的说明本次我们将实现一个虚拟的温度传感器...

2020-09-05 00:06:26 3399

原创 LINUX IIO子系统分析之六 iio device的驱动开发流程说明

前面五章我们基本上把IIO 子系统的内部设计实现均作了说明,本章我们将说明iio device的驱动开发流程,本章的主要内容大致安排如下:一、IIO子系统的关键技术点总结二、IIO DEVICE的注册与注销接口说明三、IIO DEVICE的驱动开发流程一、IIO子系统的关键技术点总结 以上几篇文章已经对IIO子系统的设计实现做了大致说明,IIO子系统主要使用如下几个关键技术点实现其主要功能:借助sysfs、kobject机制,实现IIO D...

2020-09-04 22:29:19 5406

原创 LINUX IIO子系统分析之五IIO BUFFER子模块实现分析

上一章我们介绍了iio子系统中的iio event模块,本章我们将介绍iio buffer模块,iio buffer主要用于连续数据采集与缓存功能。IIO buffer模块借助IIO DEVICE字符设备文件与应用程序通信,同时借助iio trigger模块与iio device进行交互,因此本章内容分为如下几部分:一、 IIO DEVICE字符设备文件操作接口二、iio buffer相关数据结构三、IIO trigger-buffer介绍四、IIO b...

2020-09-03 22:21:21 3907

原创 LINUX IIO子系统分析之四 IIO EVENT介绍

上一章我们介绍了iio子系统中的iio trigger模块,本章我们将介绍iio event模块,iio event主要用于阈值监测、自由落体监测等监测功能。因为IIO EVENT涉及IIO DEVICE字符设备文件操作,因此本章内容主要分为如下几部分:一、 IIO DEVICE字符设备文件操作接口二、IIO EVENT设计分析三、IIO EVENT相关接口说明一、 IIO DEVICE字符设备文件操作接口 在IIO 子系统中,每一个IIO...

2020-08-31 23:57:46 3263 1

原创 LINUX IIO子系统分析之三 IIO TRIGGER设计实现分析

上一章我们分析了IIO子系统的数据结构定义,本章我们主要介绍IIO TRIGGER的设计实现,主要内容如下:一、数据结构简述二、设计实现说明三、提供接口说明一、数据结构简述这两个数据结构主要实现iio 的trigger机制,类似于led子系统的led trigger。主要内容如下:id表示trigger的id、name为名称; 该iio trigger也使用struct device类型的变量加入到iio总线上,iio trigger与iio...

2020-08-30 16:15:54 3555

原创 LINUX IIO子系统分析之二 IIO子系统相关数据结构分析

上一章我们简要说明了IIO子系统的架构,本章我们通过数据结构的定义,分析IIO子系统的设计实现,本章的主要内容如下:一、IIO子系统各数据结构说明二、数据结构间的关联说明一、IIO子系统各数据结构说明在上一章我们大概说明了IIO子系统的框架,IIO子系统大概包含几个主要的部分,此处我们再说明一下:对于连续数据采集相关功能,主要由iio buffer实现; 连续数据采集的触发机制,主要由iio trigger实现; Iio device的事件触发机制,主要由i...

2020-08-30 14:41:27 4219 3

原创 LINUX IIO子系统分析之一 IIO子系统概述

从本章开始,我们进行IIO子系统专栏的分析文档,本次IIO子系统专栏分析文档大概包含如下几章:一、 IIO子系统概述二、IIO子系统相关数据结构分析三、iio trigger 介绍四、iio event介绍五、iio buffer介绍六、iio device的注册与注销介绍七、iio trigger驱动实现八、虚拟iio device驱动实现一、IIO子系统介绍 本章我们对IIO子系统做一个简单的概述,IIO子系统主要提供对ADC、DAC相关...

2020-08-23 08:18:20 7125 1

原创 LINUX 中断 子系统专栏之二 虚拟中断控制器驱动实现

在上一篇文章中,我们简要分析了中断子系统框架,本章我们将通过实现一个虚拟的中断控制器驱动,说明如何进行中断控制器驱动开发。本章的内容大概分为如下几部分:一、实现虚拟中断控制器的可行性说明二、中断控制器驱动的开发流程三、虚拟中断控制器驱动设计说明一、实现虚拟中断控制器的可行性说明 在进行虚拟中断控制器的设计之前,我们先说明下linux系统中硬件中断触发后的处理过程。如下图所示,当硬件中断触发后,各架构的CPU板级代码经过处理后,大都会调用do_IRQ...

2020-08-16 23:22:03 1603

原创 LINUX 中断子系统专栏之一 子系统架构简述

之前在做spi、iic等虚拟设备驱动时,就在思考如何开发虚拟的irq controller驱动,因为完成虚拟irq controller驱动后,进行虚拟外设驱动开发时,就可以使用irq。因此这周就简要介绍irq子系统框架,然后再开发一个虚拟的irq controller driver 。针对irq 子系统专栏,主要包括如下两部分内容:一、IRQ子系统框架简述简要说明IRQ子系统的框架及相关数据结构。二、虚拟IRQ CONTROLLER DRIVER实例本篇主要是IR...

2020-08-16 08:51:14 951

原创 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 986

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

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

2020-08-02 00:39:07 1086

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

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

2020-08-01 12:35:15 966

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

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

2020-07-26 16:29:25 939

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

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

2020-07-26 16:28:29 781

原创 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 1728

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

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

2020-07-26 16:25:21 982

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

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

2020-07-19 23:44:27 2168

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

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

2020-07-04 19:08:20 1050

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

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

2020-07-04 19:04:46 1523 1

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

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

2020-07-04 19:03:07 1344

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

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

2020-06-20 23:40:19 2151

原创 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 1213

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

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

2020-06-14 07:24:53 1612 1

原创 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 1374

原创 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 1489 1

原创 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 2312 2

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

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

2020-06-08 21:07:59 1643 5

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

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

2020-06-07 08:05:02 2196 1

原创 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 3585 6

原创 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 1901

原创 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 3126

原创 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 789

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

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

2020-05-31 00:02:58 1052

原创 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 2088

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

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

2020-05-30 23:57:45 1252

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

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

2020-05-30 23:56:01 1237

原创 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 4039 3

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