sysfs bind/unbind attributes usage
Bjørn Mork
bjorn at mork.no
Tue Jul 1 06:43:58 EDT 2014
Raghavendra <arrao at cdac.in> writes:
> Hello,
>
> I would like to know more about manually probing/removing the devices
> through sysfs attributes.
> After searching for a while I came across two attributes 'bind' and
> 'unbind' present in all the drivers.
>
> Now how may I correctly use them to probe my devices.
> I sense the probing syntax is different for different kinds of drivers
> (I2C, SPI, PCI, USB, etc).
> I am mainly looking for probing I2C and SPI devices.
sysfs attributes are supposed to be documented under
'Documentation/ABI/' but there seems to be a few holes there:
bjorn at nemi:/usr/local/src/git/linux$ git grep bind Documentation/ABI/
Documentation/ABI/testing/configfs-usb-gadget: UDC - bind a gadget to UDC/unbind a gadget;
Documentation/ABI/testing/configfs-usb-gadget: to bind a gadget, empty string "" to unbind.
Documentation/ABI/testing/sysfs-bus-pci:What: /sys/bus/pci/drivers/.../bind
Documentation/ABI/testing/sysfs-bus-pci: the driver to attempt to bind to the device found at
Documentation/ABI/testing/sysfs-bus-pci: bindings. The format for the location is: DDDD:BB:DD.F.
Documentation/ABI/testing/sysfs-bus-pci: # echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/bind
Documentation/ABI/testing/sysfs-bus-pci:What: /sys/bus/pci/drivers/.../unbind
Documentation/ABI/testing/sysfs-bus-pci: driver to attempt to unbind from the device found at
Documentation/ABI/testing/sysfs-bus-pci: bindings. The format for the location is: DDDD:BB:DD.F.
Documentation/ABI/testing/sysfs-bus-pci: # echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/unbind
Documentation/ABI/testing/sysfs-bus-pci: for the device and attempt to bind to it. For example:
Documentation/ABI/testing/sysfs-bus-pci: to driver_override will have an opportunity to bind to the
Documentation/ABI/testing/sysfs-bus-pci: This returns the device to standard matching rules binding.
Documentation/ABI/testing/sysfs-bus-pci: Writing to driver_override does not automatically unbind the
Documentation/ABI/testing/sysfs-bus-pci: will not bind to any driver. This also allows devices to
Documentation/ABI/testing/sysfs-bus-pci: opt-out of driver binding using a driver_override name such as
Documentation/ABI/testing/sysfs-bus-usb: for the device and attempt to bind to it. For example:
I am pretty sure patches to fix this are accepted...
The bind/unbind attributes normally (always?) take a bus specific device
name as input. I.e something like the '0000:00:19.0' shown above for
PCI, or '4-2:1.2' for USB.
> Also I found related attributes called 'new_id and remove_id' (for PCI
> drivers) and also 'new_device and delete_device' (present in the i2c
> adapter devices).
These are better documented:
bjorn at nemi:/usr/local/src/git/linux$ git grep new_id Documentation/ABI/
Documentation/ABI/testing/sysfs-bus-pci:What: /sys/bus/pci/drivers/.../new_id
Documentation/ABI/testing/sysfs-bus-pci: # echo "8086 10f5" > /sys/bus/pci/drivers/foo/new_id
Documentation/ABI/testing/sysfs-bus-pci: that was dynamically added via the new_id sysfs entry.
Documentation/ABI/testing/sysfs-bus-usb:What: /sys/bus/usb/drivers/.../new_id
Documentation/ABI/testing/sysfs-bus-usb: # echo "8086 10f5" > /sys/bus/usb/drivers/foo/new_id
Documentation/ABI/testing/sysfs-bus-usb: # echo "0458 7045 0 0458 704c" > /sys/bus/usb/drivers/foo/new_id
Documentation/ABI/testing/sysfs-bus-usb: # cat /sys/bus/usb/drivers/foo/new_id
Documentation/ABI/testing/sysfs-bus-usb:What: /sys/bus/usb-serial/drivers/.../new_id
Documentation/ABI/testing/sysfs-bus-usb: "/sys/bus/usb/drivers/.../new_id" apply.
Documentation/ABI/testing/sysfs-bus-usb: that was dynamically added via the new_id sysfs entry.
Documentation/ABI/testing/sysfs-bus-usb: "/sys/bus/usb/drivers/.../new_id"
> Now how are they different from the bind/unbind
> attributes, because as far as I know, even they do the same thing.
No, they do different things.
The bind/unbind attributes tries to attach/detach a driver to/from a
device supported by that driver. The new_id/remove_id attributes
adds/removes device IDs to/from the list of devices supported by the
driver.
Adding a new device ID to a driver will usually cause previously unbound
devices with a matching ID to be bound though, which I guess is the part
confusing you.
> Could any one guide me through any documentation regarding all these issues
Looks like you'll have to write some of that documentation ;-)
Bjørn
More information about the Kernelnewbies
mailing list