Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hard time in understanding MODULE_DEVICE_TABLE(usb, id_table) usage

Tags:

I have a hard time understanding the exact usage of MODULE_DEVICE_TABLE(usb, id_table)

AFAIK this will generate the map files that will be used later by modprobe whenever a new device is inserted, it will match it against those map files and load the module if it matches.

But my misunderstanding is "isn't the module loaded anyway?"

I mean I already loaded it when I did insmod module-name. or am I missing something?

like image 250
silentnights Avatar asked Apr 06 '14 23:04

silentnights


People also ask

How does Linux USB work?

The Linux kernel supports two main types of USB drivers: drivers on a host system and drivers on a device. The USB drivers for a host system control the USB devices that are plugged into it, from the host's point of view (a common USB host is a desktop computer.)

What is Module_device_table?

MODULE_DEVICE_TABLE is used to generate map files by depmod program; When device is hot-plugged, bus driver generates hotplug event.

Does Linux support USB?

Linux currently supports almost all USB class devices (standard types of devices like keyboards, mice, modems, printers and speakers) and an ever-growing number of vendor-specific devices (such as USB to serial converters, digital cameras, Ethernet devices and MP3 players).

Where are the USB drivers installed in Linux?

Whether a driver for a USB device is there or not on a Linux system, a valid USB device will always be detected at the hardware and kernel spaces of a USB-enabled Linux system, since it is designed (and detected) as per the USB protocol specifications.


1 Answers

It is usually used to support hot-plugging, by loading/inserting the driver for a device if not already loaded.

There is a similar question here: Detect the presence of a device when it's hot plugged in Linux

(From my ans)

It works as follows:

  1. Each driver in the code exposes its vendor/device id using:

      MODULE_DEVICE_TABLE(of, omap_mcspi_of_match); 
  2. At compilation time the build process extracts this infomation from all the drivers and prepares a device table.

  3. When you insert the device, the device table is referred by the kernel and if an entry is found matching the device/vendor id of the added device, then its module is loaded and initialized.

like image 108
brokenfoot Avatar answered Oct 07 '22 17:10

brokenfoot