如何让我的驱动程序按照以下命令执行操作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;回音系统调用?
答案 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系统调用,关闭设备节点/文件。