/dev/にデバイスファイルを生成する現代的な方法は何ですか?

/dev/にデバイスファイルを生成する現代的な方法は何ですか?

長すぎます。

私のモジュールが最新の慣行に従うようにするには/dev/、シェルスクリプトでviaを介してデバイスを作成する必要がありますか、またはviaとC関数を介してモジュールソースコードから直接作成する必要がありますか?ある方法が他の方法に比べてどのような利点がありますか?mknodclass_createdevice_create

詳細

存在する第3章~のLinuxデバイスドライバ、第3版、45ページでは、register_chrdev_regionデバイス番号を知っている場合は、文字デバイスを登録する機能として使用されます。

ただし、今日使用していないデバイス番号は明日カーネルで使用できるため、この機能(46ページ)の使用はほとんどすぐには推奨されず、主要なデバイスalloc_chrdev_region番号を動的に割り当てることができます。

/dev/しかし、この時点で、著者はデバイスノードを生成するためには必ずメジャーデバイス番号を知る必要があり、alloc_chrdev_region返却前にはこれが不明なのであらかじめ生成できないことを指摘する。

提案された解決策はsh次のようなellスクリプトです。

  • モジュールロードinsmod
    • モジュールのinit関数を呼び出します。
      • これは...呼ばれるalloc_chrdev_region
        • これにより新しいデバイスが作成されました/proc/devices
  • awkデバイスから主要なデバイス番号を抽出するために使用されます。
  • 最後に、この主要なデバイス番号はmknod生成されたデバイスファイルに渡されます/dev/(マイナーデバイス番号はデバイスファイル名でエンコードされます)。

しかし、Linuxカーネルモジュールプログラミングガイドclass_createsum関数を使用するとdevice_create私は信じる同じことを行います。

私を不安にすることは、この本がそれにもかかわらず まだ更新中、それをより良くするいくつかの側面がありますLinuxデバイスドライバ、第3版

たとえば、likeまたはをregister_chrdev好むことをお勧めしますが、を使用します。 register_chrdev_regionalloc_chrdev_regionLinuxデバイスドライバ、第3版通話中により明確にregister_chrdev 昔の方法、説明を57ページの半分以上に短縮しました。

一方、Linuxカーネルモジュールプログラミングガイドデバイスファイルを生成するためにシェル関数の代わりにclass_createC関数を使用する唯一のソースではありません。device_createmknodここ別のブログ投稿は2018年初めに作成されました。

それでは、今日私たちは何をすべきですか?

関連情報