1

次のコマンドcat&echoでドライバーを動作させるにはどうすればよいですか。

catはデバイスドライバのread()システムコールを呼び出しますか?
エコーはデバイスドライバのwrite()システムコールを呼び出しますか?

8 LEDを制御するドライバーに、これら2つのコマンドcat&echoを実装したいと思います。

私がエコーすると、それは3を導いた輝きを与えます:-----

echo "3=1" > /dev/led_node

私が猫の場合、それは次の出力ステータスを与えます:-----

cat /dev/led_node
0 0
1 0
2 0
3 1
4 0
5 0
6 0
7 0

ドライバーのどの部分またはシステムコールがcat&echoシステムコールと相互作用するかを提案してください。

4

2 に答える 2

0

cat: system call interacts with read function of your driver. echo: system call interacts with write function of your driver. Thing is if you cat on /dev/led_node, device file/node is opened i.e. calling open system call, then read system call is called, keeps looping in the read unless zero is returned (no data present to read) and atlast close system call is called, which close the device node/file.

于 2013-03-07T03:19:24.633 に答える
0

catたとえば、 を使用して、ファイルの読み取り方法を簡単に確認できますstrace。次に例を示します。

$ echo '123' >/tmp/test.txt
$ strace cat /tmp/test.txt 

open()出力で、呼び出しを見つけることができます。

open("/tmp/test.txt", O_RDONLY)         = 3

3これは、に関連付けられたファイル記述子を返します/tmp/test.txt。出力のさらに下に、次の内容が表示されます。

read(3, "123\n", 65536)                 = 4

ファイル記述子を取得3し、そこから読み取ります (バイトのバッファー サイズを使用し65536て 4 バイトを取得します)。基本的にあなたの最初の質問に答えます -catを呼び出しますread()。に対して同じことを行いecho、それが を呼び出すことがわかりますwrite()

キャラクター デバイス ドライバーでは、これらの呼び出しを実装する必要があります。それがどのように機能するかについての優れた説明と有用な例については、Linux Device Drivers, Chapter 3を参照してください。

それが役に立てば幸い。幸運を!

于 2013-02-28T18:18:29.360 に答える