最近,我在内核中查看了kobjects和sysfs。
我知道/理解以下内容。
所有内核对象使用的地址> 0x80000000kobjects
对此规则也不例外
sysfs只不过是kobjects
的层次结构(可能包括ksets
和其他k *内容。.不确定)
有了这些信息,我不确定运行echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
时会发生什么情况
我可以看到cpufreq模块具有一个名为store_scaling_governor
的函数,该函数可以处理对此“文件”的写入操作。但是,如何通过这种简单的回显将usermode转换为kernelmode?
最佳答案
当您执行命令echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
时,您的外壳将调用write
系统调用,然后内核将其分派给相应的处理程序。
cpufreq使用struct kobj_type ktype_cpufreq
设置sysfs_ops
。然后cpufreq在cpufreq_add_dev_interface()
中注册它。之后,内核可以获取相应的处理程序以在write
syscall上执行。
关于linux-kernel - 用户空间如何写入sysfs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17618326/