I’m using the lm75 kernel module to interact with a sensor on a custom board. Every things works fine, I have my device mounted in /sys/bus/i2c/devices/5-0048. But I would like to let the user set the max temp hysteresis so in other words let the user write into the temp_max_hyst file. The permission for this file is read only except for root
My question is, is there any way to mount my device in /dev?
Advertisement
Answer
Mounting isn’t the right term here so you won’t find anything searching for that. Block devices with file systems are mounted on directories, which then become mount points.
Here the device 5-0048
is bound to the driver lm75. You’d find the device is there, assuming it appears in the device tree or board info, whether or not the lm75 driver exists. If and when the lm75 driver binds to the device, it creates a new device of class hwmon
. It is that device which has attributes, like temp_max_hyst
, that you are interested in.
What you see in /dev are known as device nodes. While many devices, once bound to a driver, will have a device node created to interact with the device, this doesn’t have to happen. There are probably a bunch of devices that appear in /sys/class/regulator
or /sys/class/net
that have no nodes in /dev
associated with them.
Drivers of type hwmon, like lm75, don’t normally create any device nodes to provide a char device or block device userspace interface to the hardware. So there is nothing to appear in dev for this device. The attributes of the hwmon device are all you get.
But your problem has a simple solution. As root, just chmod a+w temp_max_hyst
or chown user_account temp_max_hyst
or (this is probably best) chmod g+w temp_max_hyst ; chgrp hw_access_group temp_max_hyst
and add the user to a group hw_access_group. You could use an existing group, there might be one named wheel
or adm
that would be used for something like this, or make a new one just for hwmon access.
Of course this won’t persist across a reboot, as sysfs is not a real file system on disk. To make the change persistent, the best way is to create a udev rule that automatically effects the chmod/chown when it detects the hwmon device. It’s the hwmon device you care about here, not the i2c device. Try running udevadm info -a /sys/class/hwmon/hwmon0
.