Linux驱动程序和Sysfs

时间:2015-01-06 20:19:23

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

所以我一直在阅读Linux API(系统调用和libc)以及设备ioctl。,通过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和任何新库? (只是想对这个想法进行坦率的讨论)

3 个答案:

答案 0 :(得分:1)

  1. a)否.b)取决于。
  2. 我没听说过这样的要求。
  3. 您必须提供一个协议来在调用者和内核之间进行交换。您可以在Plan9中查看它是如何完成的。我们将要求IOCTL,请在SO answer
  4. 上详细了解
  5. 您是否考虑过安全问题?这将是我认为的操作系统中的一个大漏洞。
  6. 据我所知。
  7. 不会讨论。

答案 1 :(得分:0)

请查看我对你问题的内联回复:

1)我们可以通过sysfs执行读写操作;这又取决于你的要求。

2)我不这么认为; sysfs和ioctl都有自己的优势,所以你无法以相同的方式比较它们。

3)不正确。

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

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

答案 2 :(得分:0)

1 - >也不能实现写入sysfs。用户可以使用这样的东西。 echo“你好”> / sys / devices / *** / sysfs_entry

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

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

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

5 - >不知道。

6 - >不知道。