Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How is userspace able to write to sysfs

Recently I was looking through the kernel at kobjects and sysfs.

I know/understand the following..

  • All kernel objects use addresses > 0x80000000
  • kobjects should be no exception to this rule
  • The sysfs is nothing but a hierarchy of kobjects (maybe includes ksets and other k* stuff..not sure)

Given this information, I'm not sure I understand exactly what happens when I run echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

I can see that the cpufreq module has a function called store_scaling_governor which handles writes to this 'file'..but how does usermode transcend into kernelmode with this simple echo?

like image 740
Guru Prasad Avatar asked Sep 03 '25 06:09

Guru Prasad


1 Answers

When you execute command echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor, your shell calls write system call, then kernel dispatch it for corresponding handler.

The cpufreq setups struct kobj_type ktype_cpufreq with sysfs_ops. Then cpufreq register it in cpufreq_add_dev_interface(). After that, kernel can get corresponding handler to execute on write syscall.

like image 61
Alexey Shmalko Avatar answered Sep 05 '25 01:09

Alexey Shmalko