工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> モノのインターネットテクノロジー

Linux デバイスドライバーのためのピン制御サブシステムをマスターする

Linux デバイスドライバーのためのピン制御サブシステムをマスターする 編集者注:組み込み Linux が IoT のバックボーンになりつつある中、デバイスドライバーはアプリケーションとハードウェアの橋渡しです。『Linux Device Drivers Development』の著者 John Madieu が、これらのドライバー構築のための詳細でコード豊富なガイドを提供します。

この抜粋は書籍の第 14 章で、カスタムハードウェアをカーネルとインターフェースする必要がある開発者にとって重要な領域であるピン制御と GPIO に焦点を当てています。第 1 回はピン制御サブシステムを紹介します。

『Linux Device Drivers Development』by John Madieu より翻案。


第 14 章. ピン制御と GPIO サブシステム
By John Madieu

組み込み Linux では、ドライバーはほぼ常に GPIO とやり取りするか、ピン多重化を設定します。「ピン」はコンポーネントの物理出力ラインであり、多くの SoC が同じピンを複数の機能で再利用します。例えば、i.MX6QDL のピン MX6QDL_PAD_SD3_DAT1 は、SD データライン、UART RTS/CTS ライン、FlexCAN Rx ライン、または汎用 GPIO として機能できます。

ピンの機能を選択するプロセスを ピン マルチプレクシング(ピン マキシング) と呼び、これを調整するカーネルコンポーネントが ピン コントローラ です。この章の第 2 部では、一般的なピン機能である汎用入出力(GPIO)サブシステムを探ります。

この章では以下を学びます:

ピン制御サブシステム

pinctrl サブシステムはピン多重化と設定を管理します。特定のピン配置を必要とするデバイスは、その配置をデバイスツリーで記述する必要があります。ピンコントローラドライバーはこれらの記述を解析し、SoC の I/O コントローラをそれに従ってプログラムします。

このサブシステムは以下を提供します:

この書籍はピンコントローラ API の使用に焦点を当てており、ピンコントローラドライバー自体の作成は扱いません。

Pinctrl とデバイスツリー

デバイスツリーでは、ピンコントローラノードがすべての利用可能なピングループと機能を記述します。各グループには整数 ID が割り当てられ、オプションで人間が読める名前を ID にマッピングする pinctrl-name が付随します。

デバイスのバインディングは、必要なピン状態を指定します。2 つのプロパティがデバイスをピン状態にリンクします:

以下は、2 つのデバイスのピン設定を示す典型的なデバイスツリー抜粋です:

Linux デバイスドライバーのためのピン制御サブシステムをマスターする

各行は <PIN_FUNCTION> <PIN_SETTING> 形式に従います:

MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09 0x80000000
MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1

最初のトークン(MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09)がピン機能を特定し、2 番目のトークン(0x80000000)が設定ビット(プルアップ/ダウン、ドライブ強度など)をエンコードします。これらのマクロは arch/arm/boot/dts/imx6q-pinfunc.h などのアーキテクチャ固有ヘッダーファイルで定義されます。

ドライバーコードでピン状態をプログラムするには、初期化時(通常は probe())に以下の手順を実行します:

struct pinctrl *pinctrl;
pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl))
    dev_warn(&pdev->dev, "pins are not configured from the driver");

ヘルパー pinctrl_get_select_default() は自動的に default 状態を取得して適用します。デバイスが init 状態を提供する場合、コアは probe() 前にその状態を適用し、その後ドライバーが変更しない限り default に戻ります。

終了時は pinctrl_put(pinctrl) またはリソース管理版 devm_pinctrl_put(pinctrl) でコントローラを解放します。

am335x-evm.dts ファイルからの具体例:

dcan1: d_can@481d0000 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&d_can1_pins>;
};

対応するドライバーでは:

pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl))
    dev_warn(&pdev->dev, "pins are not configured from the driver");

ドライバーの probe() が実行される頃には、default ピン設定がすでに適用されています。

次の回では GPIO サブシステムを詳細に扱います。

Packt Publishing の許可を得て再録。Copyright © 2017 Packt Publishing


John Madieu はパリ拠点の組み込み Linux およびカーネルエンジニアです。自動化、輸送、医療、エネルギー、防衛分野のクライアント向けにドライバーと BSP を開発。EXPEMB で勤務し、コンピュータ・オン・モジュール設計のパイオニアとして、知識共有がイノベーションを加速すると信じるアクティブなオープンソース推進者です。


モノのインターネットテクノロジー

  1. 産業用 IoT システムがサイバー攻撃の標的にされる理由とその防御策
  2. 将来展望:生産卓越性に向けた産業用IoTの推進
  3. コネクテッドカーの主導権は誰に?──ドライバー視点からの洞察
  4. 組み込みIoTシステムを保護する6つの実証済みステップ
  5. 製品開発におけるSaaS採用急増:主要ハードルと機会 — パート2
  6. SaaS導入が製品開発でティッピングポイント到達-PTCの洞察
  7. 理想的なIoT開発パートナーの選び方:主要課題と解決策
  8. 産業用PC:IIoT革命における複雑制御の要
  9. エンタープライズIoT成功の鍵:Nokiaエキスパートの洞察
  10. IoTがWebアプリ設計・開発に革命をもたらす理由
  11. 象牙からベークライトへ:現代プラスチックの進化をたどる