面向命令的linux驱动程序

时间:2013-02-28 12:16:07

标签: linux-device-driver

如何让我的驱动程序按照以下命令执行操作cat&回声。

cat是否会调用设备驱动程序的read()系统调用? echo是否调用设备驱动程序的write()系统调用?

我想实现这两个命令cat&回应我的司机控制8 led。

如果我回应它会发出光芒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& amp;回音系统调用?

2 个答案:

答案 0 :(得分: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

希望它有所帮助。祝你好运!

答案 1 :(得分:0)

cat:系统调用与驱动程序的读取功能进行交互。 echo:系统调用与驱动程序的写入功能进行交互。事情是,如果你打开/ dev / led_node,设备文件/节点被打开,即调用开放系统调用,然后调用读取系统调用,保持循环读取,除非返回(没有数据存在)读取)并调用atlast close系统调用,关闭设备节点/文件。