【问题标题】:command oriented linux drivers面向命令的linux驱动程序
【发布时间】:2013-02-28 12:16:07
【问题描述】:

如何让我的驱动程序执行以下命令 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 系统调用交互?

【问题讨论】:

    标签: linux-device-driver


    【解决方案1】:

    您可以使用例如strace 轻松检查cat 如何读取文件。这是一个例子:

    $ 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

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

    【讨论】:

      【解决方案2】:

      cat: 系统调用与驱动程序的读取功能交互。 echo: 系统调用与驱动程序的写入函数交互。问题是如果你在 /dev/led_node 上运行,设备文件/节点被打开,即调用 open 系统调用,然后调用 read 系统调用,除非返回 zero(不存在数据),否则会一直循环读取读取)并调用最后关闭系统调用,关闭设备节点/文件。

      【讨论】:

        猜你喜欢
        • 2019-07-19
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多