Table of Contents
1 Overview" >1 Overview
2. Principle" >2. Principle
Home System Tutorial LINUX Linux PWM driver

Linux PWM driver

Feb 05, 2024 pm 03:40 PM
linux linux tutorial linux system linux command shell script embeddedlinux good promise Getting started with linux linux learning

1 Overview

This article will provide an in-depth introduction to the PWM (Pulse-Width Modulation) driver framework of Linux, including its implementation principles, driver addition methods, and debugging methods to help developers better understand and use this function.

The example Linux kernel version shown in this article is 6.2.8.

2. Principle

PWM technology, as a commonly used modulation technology, can change the duty cycle of the effective signal by adjusting the high-level time width of the periodic waveform, thereby achieving power supply control for the device. Common PWM application areas include screen backlight brightness adjustment, motor speed control, and fan speed control. The Linux kernel supports the PWM driver framework and provides the PWM driver framework core code and sysfs interface code by abstracting the structure data types of the PWM controller and PWM signals. Developers can use this driver framework to easily add their own specific PWM controller drivers and use the sysfs interface for functional debugging.

Linux PWM driver

Driver developers can design a dedicated PWM controller structure as needed, using the struct pwm_chip structure as a member variable. The following is an example, in the ./drivers/pwm/pwm-ab8500.c driver definition.

Linux PWM driver

(2) struct pwm_ops structure, including the operation function of the PWM controller. The two basic functions that should be implemented by driver developers are the apply function and the get_state function; the apply function is used to configure the PWM controller, including configuring the enable state, period, duty cycle, polarity, etc. of the PWM signal; the get_state function is used Obtain the initial status of the specified PWM channel signal when registering the PWM controller, including enable status, period, duty cycle, polarity, etc.

Linux PWM driver

(3) struct pwm_device structure, representing the PWM signal output by the PWM controller.

Linux PWM driver

3.3 Driver Framework Core Function

(1) pwmchip_add function. Used to register a new PWM controller device. Defined in ./drivers/pwm/core.c.

Linux PWM driver

(2) pwmchip_remove function. Used to remove a PWM controller device. Defined in ./drivers/pwm/core.c.

Linux PWM driver

3.4 Driver typical implementation method

(1) Summary

The PWM driver source file is located in the ./drivers/pwm path. The driver developer needs to add the corresponding source file. The source file design can refer to the driver code of other manufacturers. Referring to the naming style of the original code, you can name the newly added driver source file pwm-xx.c, name the probe and remove functions as xx_pwm_probe and xx_pwm_remove respectively, and define the PWM controller structure as struct xx_pwm_chip. The files in the ./drivers/pwm path are as follows.

Linux PWM driver

(2) apply function and get_state function definition

According to the PWM controller manual, the apply function and get_state function are defined by the driver developer.

(3)xx_pwm_probe function definition

The implementation method of the xx_pwm_probe function is: first initialize the PWM controller structure struct xx_pwm_chip variable, and then call the PWM driver framework core function pwmchip_add to register a new PWM controller device.

(4)xx_pwm_remove function definition

xx_pwm_remove function is implemented by calling the PWM driver framework core function pwmchip_remove to remove a PWM controller device.

4. Driver addition method

4.1 Add driver source file

Follow the method described in Section 3.4, write the driver source file pwm-xx.c, and add it to the ./drivers/pwm path.

4.2 Add compilation support

(1) Modify the Kconfig file under the ./drivers/pwm path and add the added PWM driver configuration options.

(2) Modify the Makefile file in the ./drivers/pwm path and add the compilation option of pwm-xx.c.

(3) In the memuconfig interface, enable the added PWM driver. The configuration interface is as follows.

Linux PWM driver

4.3 Add PWM controller device tree node

Add the PWM controller device tree node in the device tree. The basic properties of this node include compatibility, registers and number of #pwm-cells. Add interrupts, clocks, resets and other properties as needed.

PWM controller device tree design method can refer to ./Documentation/devicetree/bindings/pwm.

The following is an example of a PWM controller device tree node. The reference documents are as follows:

./Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.yaml.

Linux PWM driver

5.Debugging method

Use the sysfs interface to perform functional debugging of the PWM driver. Examples of the main debugging commands are as follows.

(1) View PWM controller node

ls /sys/class/pwm/pwmchip0

(2) Open the specified PWM channel signal

echo n > /sys/class/pwm/pwmchip0/export

//n is the channel number

(3)Set the PWM signal period

echo pvalue > /sys/class/pwm/pwmchip0/pwm0/period

//pvalue is the period value

(4)Set the PWM signal duty cycle

echo dvalue > /sys/class/pwm/pwmchip0/pwm0/duty_cycle

//dvalue is the effective level width value

(5) Enable a certain PWM channel signal

echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable

(6) Disable a certain PWM channel signal

echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable

The above is the detailed content of Linux PWM driver. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to open web.xml How to open web.xml Apr 03, 2025 am 06:51 AM

To open a web.xml file, you can use the following methods: Use a text editor (such as Notepad or TextEdit) to edit commands using an integrated development environment (such as Eclipse or NetBeans) (Windows: notepad web.xml; Mac/Linux: open -a TextEdit web.xml)

Four ways to implement multithreading in C language Four ways to implement multithreading in C language Apr 03, 2025 pm 03:00 PM

Multithreading in the language can greatly improve program efficiency. There are four main ways to implement multithreading in C language: Create independent processes: Create multiple independently running processes, each process has its own memory space. Pseudo-multithreading: Create multiple execution streams in a process that share the same memory space and execute alternately. Multi-threaded library: Use multi-threaded libraries such as pthreads to create and manage threads, providing rich thread operation functions. Coroutine: A lightweight multi-threaded implementation that divides tasks into small subtasks and executes them in turn.

What is the Linux best used for? What is the Linux best used for? Apr 03, 2025 am 12:11 AM

Linux is best used as server management, embedded systems and desktop environments. 1) In server management, Linux is used to host websites, databases, and applications, providing stability and reliability. 2) In embedded systems, Linux is widely used in smart home and automotive electronic systems because of its flexibility and stability. 3) In the desktop environment, Linux provides rich applications and efficient performance.

How is Debian Hadoop compatibility How is Debian Hadoop compatibility Apr 02, 2025 am 08:42 AM

DebianLinux is known for its stability and security and is widely used in server, development and desktop environments. While there is currently a lack of official instructions on direct compatibility with Debian and Hadoop, this article will guide you on how to deploy Hadoop on your Debian system. Debian system requirements: Before starting Hadoop configuration, please make sure that your Debian system meets the minimum operating requirements of Hadoop, which includes installing the necessary Java Runtime Environment (JRE) and Hadoop packages. Hadoop deployment steps: Download and unzip Hadoop: Download the Hadoop version you need from the official ApacheHadoop website and solve it

Do I need to install an Oracle client when connecting to an Oracle database using Go? Do I need to install an Oracle client when connecting to an Oracle database using Go? Apr 02, 2025 pm 03:48 PM

Do I need to install an Oracle client when connecting to an Oracle database using Go? When developing in Go, connecting to Oracle databases is a common requirement...

Is Debian Strings compatible with multiple browsers Is Debian Strings compatible with multiple browsers Apr 02, 2025 am 08:30 AM

"DebianStrings" is not a standard term, and its specific meaning is still unclear. This article cannot directly comment on its browser compatibility. However, if "DebianStrings" refers to a web application running on a Debian system, its browser compatibility depends on the technical architecture of the application itself. Most modern web applications are committed to cross-browser compatibility. This relies on following web standards and using well-compatible front-end technologies (such as HTML, CSS, JavaScript) and back-end technologies (such as PHP, Python, Node.js, etc.). To ensure that the application is compatible with multiple browsers, developers often need to conduct cross-browser testing and use responsiveness

libv are two libv are two Apr 03, 2025 pm 08:03 PM

I developed a project called Lua-Libuv and am happy to share my experience. The original intention of the project is to explore how to use Libuv (an asynchronous I/O library written in C) to build a simple HTTP server without having to learn the C language in depth. With the help of ChatGPT, I completed the basic code of HTTP.C. When dealing with persistent connections, I successfully implemented closing the connection and freeing resources at the right time. At first I tried to create a simple server that ended the main program by closing the connection, but I had some problems. I've tried sending blocks of data using streaming, and while it works, this blocks the main thread. In the end, I decided to give up on this approach because my goal was not to learn C language in depth. Finally, I

Unable to log in to mysql as root Unable to log in to mysql as root Apr 08, 2025 pm 04:54 PM

The main reasons why you cannot log in to MySQL as root are permission problems, configuration file errors, password inconsistent, socket file problems, or firewall interception. The solution includes: check whether the bind-address parameter in the configuration file is configured correctly. Check whether the root user permissions have been modified or deleted and reset. Verify that the password is accurate, including case and special characters. Check socket file permission settings and paths. Check that the firewall blocks connections to the MySQL server.

See all articles