1

私はキャラクターデバイスドライバーのプログラミングを勉強しています。私はいくつかの疑問を持っていました、そしてここでそれらを明らかにしたいと思っています:-

(a)「デバイスファイルはメジャー番号とマイナー番号に関連付けられています。また、ドライバーモジュールでは、関数に従って定義されたfopsフィールドと、デバイスファイルと同じメジャー番号とマイナー番号を使用してcdevオブジェクトを定義します。」

1. I want to know what exactly happens when a function is called on the device file. 
Here is what I think. Suppose, I make a file called mydevfile using mknod(). Now 
when I call open(mydevfile, O_RDWR), the kernel is searched for a cdev object with
same minor and major number. When found, the cdev 's fops is searched for function
for open() (say dev_open()). It is written that the dev_open() should have first 
argument inode* and second argument file*. My question is how are these parameters 
passed to the dev_open() function?

2. I learnt that inode is associated with a file on disk. Which file is it associated
with here? Also inode has a pointer to corresponding cdev. Now if we have already
got the cdev  by searching major and minor number from mydevfile, why do we need 
inode? W

3. What does the file*(i.e. the second argument) point to in this case?

これはお好みの方法で自由に説明できますが、例を使って説明していただければ幸いです。ありがとう!

4

1 に答える 1

0

キャラクタードライバー初心者です。これは、あなたの質問に対して私ができることのほんの一部です。提案と編集を歓迎します。

これらは、キャラクター ドライバーを記述するために知っておく必要がある主な構造です。

1) ファイル操作構造体: この構造体の各フィールドは、open、read、write、ioctl などを実装するドライバーの関数を指します。開いている各ファイルは、ファイル操作構造体を指す f_op と呼ばれるフィールドを含めることによって、いくつかの関数に関連付けられています。

2) ファイル構造: 開いているファイルを表します。これはドライバーに固有のものではなく、開いている各ファイルはカーネル空間にファイル構造を持ちます。開いたときにカーネルによって作成され、最後に閉じるまでファイルを操作する関数に渡されます。struct fileoperations *f_op;

3) inode 構造: ファイルを内部的に表すためにカーネルによって使用されます。ここで重要なパラメータは 2 つだけです。struct cdev *i_cdev および b.dev_t i_rdev

a. struct cdev *i_cdev: kernel's internal structure to represent the char devices.
b. dev_t i_rdev: contains the actual device numbers.

これは私が解釈するものです:

inode がディスクから読み取られ、inode オブジェクトが初期化されます。

ext2_readinode()----> init_special_inode()----> これにより、inode オブジェクトの i_rdev フィールドがデバイス ファイルのマイナーおよびメジャー番号に初期化されます。

于 2013-05-22T13:26:54.960 に答える