最近我在kobjects和sysfs中查看内核。
我知道/了解以下内容..
kobjects
对此规则也不例外kobjects
的层次结构(可能包括ksets
和其他k * stuff ...不确定)根据这些信息,我不确定我在运行echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
我可以看到cpufreq模块有一个名为store_scaling_governor
的函数来处理对这个'文件的写入...但是用户模式如何通过这个简单的回声超越内核模式?
答案 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/