See: hotplug doc. If you run the sample code, you can see that a netlink
event is sent when a device is added/removed from USB
. This is part of the driver model. Each driver should attach to a BUS
; this can be platform
, USB
, I2C
, SPI
, PCI
, etc. As well, with in the sysfs
, there will be entries to identify the particular device. Often an I2C address can be used to identify a particular client/slave chip. The driver model also facilitates suspend, resume, ordered shutdown, etc.
The files in /dev/
are created by udev
or mdev
user-space programs . They associate a name with a device node (major,minor,char/block). You can use sysfs
and/or your udev
script to create a device name that you want based on netlink
information; most of which is available to udev
scripts.
Edit: For i2c
the bus master driver discovers the address of devices by running a probe
Note 1. A device is associated with a particular driver with a table. For example, the stargate machine file has imote2_i2c_board_info
which associates i2c
addresses with drivers. A similar table exists for SPI
devices. Platform
Note 2 devices are added with platform_add_devices()
. USB
and PCI
devices are identified by similar BUS
specific ids of a device. Usually a machine file (or more recently device tree
) associates the two.
See Also: Linux Journal - I2C Drivers pt1, Linux Journal - I2C Drivers pt2
I believe a source of confusion is that all drivers/devices are those you see in the /dev/
directory. This is not true. Only top level drivers are seen by users. Many Linux drivers/devices are used by a master device. They can form a hierarchy of devices. Usually only the top level device is exposed to the user. There are functions such as spi_write()
, that a higher level driver can use to talk via SPI
, the SPI
device is not exposed to user space
. Sound and media/tv capture cards often use an SPI
device, but the user never knows this BUS
exists and is being used. Often multiple card vendors will use the same chip-sets underneath. Instead of writing drivers for every card, only some glue for the card is written. Then a generic collection of chip
drivers are used with the glue to tie it all together at the top of the hierarchy; this is the top level driver that is exposed to user space
. This also allows smartTM chip vendors to create good drivers that system integrators can use.
Note 1: By i2c
probe, I mean an I2C
message that requests all registered addresses on the bus. I am not sure if probe is the correct i2c
nomenclature.
Note 2 Platform
devices are SOC devices. They have no associated BUS, so platform is a catch-all. Typically, platform
devices are integrated with the CPU (SOC stands for system on chip).