当我们有 sysfs 时,是否有理由查询 ioctl 来获取硬件信息?

当我们有 sysfs 时,是否有理由查询 ioctl 来获取硬件信息?

我的假设是它sysfs是使用ioctl查询构建的,这意味着您想要的所有信息(或至少大部分)已经可以通过简单地读取sysfs.我注意到一些程序(例如hdparm)仍然使用ioctl调用而不是简单地点击sysfs,我很好奇这是否有原因。不靠谱吗sysfs?如果您只对硬件信息感兴趣,是否有理由使用ioctlover sysfs

答案1

正如 Tilman 在评论中正确断言的那样,sysfs 和 ioctl 都提供对内核数据结构的用户态访问。
由于内核不需要系统调用来访问自己的数据,因此 sysfs 树也不是通过 ioctl 调用构建的,也不是对其进行任何用户操作文件将转换为 ioctl 调用。


你写“……信息已由简单地正在读取文件……”我相信,这就是您最后一个问题的答案:

为什么求助于 sysfs 接口似乎更简单?

  • 首先,因为考虑到运行某些 shell 的基本 ASCII 终端,sysfs 树可以通过最基本的 cat 和 echo 命令访问(二进制)内核数据。
  • 借助其他基本 shell 命令(ls、cd),您还可以通过符号链接深入了解内核对象之间的关系。
  • 除此之外,用户可以从对您希望提交的更改的有效性进行一些(至少是最小的)控制中受益。

这确实使 sysfs 成为在控制台下希望调整系统、编写脚本或规则、舒适地从用户空间调试某些驱动程序时的正确方法(sysfs 的初始目的地......想想之前...... /dev/mem 是你唯一的朋友为了以后的目的。)

好吧,但是,在某些情况下,您只是不关心所有这些设施,通过 sysfs 接口访问内核对象只会限制您……编写(更多)更多代码:当编写 C 程序时:想象一下:您想要打开一些文件,对数据进行转码,管理其他错误条件,处理竞争条件?当一个简单的 ioctl 系统调用就足够了(当然前提是您知道自己在做什么)。

这样您的问题就得到了答案:您什么时候应该选择这种方式或那种方式?仅仅是因为对于你来说,此时此地,使用这个而不是那个来实现你想要实现的目标会简单得多。

相关内容