Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linux: how do i know the module that exports a device node?

Tags:

If a have a /dev device node and its major/minor numbers how do i know the kernel module name that exported this node?

like image 917
Inso Reiges Avatar asked May 26 '10 07:05

Inso Reiges


People also ask

What is Modalia Linux?

What is a modalias file? As described above, a modalias file simply exposes the information that a given piece of hardware already tells the kernel. This file simply specifies a structure for exposing this information.

Where can you find the device nodes of a Linux system?

The device nodes are stored in or have links to the /dev directory. When the ls -l command is used to list these files, their major and minor numbers are displayed.

What is a device node Linux?

Device nodes A device node, device file, or device special file is a type of special file used on many Unix-like operating systems, including Linux. Device nodes facilitate transparent communication between user space applications and computer hardware.


1 Answers

Short answer :

cd /sys/dev/char/major:minor/device/driver/ ls -al | grep module 

Each device is generally associated with a driver, and this is all what the "device model" is about. The sysfs filesystem contains a representation of this devices and their associated driver. Unfortuantely, it seems not all sysfs have a representation of the device nodes, so this applyd only if your /sys directory contains a /dev directory. Let's take an example, with /dev/video0

On my board, ls -al /dev/video0 output is

crw-------    1 root     root      81,   0 Jan  1 00:00 video0 

So major number is 81 and minor number is 0. Let's dive into sysfs :

# cd /sys # ls block     class     devices   fs        module bus       dev       firmware  kernel 

The sys/dev directory contains entry for the char and block devices of the system :

# cd dev # cd char # ls 10:61  13:64  1:3    1:8    249:0  252:0  29:0   4:65   81:0   89:1 10:62  1:1    1:5    1:9    250:0  253:0  29:1   5:0    81:2 10:63  1:11   1:7    248:0  251:0  254:0  4:64   5:1    81:3 

What the hell are this links with strange names ? Remember the major and minor number, 81 and 0 ? Let's follow this link :

#cd major:minor (ie 81:0) #ls -al drwxr-xr-x    2 root     root            0 Jan  1 01:56 . drwxr-xr-x    3 root     root            0 Jan  1 01:56 .. -r--r--r--    1 root     root         4096 Jan  1 01:56 dev lrwxrwxrwx    1 root     root            0 Jan  1 01:56 device -> ../../../vpfe-capture -r--r--r--    1 root     root         4096 Jan  1 01:56 index -r--r--r--    1 root     root         4096 Jan  1 01:56 name lrwxrwxrwx    1 root     root            0 Jan  1 01:56 subsystem -> ../../../../../class/video4linux -rw-r--r--    1 root     root         4096 Jan  1 01:56 uevent 

Now we can see that this device nod, which is how the device is presented to userspace, is associated with a kernel device. This association is made through a link. If we follow this link, we end up in a directory, with a driver link. The name of the driver is usually the name of the module :

# ls -al drwxr-xr-x    3 root     root            0 Jan  1 01:56 . drwxr-xr-x   25 root     root            0 Jan  1 00:00 .. lrwxrwxrwx    1 root     root            0 Jan  1 01:56 driver -> ../../../bus/platform/drivers/vpfe-capture -r--r--r--    1 root     root         4096 Jan  1 01:56 modalias lrwxrwxrwx    1 root     root            0 Jan  1 01:56 subsystem -> ../../../bus/platform -rw-r--r--    1 root     root         4096 Jan  1 01:56 uevent drwxr-xr-x    3 root     root            0 Jan  1 01:56 video4linux 

So here the name of the module is vpfe_capture

like image 124
shodanex Avatar answered Nov 26 '22 07:11

shodanex