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

     最近分析的几个子系统驱动,均通过sysfs下的目录及文件与子系统进行交互,今天我们顺带将pwm子系统也分析一下吧。在上一章中我们借助led子系统及gpio子系统,在led子系统下实现了针对led-gpio的gpio-pwm-trigger,因此本章我们稍微分析下pwm子系统。本章内容如下:

一、 pwm子系统框架说明

 

二、pwm相关数据结构说明

 

三、pwm chip 驱动开发流程说明

 

 

一、pwm子系统框架

 

如下即为pwm子系统的系统框架,大致可以分为如下几个方面:

  1. pwm子系统接口层,提供pwm的request、free(类似于gpio_request、gpio_free);pwm的使能与去使能;pwm 配置(配置pwm的占空比等)等接口
  2. 上面pwm子系统接口层通过pwm号在pwm_tree基数树中找到对应的pwm_device(所有注册的pwm device均会添加至pwm_tree中,另外一个pwm_chip可包含多个pwm_device,因此pwm_chip与pwm_device之间也存在关联),并借助pwm_chip提供的方法配置pwm控制器,实现pwm配置等操作;
  3. pwm_chip层主要对应一个pwm控制器,一个pwm控制器可包含多个pwm_device,针对一个pwm_chip,提供了访问pwm 控制器的方法,通过pwm_chip提供的方法,实现对pwm 控制器的配置;
  4. pwm器件即是对应的pwm控制器。

 

        以上即为pwm子系统的框架,另外pwm子系统也借鉴了gpio子系统的实现流程(export、unexport)。针对pwm_chip,也借助device子系统以及sysfs子系统接口,为注册的pwm_chip对应struct device类型成员实现export、unexport属性(即sys下文件,如/sys/class/pwm/pwmchipX/export文件),而应用程序通过将该pwm chip对应的pwm号设置到export中,则export对应的store函数即会为该pwm device创建对应struct device类型变量,并为该device变量创建duty、period_ns、enable等属性参数,从而应用程序即可实现pwm的控制(这个和操作gpio是一样的)。

 

二、pwm相关数据结构说明

      上面说明了pwm 子系统的框架,本小节主要从数据结构、接口说明pwm子系统是如何实现上述一中所说的框架的。如下图,pwm子系统对外提供系统接口,供内核其他子系统调用。下面我们分析说明:

 

  1. pwm子系统接口提供了pwm的使能、去使能、pwm配置(占空比、频率等属性);
  2. 上述1中的接口一般传递pwm device或者pwm号,获取到pwm device,而pwm device中则包含指向其pwm_chip的指针,从而找到pwm chip,并通过pwm chip的ops接口,实现与pwm控制器的通信;
  3. pwm chip中主要包括该pwm chip的pwm base index、pwm num、pwm 操作接口(enable、disable、pwm config、pwm request、pwm free),这基本上和gpio子系统中gpio_chip的成员类似;
  4. pwm_ops主要包括enable、disable、pwm config、pwm request、pwm free这几个接口。

 

     如下即为这几个数据结构的关联,此处不对数据结构中每一个成员做详细说明,该子系统相对来说还是和gpio 子系统很像的。

 

 

三、pwm chip 驱动开发流程说明

Pwm chip驱动的开发流程相对也比较简单,下面简要说明:

  1. 创建platform device,用于存储该pwm chip相关的配置参数,如pwm base index、pwm num、pwm操作相关的寄存器参数等等;
  2. 创建platform driver,在该driver的probe接口中完成pwm chip的注册,主要包括:
    1. 申请struct pwm_chip类型的内存空间;
    2. 实现struct pwm_ops中各成员接口,主要实现与pwm 控制器的通信;
    3. 调用pwmchip_add,完成pwm chip的添加。

实现以上几步,即可完成pwm chip的注册。

 

 

      本章主要介绍pwm chip的框架,包括数据结构关联、pwm chip的驱动开发流程,下一章我们将实现一个基于gpio操作的pwm chip驱动,该驱动可在ubuntu16.04上运行验证,可适合无开发版学习pwm chip驱动开发(借助以前实现的virt gpio chip,即可实现该功能)。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,我无法找到关于Linux PWM子系统的reload操作的具体信息。但是,我可以为您提供一些关于Linux PWM子系统的基本介绍和操作方法。 Linux PWM子系统是用于控制嵌入式系统中的脉冲宽度调制(PWM)信号的一个子系统。它允许用户通过软件来生成和控制PWM信号,用于控制各种外设,如LED灯、电机等。 要使用Linux PWM子系统,您需要进行以下步骤: 1. 确保您的系统已经加载了PWM驱动程序。您可以通过运行以下命令来检查: ```shell ls /sys/class/pwm/ ``` 如果该目录存在,则表示PWM驱动程序已加载。 2. 找到您想要使用的PWM通道。PWM通道通常在/sys/class/pwm/目录下以pwmchipX的形式表示,其中X是通道的编号。您可以运行以下命令来查看可用的PWM通道: ```shell ls /sys/class/pwm/ ``` 3. 配置PWM通道的属性。您可以通过修改/sys/class/pwm/pwmchipX/pwmY/目录下的相应属性文件来配置PWM通道的参数,其中X是PWM通道的编号,Y是具体通道的编号。例如,您可以通过修改/sys/class/pwm/pwmchip0/pwm0/目录下的duty_cycle文件来设置PWM信号的占空比。 4. 启动PWM信号。您可以通过将1写入/sys/class/pwm/pwmchipX/pwmY/enable文件来启动PWM信号,其中X是PWM通道的编号,Y是具体通道的编号。例如,您可以运行以下命令来启动PWM信号: ```shell echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable ``` 请注意,具体的PWM子系统操作可能因不同的硬件平台和Linux内核版本而有所差异。因此,我建议您查阅相关的文档和资料以获取更详细和准确的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值