簡體   English   中英

Linux:我怎么知道導出設備節點的模塊?

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

如果有一個/ dev設備節點及其主要/次要編號,我如何知道導出該節點的內核模塊名稱?

簡短回答:

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

每個設備通常與驅動程序相關聯,這就是“設備模型”的全部內容。 sysfs文件系統包含此設備及其相關驅動程序的表示。 不幸的是,似乎並非所有sysfs都具有設備節點的表示,因此僅當/ sys目錄包含/ dev目錄時才應用此選項。 讓我們以/dev/video0

在我的主板上, ls -al /dev/video0輸出是

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

所以主要數字是81而次要數字是0.讓我們深入了解sysfs:

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

sys/dev目錄包含sys/dev的char和塊設備的條目:

# 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

這到底與陌生的名字有什么聯系? 記住主要和次要數字,81和0? 我們來這個鏈接:

#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

現在我們可以看到這個設備點頭,即設備呈現給用戶空間的方式,與內核設備相關聯。 此關聯是通過鏈接進行的。 如果我們按照此鏈接,我們最終會進入一個帶有驅動程序鏈接的目錄。 驅動程序的名稱通常是模塊的名稱:

# 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

所以這里模塊的名稱是vpfe_capture

基於許多因素,這個問題的答案很可能是不同的。 例如,如果您正在運行udev,devfs,pre-devfs等。

如果你正在使用Ubuntu(或其他同樣現代的發行版), udevadm命令可能就是你想要的。

% udevadm info -q path -n /dev/cdrom
/devices/pci0000:00/0000:00:1f.1/host3/target3:0:0/3:0:0:0/block/sr0

所以,我的/ dev / cdrom是由sr驅動程序提供的,它位於sr_mod內核模塊中。 我不知道將/dev/cdrom作為參數的命令,並將sr_mod作為輸出打印。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM