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

我知道/理解以下内容。


所有内核对象使用的地址> 0x80000000
kobjects对此规则也不例外
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/

10-09 22:11