1

我怎样才能让我的驱动程序执行以下命令 cat & echo。

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

我想为控制 8 个 LED 的驱动程序实现这两个命令 cat & echo。

如果我回显它会发出发光的 LED 3 :-----

echo "3=1" > /dev/led_node

如果我 cat 它给出以下输出状态:-----

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使用例如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 设备驱动程序,第 3 章

希望能帮助到你。祝你好运!

于 2013-02-28T18:18:29.360 回答
0

cat:系统调用与驱动程序的读取功能交互。echo:系统调用与驱动程序的写入函数交互。事情是,如果你在 /dev/led_node 上运行,设备文件/节点被打开,即调用 open 系统调用,然后调用 read 系统调用,在读取中保持循环,除非返回(没有要读取的数据)并且最后关闭系统call 被调用,它关闭设备节点/文件。

于 2013-03-07T03:19:24.633 回答