在上面一章,我们介绍了pwm子系统的框架以及数据结构等内容,而pwm 子系统中pwm_chip的注册与注销接口也就是实现pwm_chip与pwm_device之间的关联,并将pwm_chip放入系统pwm_chip链表中,而这些接口实现也较简单,就没有展开说明。本章我们主要介绍如何实现一个pwm驱动,本章的目的如下:
- 实现一个基于gpio的pwm chip驱动(即通过gpio模拟pwm);
- 为了让大家都可以验证该驱动,我们实现了一个虚拟的gpio controller驱动(在之前的linux gpio子系统专栏中已经说明如何实现一个虚拟的gpio controller),并借助sysfs文件系统提供的接口,为该虚拟gpio 控制器的输出值创建一个名为vgpio_out文件,我们可以通过查看该文件的值,确定是否输入高低电平;
- 本次实现的驱动均在ubuntu16.04系统下验证通过;
- 本次代码已放入gitee上(链接地址)
gpio-pwm功能设计说明
- 该驱动可根据传递的gpio参数个数n,创建一个pwm_chip,并为该pwm_chip创建n个pwm device;
- 本驱动使用高精度定时器hrtimer(精度为ns),实现周期控制gpio值,从而输出pwm信号。
gpio-pwm驱动涉及的知识点
- Platform device、platform driver;
- Pwm 子系统中pwm_chip添加接口