用户空间如何写入sysfs

时间:2013-07-12 15:18:52

标签: linux-kernel sysfs

最近我在kobjects和sysfs中查看内核。

我知道/了解以下内容..

  • 所有内核对象都使用地址> 0x80000000的
  • kobjects对此规则也不例外
  • sysfs只是kobjects的层次结构(可能包括ksets和其他k * stuff ...不确定)

根据这些信息,我不确定我在运行echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

时到底发生了什么

我可以看到cpufreq模块有一个名为store_scaling_governor的函数来处理对这个'文件的写入...但是用户模式如何通过这个简单的回声超越内核模式?

2 个答案:

答案 0 :(得分:6)

执行命令echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor时,shell调用write系统调用,然后内核将其分配给相应的处理程序。

cpufreq使用struct kobj_type ktype_cpufreq设置sysfs_ops。然后cpufreq在cpufreq_add_dev_interface()中注册它。之后,内核可以获得相应的处理程序以在write系统调用上执行。

答案 1 :(得分:0)

我可以告诉你一个用于从sysfs访问内核空间变量的实现(shell提示符中的用户空间)。基本上,在sys文件系统中暴露给用户空间的每组变量都显示为一个单独的文件在/sys/下。当你发出一个回音值> shell提示符中的/ sys / file-path(用户空间)。当你这样做时,在.store方法的内核空间中调用相应的方法。另外,当你发出cat / sys / file-path时,会调用相应的方法是.show in kernel。您可以在这里看到更多相关信息:http://lwn.net/Articles/31220/