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