ユーザースペース操作をカーネルコードに関連付ける

ユーザースペース操作をカーネルコードに関連付ける

私はUbuntu 18.04がインストールされたup2boardと専用カーネルを持っているので、LEDなどのボード上の特定のハードウェアを使用できます。この LED を点灯するには、次のコマンドを使用します。

$ sudo -i
$ cd /sys/class/gpio
$ echo 432 > export
$ cd gpio432
$ echo "out" > direction
$ echo 1 > value

今私は2つを見つけたいと思います。

  1. echo 1 > valueコマンドがユーザー空間からドライバに伝播される方法。

  2. このLEDサポートを担当するドライバを見つける方法。

答え1

とても簡単に:

のエントリは/sys実際のファイルではありません。このタイプのマウントは、sysfsカーネル内のカーネルの他の部分が自分で登録できるAPIに対応します。その後、そのファイルシステムの「ファイル」を読み書きするとき、sysfsはこれらの操作を登録済みモジュールに渡します。

gpioカーネル(汎用I / O)層は、別のドライバが再び登録できる抽象化層です。通常、これはGPIOレジスタ自体があるチップまたはチップセット用のドライバです。これらのチップのGPIOピンの配線方法は、ハードウェアによって異なります。

詳細はDocumentation/gpio/gpio.txtカーネルソースコードなどで確認できます。

ドライバを識別する1つの方法は、ll gpio432gpioノードを作成してシンボリックリンクを調べることです。これは、GPIOレジスタを備えたチップ/チップセットを持つデバイスを指します。次に、デバイスのドライバを探します。

dmesg別のアプローチは、GPIOを登録するときにドライバがメッセージを生成することを確認することです。

おそらく、この情報はを通じてアクセスすることができますudevadm

関連情報