長すぎます。
私のモジュールが最新の慣行に従うようにするには/dev/
、シェルスクリプトでviaを介してデバイスを作成する必要がありますか、またはviaとC関数を介してモジュールソースコードから直接作成する必要がありますか?ある方法が他の方法に比べてどのような利点がありますか?mknod
class_create
device_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
。
- これにより新しいデバイスが作成されました
- これは...呼ばれる
- モジュールのinit関数を呼び出します。
awk
デバイスから主要なデバイス番号を抽出するために使用されます。- 最後に、この主要なデバイス番号は
mknod
生成されたデバイスファイルに渡されます/dev/
(マイナーデバイス番号はデバイスファイル名でエンコードされます)。
しかし、Linuxカーネルモジュールプログラミングガイドclass_create
sum関数を使用するとdevice_create
、私は信じる同じことを行います。
私を不安にすることは、この本がそれにもかかわらず まだ更新中、それをより良くするいくつかの側面がありますLinuxデバイスドライバ、第3版。
たとえば、likeまたはをregister_chrdev
好むことをお勧めしますが、を使用します。 register_chrdev_region
alloc_chrdev_region
Linuxデバイスドライバ、第3版通話中により明確にregister_chrdev
昔の方法、説明を57ページの半分以上に短縮しました。
一方、Linuxカーネルモジュールプログラミングガイドデバイスファイルを生成するためにシェル関数の代わりにclass_create
C関数を使用する唯一のソースではありません。device_create
mknod
ここ別のブログ投稿は2018年初めに作成されました。
それでは、今日私たちは何をすべきですか?