GNU/Linux >> Linux の 問題 >  >> Linux

Linux –ユーザースペースとカーネルの通信に/devと/sysをいつ使用するか?

Linuxドライバーの開発を始めたばかりですが、概念的な質問があります。これは、他の新規参入者もカーネル開発に役立つと思います。

Linuxデバイスドライバーの本を読んでいて、Chまで完了しました。本の3。これまで、openを発行することでそれを見てきました 、close および/dev内のファイルに対するその他のコマンド フォルダ、ユーザースペースはカーネル機能にアクセスできます。

制御を共有するもう1つの方法は、/sys内のファイルを使用することです。 、sysからの読み取りまたは書き込み ファイルはドライバーと通信できます。

各メソッドのユースケースを知りたいですか?それらは同じタスクへの2つのアプローチですか?ある人が別の人に制限はありますか?誰かが、一方が他方よりも役立つかもしれない実際的な例を共有できますか?

私はここで他の質問を読みました、そして彼らはdevを説明します およびsys 。それは役に立ちますが、両方がどのように異なり、どのように使用されるべきかについて、もう少し深い知識を得たいと思いました。

承認された回答:

非常に大まかに:

/dev 以前のUnixシステムではカーネルと対話する唯一の方法であったデバイスノードが含まれています。これらには、ブロックの2つのタイプがあります。 デバイスと文字 デバイス。対応するAPIは、ブロックベースのI / O(ある種のディスク)または文字ベースのI / O(シリアルポートなど)を可能にするものを対象としています。

/sys (および/proc )は後で追加されました。おそらくPlan9OSに触発されたものです。これらは完全なディレクトリサブツリーを提供し、これらのサブツリーのファイルエントリには、読み取り時のカーネルモジュールの内部状態を説明するテキストが含まれ、書き込み時の内部状態を設定します。

したがって、一般的なアプリケーションは次のようになります。

ある種のストレージデバイス用のカーネルドライバを作成したいですか? /devを使用する デバイス自体にアクセスするノード、および/sys (または/proc )ストレージへのアクセス方法を微調整するためのエントリ。


Linux
  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  3. / dev/randomと/dev/ urandomをいつ使用するか?

  1. /dev/dm-Z デバイスから /dev/sdX および /dev/mapper/mpathY デバイスをマップする方法

  2. Linux の /dev/zero および /dev/null ファイルとは

  3. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  1. Linux ramdisk (/dev/ram0 - /dev/ram15) の量とサイズを変更するにはどうすればよいですか?

  2. Linux:/dev/console 、 /dev/tty 、 /dev/tty0 の違い

  3. 推奨される使用方法に従って、Web サイトは /var/ または /usr/ に配置する必要がありますか?