我有一台 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 上得到处理......