ホームページ  >  記事  >  システムチュートリアル  >  Linux PWM ドライバー

Linux PWM ドライバー

王林
王林転載
2024-02-05 15:40:031220ブラウズ

######1。概要######

この記事では、Linux の PWM (パルス幅変調) ドライバー フレームワークについて、その実装原理、ドライバーの追加方法、デバッグ方法などを詳しく紹介し、開発者がこの機能をよりよく理解して使用できるようにします。 この記事に示されている Linux カーネルのバージョンの例は 6.2.8 です。

2.原則

PWM 技術は、一般的に使用される変調技術であり、周期波形のハイレベル時間幅を調整することで実効信号のデューティ サイクルを変更し、デバイスの電源制御を実現します。一般的な PWM アプリケーション領域には、画面のバックライトの輝度調整、モーター速度制御、ファン速度制御などがあります。 Linux カーネルは、PWM ドライバー フレームワークをサポートし、PWM コントローラーと PWM 信号の構造データ型を抽象化することによって、PWM ドライバー フレームワークのコア コードと sysfs インターフェイス コードを提供します。開発者は、このドライバー フレームワークを使用して、独自の特定の PWM コントローラー ドライバーを簡単に追加し、機能のデバッグに sysfs インターフェイスを使用できます。

ドライバー開発者は、struct pwm_chip 構造体をメンバー変数として使用して、必要に応じて専用の PWM コントローラー構造体を設計できます。以下は、./drivers/pwm/pwm-ab8500.c ドライバー定義内の例です。

Linux PWM ドライバー(2) struct pwm_ops 構造体。PWM コントローラーの演算関数が含まれます。ドライバー開発者が実装する必要がある 2 つの基本関数は、apply 関数と get_state 関数です。apply 関数は、PWM 信号のイネーブル状態、周期、デューティ サイクル、極性などの構成を含む、PWM コントローラーの構成に使用されます。 ; get_state 関数が使用されます PWM コントローラを登録するときに、イネーブル ステータス、周期、デューティ サイクル、極性などを含む、指定された PWM チャネル信号の初期ステータスを取得します。

Linux PWM ドライバー(3) struct pwm_device 構造体。PWM コントローラーによる PWM 信号出力を表します。

Linux PWM ドライバー3.3 ドライバー フレームワークのコア機能

(1) pwmchip_add 関数。新しい PWM コントローラー デバイスを登録するために使用されます。 ./drivers/pwm/core.c で定義されます。 Linux PWM ドライバー

(2) pwmchip_remove 関数。 PWM コントローラー デバイスを取り外すために使用されます。 ./drivers/pwm/core.c で定義されます。

Linux PWM ドライバー3.4 ドライバーの代表的な実装方法

(1) 概要Linux PWM ドライバー

PWM ドライバーのソース ファイルは ./drivers/pwm パスにあります。ドライバー開発者は、対応するソース ファイルを追加する必要があります。ソース ファイルの設計は、他のメーカーのドライバー コードを参照できます。元のコードの命名スタイルを参照して、新しく追加したドライバー ソース ファイルに pwm-xx.c という名前を付け、プローブ関数と削除関数にそれぞれ xx_pwm_probe および xx_pwm_remove という名前を付け、PWM コントローラー構造を struct xx_pwm_chip として定義できます。 ./drivers/pwm パス内のファイルは次のとおりです。

(2) apply関数とget_state関数の定義

PWM コントローラーのマニュアルによると、apply 関数と get_state 関数はドライバー開発者によって定義されています。 Linux PWM ドライバー

(3)xx_pwm_probe関数定義

xx_pwm_probe 関数の実装方法は次のとおりです。最初に PWM コントローラー構造体 struct xx_pwm_chip 変数を初期化し、次に PWM ドライバー フレームワークのコア関数 pwmchip_add を呼び出して新しい PWM コントローラー デバイスを登録します。

(4)xx_pwm_remove関数定義

xx_pwm_remove 関数は、PWM ドライバー フレームワークのコア関数 pwmchip_remove を呼び出して PWM コントローラー デバイスを削除することによって実装されます。

4. ドライバーの追加方法

4.1 ドライバーソースファイルの追加

セクション 3.4 で説明されている方法に従って、ドライバー ソース ファイル pwm-xx.c を書き込み、それを ./drivers/pwm パスに追加します。

4.2 コンパイルサポートの追加

(1) ./drivers/pwm パスの下の Kconfig ファイルを変更し、追加された PWM ドライバー構成オプションを追加します。

(2) ./drivers/pwm パスにある Makefile ファイルを変更し、pwm-xx.c のコンパイル オプションを追加します。

(3) memuconfig インターフェースで、追加した PWM ドライバーを有効にします。設定インターフェイスは次のとおりです。

4.3 PWM コントローラー デバイス ツリー ノードの追加

PWM コントローラーのデバイス ツリー ノードをデバイス ツリーに追加します。このノードの基本プロパティには、互換性、レジスタ、#pwm セルの数が含まれます。必要に応じて、割り込み、クロック、リセット、その他のプロパティを追加します。 Linux PWM ドライバー

PWM コントローラーのデバイス ツリーの設計方法は、./Documentation/devicetree/bindings/pwm を参照できます。

以下は、PWM コントローラー デバイス ツリー ノードの例です。参考資料は以下の通りです:

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

Linux PWM ドライバー

5.デバッグ方法

sysfs インターフェイスを使用して、PWM ドライバーの機能デバッグを実行します。主なデバッグ コマンドの例は次のとおりです。

(1) PWM コントローラー ノードの表示

ls /sys/class/pwm/pwmchip0

(2) 指定された PWM チャネル信号をオープンします

エコー n > /sys/class/pwm/pwmchip0/export

//n はチャンネル番号です

(3)PWM信号周期の設定

エコー pvalue > /sys/class/pwm/pwmchip0/pwm0/period

//pvalue は期間の値です。

(4)PWM信号のデューティサイクルを設定します

エコー dvalue > /sys/class/pwm/pwmchip0/pwm0/duty_cycle

//dvalue は有効レベル幅の値です。

(5) 特定の PWM チャネル信号を有効にする

エコー 1 > /sys/class/pwm/pwmchip0/pwm0/enable

(6) 特定の PWM チャネル信号を無効にする

エコー 0 > /sys/class/pwm/pwmchip0/pwm0/enable

以上がLinux PWM ドライバーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlxlinux.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。