【问题标题】:Linux Drivers and SysfsLinux 驱动程序和 Sysfs
【发布时间】:2015-01-06 20:19:22
【问题描述】:

所以我一直在阅读 Linux API(系统调用和 libc)以及设备 ioctls,通过 create(dev_name)ioctl(device_file_handle) 以及 sysfs 文件系统调用 ioctls。所以这是我的问题:

  1. sysfs 是否“假定”为只读的,其中各种内核参数都被公开以供读取?还是它们“应该”也是可写的?

  2. 将来是否需要所有驱动程序来公开sysfs 中的接口?

  3. 如果上面的答案是正确的,那么我们真的会不再需要 IOCTL 调用吗?因为要让驱动程序做某事,我们需要做的就是改变 sysfs 中某些文件的值, 例如,要在驱动程序 D1 上调用一个名为 DO_SOMETHING 的 ioctl,我们会这样做:

    echo 1> /sysfs/D1/IOCTLS/DO_SOMETHING  ( or something like that ... :) )   
    
  4. 是否有任何计划将内核 API(即 syscalls 和 libc )公开为 sysfs 文件,例如,

    echo 1> /sysfs/libc/get_system_time 
    cat /sysfs/libc/results/system_time     
    

    这样做是个好主意吗?

  5. Windows 中是否有类似 sysfs 的系统?或者任何正在进行的项目?

  6. 如何通过 http 公开核心系统调用、libc 和任何新库? (只是想就这个想法进行坦率的讨论)

【问题讨论】:

    标签: linux linux-kernel linux-device-driver ioctl sysfs


    【解决方案1】:
    1. a) 否。b) 视情况而定。
    2. 我没有听说过这样的要求。
    3. 您必须提供一个协议来在调用者和内核之间进行交换。您可以检查它是如何在 Plan9 中完成的。我们将需要 IOCTL,在SO answer 上阅读更多相关信息
    4. 您是否考虑过安全问题?我认为这将是操作系统中的一个大漏洞。
    5. 据我所知。
    6. 不会讨论。

    【讨论】:

      【解决方案2】:

      1-> 也不能为写入实现 sysfs。用户可以像这样使用它。 echo "你好" > /sys/devices/***/sysfs_entry

      2 -> 不,我认为大多数平台相关的驱动程序都打开了 sysfs 接口

      3 -> 以否回答上述问题。我们仍然需要 ioctls 。

      4 -> 我相信只有涉及某些功能的有用 API 才会作为 sysfs 条目公开。例如,驱动程序后面的设备有 100 个寄存器。每个寄存器都不会作为 sysfs 条目公开。但是,如果有 3-4 个特性涉及这些寄存器,那么这些特性将作为 sysfs 条目公开。这些条目不应导致错误数据出现任何错误/恐慌。这个责任在开发商身上。

      5 -> 不知道。

      6 -> 不知道。

      【讨论】:

        【解决方案3】:

        请查看我对您问题的在线回复:

        1)我们可以通过sysfs进行读写操作;再次取决于您的要求。

        2) 我不这么认为; sysfs 和 ioctl 都有自己的优势,所以你不能用相同的方式比较两者。

        3) 这不是真的。

        4) Sysfs API(显示和存储 API)已经暴露给用户空间。您可以从用户空间调用这些 API。

        5) 可能是;但我不确定。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-22
          • 2013-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-25
          相关资源
          最近更新 更多