如何判断哪个内核模块充当 USB 设备的驱动程序?

如何判断哪个内核模块充当 USB 设备的驱动程序?

我有一台 Acer 上网本,带有内置摄像头,在 Ubuntu/x86 下运行得很好。我还有一堆同型号的破损上网本,这些上网本在多年的频繁使用中遭受了各种事故,可以作为备件来源。我买了一个 Orange Pi,我想在上面安装一个小型、精简的网络摄像头 - 屏幕上方窄条中的东西尺寸非常完美,而且我知道它是 USB(尽管是在 3.3 上运行的特殊雪花) V 而不是 USB 的标准 5),所以我提取了一个,找到了引脚分配,将其连接到我的 Orange Pi 上的 USB 数据、3.3V 和 GND,它在 lsusb 中显示得很好,与上网本上的相同:

Bus 001 Device 002: ID 04f2:b367 Chicony Electronics Co., Ltd 

这就是我的冒险遇到障碍的地方:我的 Pi 发行版中似乎没有内核模块来支持这款相机。毫不奇怪,我可能是世界上第一个想要将专为 Acer x86 上网本内置的相机连接到 ARM SBC 的人。为什么要在 ARM 构建中添加英特尔机器之外从未见过的硬件驱动程序? lsmod 不显示任何与视频相关的内容。我敢打赌,如果我知道它是哪一个,我可以编译并添加相关模块。

与此同时,我的(正在工作的)上网本的 lsusb 显示了 80 多个模块,其中大多数模块的名称并没有告诉我它们的用途。

   Module                  Size  Used by                                                                                                  
   option                 57344  0                                                                                                        
   huawei_cdc_ncm         16384  0                                                                                                        
   cdc_wdm                20480  1 huawei_cdc_ncm                                                                                         
   cdc_ncm                40960  1 huawei_cdc_ncm                                                                                         
   usb_wwan               20480  1 option                                                                                                 
   usbnet                 45056  2 cdc_ncm,huawei_cdc_ncm                                                                                 
   usbserial              45056  2 usb_wwan,option                                                                                        
   uas                    24576  0                                                                                                        
   usb_storage            69632  1 uas                                                                                                    
   binfmt_misc            20480  1                                                                                                        
   ccm                    20480  6                                                                                                        
   snd_hrtimer            16384  1                                                                                                        
   wl                   6447104  0                                                                                                        
   snd_hda_codec_realtek   110592  1                                                                                                      
   snd_hda_codec_generic    73728  1 snd_hda_codec_realtek                                                                                
   snd_hda_codec_hdmi     49152  1                                                                                                        
   uvcvideo               90112  0                                                                                                        
   videobuf2_vmalloc      16384  1 uvcvideo                                                                                               
   snd_hda_intel          45056  3                                                                                                        
   videobuf2_memops       16384  1 videobuf2_vmalloc
   videobuf2_v4l2         24576  1 uvcvideo
   videobuf2_core         40960  2 videobuf2_v4l2,uvcvideo
   videodev              188416  3 videobuf2_core,videobuf2_v4l2,uvcvideo
   snd_hda_codec         126976  4 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_realtek
   media                  40960  2 videodev,uvcvideo
   snd_hda_core           81920  5 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek
   snd_hwdep              20480  1 snd_hda_codec
   intel_powerclamp       16384  0
   snd_pcm                98304  4 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_core
   arc4                   16384  2
   coretemp               16384  0
   ath9k                 155648  0
   ath9k_common           36864  1 ath9k
   snd_seq_midi           16384  0
   ath9k_hw              471040  2 ath9k_common,ath9k
   snd_seq_midi_event     16384  1 snd_seq_midi
   input_leds             16384  0
   acer_wmi               20480  0
   joydev                 24576  0
   sparse_keymap          16384  1 acer_wmi
   ath                    32768  3 ath9k_common,ath9k,ath9k_hw
   serio_raw              16384  0
   wmi_bmof               16384  0
   mac80211              786432  1 ath9k
   rtsx_pci_ms            20480  0
   memstick               16384  1 rtsx_pci_ms
   snd_rawmidi            32768  1 snd_seq_midi
   snd_seq                65536  3 snd_seq_midi,snd_seq_midi_event
   lpc_ich                24576  0
   cfg80211              634880  5 wl,ath9k_common,ath9k,ath,mac80211
   snd_seq_device         16384  3 snd_seq,snd_seq_midi,snd_rawmidi
   snd_timer              32768  3 snd_seq,snd_hrtimer,snd_pcm
   mac_hid                16384  0
   snd                    81920  18 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_pcm,snd_rawmidi
   soundcore              16384  1 snd
   shpchp                 36864  0
   sch_fq_codel           20480  2
   cuse                   16384  3
   parport_pc             32768  0
   ppdev                  20480  0
   lp                     20480  0
   parport                49152  3 parport_pc,lp,ppdev
   ip_tables              28672  0
   x_tables               40960  1 ip_tables
   autofs4                40960  2
   rtsx_pci_sdmmc         24576  0
   gma500_gfx            184320  2
   i2c_algo_bit           16384  1 gma500_gfx
   drm_kms_helper        172032  1 gma500_gfx
   syscopyarea            16384  1 drm_kms_helper
   sysfillrect            16384  1 drm_kms_helper
   psmouse               151552  0
   sysimgblt              16384  1 drm_kms_helper
   ahci                   40960  2
   fb_sys_fops            16384  1 drm_kms_helper
   libahci                32768  1 ahci
   drm                   401408  4 drm_kms_helper,gma500_gfx
   r8169                  86016  0
   rtsx_pci               69632  2 rtsx_pci_sdmmc,rtsx_pci_ms
   mii                    16384  2 r8169,usbnet
   wmi                    24576  2 acer_wmi,wmi_bmof
   video                  45056  2 acer_wmi,gma500_gfx

我该如何找到合适的人?

答案1

您可以在内核源代码中搜索供应商 ID“04f2”,然后筛选产品 ID“b367”。我发现 2 个带有供应商 ID 的视频文件,尽管其中一个zr364xx变种c不再出现在版本 6 内核中。没有文件具有特定的产品 ID。你可以尝试编辑其他的uvc_driver.c通过复制结构条目/* Chicony CNF7129 (Asus EEE 100HE) */并更改产品 id,然后重新编译模块来创建文件。

答案2

您可以modinfo在给定的内核模块上使用来找出它适用于哪些设备。例如,如果您这样做sudo modinfo uvcvideo,您将获得 USB 类和特定 USB 设备的模式列表。某处有内核文档描述了该格式。

将该模式与您lsusb -v对特定 USB 设备执行的操作所得到的结果进行比较。

您还可以执行lsusb -t,然后/sys/bus/usb/devices/在 USB 树中查找特定设备,并按照driver符号链接查看为其加载了哪个模块。

最后,您可以使用udevadm各种方式(请参阅参考资料man udevadm)来获取类似的信息。

我的猜测是你的相机是由 处理的uvcvideo,然后有点令人惊讶的是它没有在 Orange Pi 上得到处理......

相关内容