Linux 内核 Media 子系统「其他 USB 设备卡列表」完全解读:驱动、设备与 USB ID 对照手册
2026/9/11 15:38:30 网站建设 项目流程

Linux 内核 Media 子系统「其他 USB 设备卡列表」完全解读:驱动、设备与 USB ID 对照手册

【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux

本文基于 Linux 内核源码树中的 Documentation/admin-guide/media/other-usb-cardlist.rst 展开,该文档收录了 Linux media 子系统下不隶属于常规 V4L/DVB 分类的15 个 USB 驱动及其支持的约 60 个设备 USB ID,覆盖 SDR 软件无线电、DVB-T 数字电视、USB 视频采集与网络摄像头等场景。读完本文,你将掌握如何阅读内核 USB ID 表、如何用lsusb核对设备 VID/PID、如何在 drivers/media/usb 源码中定位驱动绑定关系,以及常见设备对应的内核模块名。

一、背景:这张「卡列表」是什么

在 Linux media 子系统中,PCI、USB、平台设备驱动的支持情况以「卡片列表」(card list)的形式集中归档在 Documentation/admin-guide/media/cardlist.rst 之下,其目录入口见 Documentation/admin-guide/media/index.rst 的 toctree(usb-cardlistpci-cardlistplatform-cardlistradio-cardlisti2c-cardlistmisc-cardlist)。other-usb-cardlist.rst正是其中的「杂项 USB」清单,它没有涵盖在更细分的文档里,而是以一张统一的Driver / Card name / USB IDs三列表格集中呈现。

对用户而言,这张表的核心价值在于:通过 USB 设备的 VID(Vendor ID,厂商 ID)与 PID(Product ID,产品 ID),快速判断手上的硬件是否被内核支持、对应加载哪个驱动模块。USB 总线上的每个设备都带有idVendor:idProduct标识,内核正是靠这两个 16 位编号在驱动注册的usb_device_id表中完成匹配并绑定驱动的。

从源码结构看,这些驱动全部位于 drivers/media/usb 目录下,分别属于SDR(软件无线电)、DVB(数字视频广播)与V4L2(视频采集)三大类,下文将逐类展开。

二、完整设备对照表(继承自原文档)

以下表格完整复刻原文档内容。USB ID 采用xxxx:yyyy的十六进制表示,xxxx为厂商 ID(VID),yyyy为产品 ID(PID),同一驱动支持多个 PID 时以逗号分隔:

驱动 (Driver)设备名 (Card name)USB ID
airspyAirspy1d50:60a1
dvb-as102Abilis Systems DVB-Titan1BA6:0001
dvb-as102PCTV Systems picoStick (74e)2013:0246
dvb-as102Elgato EyeTV DTT Deluxe0fd9:002c
dvb-as102nBox DVB-T Dongle0b89:0007
dvb-as102Sky IT Digital Key (green led)2137:0001
b2c2-flexcop-usbTechnisat/B2C2 FlexCop II/IIb/III Digital TV0af7:0101
go7007WIS GO7007 MPEG encoder1943:a250, 093b:a002, 093b:a004, 0eb1:6666, 0eb1:6668
hackrfHackRF Software Decoder Radio1d50:6089
hdpvrHauppauge HD PVR2040:4900, 2040:4901, 2040:4902, 2040:4982, 2040:4903
msi2500Mirics MSi3101 SDR Dongle1df7:2500, 2040:d300
pvrusb2Hauppauge WinTV-PVR USB22040:2900, 2040:2950, 2040:2400, 1164:0622, 1164:0602, 11ba:1003, 11ba:1001, 2040:7300, 2040:7500, 2040:7501, 0ccd:0039, 2040:7502, 2040:7510
pwcCreative Webcam 5041E:400C
pwcCreative Webcam Pro Ex041E:4011
pwcLogitech QuickCam 3000 Pro046D:08B0
pwcLogitech QuickCam Notebook Pro046D:08B1
pwcLogitech QuickCam 4000 Pro046D:08B2
pwcLogitech QuickCam Zoom (old model)046D:08B3
pwcLogitech QuickCam Zoom (new model)046D:08B4
pwcLogitech QuickCam Orbit/Sphere046D:08B5
pwcLogitech/Cisco VT Camera046D:08B6
pwcLogitech ViewPort AV 100046D:08B7
pwcLogitech QuickCam046D:08B8
pwcPhilips PCA645VC0471:0302
pwcPhilips PCA646VC0471:0303
pwcAskey VC010 type 20471:0304
pwcPhilips PCVC675K (Vesta)0471:0307
pwcPhilips PCVC680K (Vesta Pro)0471:0308
pwcPhilips PCVC690K (Vesta Pro Scan)0471:030C
pwcPhilips PCVC730K (ToUCam Fun), PCVC830 (ToUCam II)0471:0310
pwcPhilips PCVC740K (ToUCam Pro), PCVC840 (ToUCam II)0471:0311
pwcPhilips PCVC750K (ToUCam Pro Scan)0471:0312
pwcPhilips PCVC720K/40 (ToUCam XS)0471:0313
pwcPhilips SPC 900NC0471:0329
pwcPhilips SPC 880NC0471:032C
pwcSotec Afina Eye04CC:8116
pwcSamsung MPC-C10055D:9000
pwcSamsung MPC-C30055D:9001
pwcSamsung SNC-35E (Ver3.0)055D:9002
pwcAskey VC010 type 1069A:0001
pwcAME Co. Afina Eye06BE:8116
pwcVisionite VCS-UC3000d81:1900
pwcVisionite VCS-UM1000d81:1910
s2255drvSensoray 22551943:2255, 1943:2257
stk1160STK1160 USB video capture dongle05e1:0408
dvb-ttusb-budgetTechnotrend/Hauppauge Nova-USB devices0b48:1003, 0b48:1004, 0b48:1005
dvb-ttusb_decTechnotrend/Hauppauge MPEG decoder DEC3000-s0b48:1006
dvb-ttusb_decTechnotrend/Hauppauge MPEG decoder0b48:1007
dvb-ttusb_decTechnotrend/Hauppauge MPEG decoder DEC2000-t0b48:1008
dvb-ttusb_decTechnotrend/Hauppauge MPEG decoder DEC2540-t0b48:1009
usbtvFushicai USBTV007 Audio-Video Grabber1b71:3002, 1f71:3301, 1f71:3306

可以看到,pwc是这张表中覆盖设备最多的驱动(26 个 PID,横跨 Creative、Logitech、Philips、Samsung、Visionite 等多个品牌),pvrusb2次之(13 个 PID)。这两个驱动的设备列表在源码中同样有完整的一一对应关系,下文将结合源码验证。

三、从源码验证:USB ID 是如何绑定到驱动的

这张表并非孤立的说明文字,其中每个 ID 都能在 drivers/media/usb 的源码里找到对应的usb_device_id表项。USB 核心在设备枚举时遍历驱动注册的 ID 表,命中后调用驱动的 probe 回调完成绑定。以下按目录逐一核对:

3.1 SDR 软件无线电类

airspy(drivers/media/usb/airspy/airspy.c):

{ USB_DEVICE(0x1d50, 0x60a1) }, /* AirSpy */

hackrf(drivers/media/usb/hackrf/hackrf.c):

{ USB_DEVICE(0x1d50, 0x6089) }, /* HackRF One */

msi2500(drivers/media/usb/msi2500/msi2500.c):

static const struct usb_device_id msi2500_id_table[] = { {USB_DEVICE(0x1df7, 0x2500)}, /* Mirics MSi3101 SDR Dongle */ {USB_DEVICE(0x2040, 0xd300)}, /* Hauppauge WinTV 133559 LF */ { } };

注意一个有趣的现象:0x1d50是 OpenMoko 社区分配的厂商 ID,Airspy 与 HackRF One 都使用该 VID;而2040:d300表明 msi2500 还以 Hauppauge 品牌(VID 0x2040)贴牌销售过。这正体现了「同一驱动支持多家品牌 OEM 贴牌设备」的常见情形——列在表中的「Card name」并非产品名与驱动一一对应的充分条件,最终判据永远是 VID:PID。

3.2 DVB-T 调谐器类

dvb-as102的 ID 表定义在 drivers/media/usb/as102/as102_usb_drv.c,其 VID/PID 常量集中在 drivers/media/usb/as102/as102_usb_drv.h:

{ USB_DEVICE(AS102_USB_DEVICE_VENDOR_ID, AS102_USB_DEVICE_PID_0001), ... }, /* 1BA6:0001 Abilis Systems DVB-Titan */ { USB_DEVICE(PCTV_74E_USB_VID, PCTV_74E_USB_PID), ... }, /* 2013:0246 PCTV picoStick 74e */ { USB_DEVICE(ELGATO_EYETV_DTT_USB_VID, ELGATO_EYETV_DTT_USB_PID), ... }, /* 0fd9:002c Elgato EyeTV DTT Deluxe */ { USB_DEVICE(NBOX_DVBT_DONGLE_USB_VID, NBOX_DVBT_DONGLE_USB_PID), ... }, /* 0b89:0007 nBox DVB-T Dongle */ { USB_DEVICE(SKY_IT_DIGITAL_KEY_USB_VID, SKY_IT_DIGITAL_KEY_USB_PID), ... }, /* 2137:0001 Sky IT Digital Key */

其中常量值(见 as102_usb_drv.h)为:AS102_USB_DEVICE_VENDOR_ID=0x1BA6AS102_USB_DEVICE_PID_0001=0x0001PCTV_74E_USB_VID=0x2013/PID=0x0246ELGATO_EYETV_DTT_USB_VID=0x0fd9/PID=0x002cNBOX_DVBT_DONGLE_USB_VID=0x0b89/PID=0x0007SKY_IT_DIGITAL_KEY_USB_VID=0x2137/PID=0x0001,与文档表格逐项吻合。该驱动不仅匹配 ID,还通过DRIVER_INFO宏为不同型号传递不同的配置参数(如 Elgato 的0xC0、nBox 与 Sky 的0xA0),说明同一驱动可依据 ID 区分型号并加载差异化配置

b2c2-flexcop-usb(drivers/media/usb/b2c2/flexcop-usb.c):

static const struct usb_device_id flexcop_usb_table[] = { { USB_DEVICE(0x0af7, 0x0101) }, { } };

该驱动支持 Technisat/B2C2 FlexCop II/IIb/III 系列 USB DVB 设备,属于 DVB-S/DVB-T 通用前端方案。

dvb-ttusb-budget(drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c):

static const struct usb_device_id ttusb_table[] = { {USB_DEVICE(0xb48, 0x1003)}, {USB_DEVICE(0xb48, 0x1004)}, {USB_DEVICE(0xb48, 0x1005)}, { } };

dvb-ttusb_dec(drivers/media/usb/ttusb-dec/ttusb_dec.c):

static const struct usb_device_id ttusb_dec_table[] = { {USB_DEVICE(0x0b48, 0x1006)}, /* DEC3000-s */ /*{USB_DEVICE(0x0b48, 0x1007)}, Unconfirmed */ {USB_DEVICE(0x0b48, 0x1008)}, /* DEC2000-t */ {USB_DEVICE(0x0b48, 0x1009)}, /* DEC2540-t */ { } };

从源码可以推断,文档中列为0b48:1007的那一条在驱动中处于注释状态(标注Unconfirmed,未经验证),因此实际绑定仅覆盖 1006/1008/1009 三个 PID。这是一个典型的「文档与代码存在细微出入」案例,也提醒读者:内核文档的 ID 表是参考索引,驱动源码中的usb_device_id表才是设备能否被识别的最终依据

3.3 USB 视频采集 / 编码类

go7007(drivers/media/usb/go7007/go7007-usb.c)比较特殊,其 ID 表没有全部使用简单的USB_DEVICE宏,而是通过match_flags组合USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION(同时匹配设备与 bcdDevice 版本号)与USB_DEVICE_ID_MATCH_INT_INFO(匹配接口类/子类/协议)等标志做多维度匹配,用于区分同一 PID 下固件版本不同的 WIS GO7007 MPEG 编码器设备。这解释了为何该类设备在枚举时对固件版本敏感。

hdpvr(drivers/media/usb/hdpvr/hdpvr-core.c)使用HD_PVR_VENDOR_ID(0x2040)搭配五个产品 ID 常量(HD_PVR_PRODUCT_ID~HD_PVR_PRODUCT_ID4,即 4900/4901/4902/4982/4903),对应 Hauppauge HD PVR 系列模拟/HDMI 采集盒。

pvrusb2(drivers/media/usb/pvrusb2 目录)的 ID 表位于 pvrusb2-main.c,13 个 PID 覆盖 Hauppauge WinTV-PVR USB2 全系(2040:2900/2950/2400/7300/7500/7501/7502/7510)以及 OEM 贴牌型号(1164:xxxx 为 Hauppauge 的 Conexant 体系 VID、11ba:xxxx、0ccd:0039 等)。pvrusb2 是 media 子系统中结构最复杂的复合设备驱动之一,同时提供 V4L2 视频、音频与 DVB-T 功能,其设备属性(含支持的标准、调谐器型号)集中定义在 pvrusb2-devattr.c。

stk1160(drivers/media/usb/stk1160/stk1160-core.c):

static const struct usb_device_id stk1160_id_table[] = { { USB_DEVICE(0x05e1, 0x0408) }, { } };

usbtv(drivers/media/usb/usbtv/usbtv-core.c):

static const struct usb_device_id usbtv_id_table[] = { { USB_DEVICE(0x1b71, 0x3002) }, { USB_DEVICE(0x1f71, 0x3301) }, { USB_DEVICE(0x1f71, 0x3306) }, { } };

Fushicai USBTV007 是经典的「免驱」模拟音视频采集棒,usbtv驱动同时注册了 V4L2 视频(usbtv-video.c)与 ALSA 音频(usbtv-audio.c)两个接口。

s2255drv(drivers/media/usb/s2255/s2255drv.c):

static const struct usb_device_id s2255_table[] = { {USB_DEVICE(USB_SENSORAY_VID, 0x2255)}, {USB_DEVICE(USB_SENSORAY_VID, 0x2257)}, /*same family as 2255*/ { } };

其中USB_SENSORAY_VID为 0x1943,对应 Sensoray 2255/2257 四通道 USB 视频采集卡。

3.4 网络摄像头类(pwc)

pwc 是 Philips Webcam 系列驱动,其 26 个 PID 的 ID 表定义在 drivers/media/usb/pwc/pwc-if.c 起的pwc_device_table[]中,表项带逐行注释(如/* Creative Webcam 5 *//* Logitech QuickCam 3000 Pro */),与文档完全一致。值得一提的是 pwc 驱动还依赖专有固件:设备初始化时需要上传从摄像头 EEPROM 读出的固件镜像(由 pwc-if.c 中的固件加载逻辑处理),这是该系列摄像头在 Linux 上曾经的主要使用门槛。驱动内部还按芯片代次拆分为 Kiara(pwc-kiara.c)、Timon(pwc-timon.c)、Nala(pwc-nala.h)等变体实现,对应不同的解码算法(pwc-dec1.c、pwc-dec23.c)。

四、实战:如何在你的系统上核对与使用这些设备

4.1 用 lsusb 读取设备的 VID:PID

任何 USB 设备插入后,都可以通过lsusb查看其真实 ID:

$ lsusb Bus 001 Device 004: ID 1d50:60a1 OpenMoko, Inc. Airspy Bus 001 Device 005: ID 2040:4902 Hauppauge

第一列的1d50:60a1即为设备的 VID:PID,与本文表格对照即可判断内核是否有对应驱动支持。更精确的匹配结果可在内核日志中确认:

$ dmesg | grep -i usb usb 1-1: New USB device found, idVendor=1d50, idProduct=60a1

4.2 确认驱动模块并查看绑定情况

驱动加载后,/sys/bus/usb/drivers/下会出现对应驱动目录,设备会以VID:PID形式出现在其bind关系中:

$ ls /sys/bus/usb/drivers/airspy/ 1-1:1.0 bind module uevent unbind $ modinfo airspy filename: /lib/modules/.../kernel/drivers/media/usb/airspy/airspy.ko alias: usb:v1D50p60A1d*dc*dsc*dp*ic*isc*ip*in*

modinfo输出的alias字段会展开该驱动注册的全部 USB ID 通配模式,可与lsusb输出互相印证。常用模块名与设备类别的对应关系如下:

设备类型模块名(示例)源码位置
SDRairspyhackrfmsi2500drivers/media/usb/airspy、drivers/media/usb/hackrf、drivers/media/usb/msi2500
DVB-T 调谐器as102drivers/media/usb/as102
DVB 前端/解码dvb_ttusb_budgetdvb_ttusb_decb2c2-flexcop-usbdrivers/media/usb/ttusb-budget、drivers/media/usb/ttusb-dec、drivers/media/usb/b2c2
视频采集pvrusb2hdpvrgo7007stk1160usbtvs2255drivers/media/usb/pvrusb2 等
网络摄像头pwcdrivers/media/usb/pwc

这些驱动的 Kconfig 选项集中在 drivers/media/usb/Kconfig,如需在内核配置阶段启用,可按类别打开对应的MEDIA_USB_SUPPORT子项。

4.3 内核配置与编译前提

  • SDR 类(airspy/hackrf/msi2500)依赖CONFIG_MEDIA_SUPPORTCONFIG_MEDIA_USB_SUPPORTCONFIG_RC_CORE之外的 SDR 框架(CONFIG_VIDEO_V4L2CONFIG_MEDIA_CONTROLLER视需要开启),启用后可在用户空间配合rtl-sdr生态或 GNU Radio 使用;
  • DVB 类(as102/ttusb/flexcop)依赖CONFIG_DVB_CORE及对应前端(demod/tuner)驱动,配合 DVB 应用(如dvbv5-zap)扫描频道;
  • 视频类(pvrusb2/hdpvr/stk1160/usbtv 等)依赖CONFIG_VIDEO_V4L2,加载后产生/dev/video0设备节点,可用 V4L2 工具(v4l2-ctl --list-devices)查看。

具体到各驱动的依赖项,以 drivers/media/usb/airspy/Kconfig、drivers/media/usb/as102/Kconfig 等文件中的depends on语句为准。

五、注意事项与限制

  1. 文档表 ≠ 最终支持清单:如 ttusb-dec 的0b48:1007在驱动源码中处于注释状态(Unconfirmed),遇到类似「表中有、代码中无」的条目时,应以 drivers/media/usb 下对应驱动的usb_device_id表为最终依据。
  2. OEM 贴牌导致 VID 复杂:同一硬件可能以多个品牌、多个 VID/PID 出售(如 pvrusb2 覆盖 0x2040/0x1164/0x11ba/0x0ccd 四家 VID),你的设备 ID 只要命中表中任一组合即可被识别。
  3. 固件依赖:pwc(摄像头固件)、go7007(go7007-fw.c 固件加载)等驱动需要额外固件文件才能工作,仅匹配 USB ID 不代表开箱即用。
  4. 匹配精度:go7007 的 ID 表使用match_flags同时匹配 bcdDevice 版本与接口信息,同一 PID 不同固件版本可能表现不同,升级/降级设备固件前建议先确认内核版本兼容性。
  5. 本表仅覆盖「其他」类 USB 设备:更多 PCI 设备见 Documentation/admin-guide/media/pci-cardlist.rst,常规 USB 设备见 Documentation/admin-guide/media/usb-cardlist.rst,平台设备、I²C 器件与收音设备分别见 Documentation/admin-guide/media 目录下的platform-cardlist.rsti2c-cardlist.rstradio-cardlist.rst

六、小结

other-usb-cardlist.rst用一张表浓缩了 Linux media 子系统对「杂项 USB 设备」的支持全貌:从 Airspy/HackRF 这类开源 SDR 硬件,到 Elgato/PCTV/nBox 等 DVB-T 电视棒,再到 Hauppauge 全家桶(HD PVR、WinTV-PVR)与 Philips 系网络摄像头。结合 drivers/media/usb 下的驱动源码,你可以把这张表当作「VID:PID → 内核模块 → 源码实现」的索引地图:先用lsusb拿到设备 ID,再查表定位驱动,最后用modinfodmesg确认加载状态,即可完成从硬件识别到驱动验证的完整排查流程。

<输出文章>

【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询