Linux 内核 Media 子系统「其他 USB 设备卡列表」完全解读:驱动、设备与 USB ID 对照手册
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 的 toctreeusb-cardlist、pci-cardlist、platform-cardlist、radio-cardlist、i2c-cardlist、misc-cardlist。other-usb-cardlist.rst正是其中的「杂项 USB」清单它没有涵盖在更细分的文档里而是以一张统一的Driver / Card name / USB IDs三列表格集中呈现。对用户而言这张表的核心价值在于通过 USB 设备的 VIDVendor ID厂商 ID与 PIDProduct ID产品 ID快速判断手上的硬件是否被内核支持、对应加载哪个驱动模块。USB 总线上的每个设备都带有idVendor:idProduct标识内核正是靠这两个 16 位编号在驱动注册的usb_device_id表中完成匹配并绑定驱动的。从源码结构看这些驱动全部位于 drivers/media/usb 目录下分别属于SDR软件无线电、DVB数字视频广播与V4L2视频采集三大类下文将逐类展开。二、完整设备对照表继承自原文档以下表格完整复刻原文档内容。USB ID 采用xxxx:yyyy的十六进制表示xxxx为厂商 IDVIDyyyy为产品 IDPID同一驱动支持多个 PID 时以逗号分隔驱动 (Driver)设备名 (Card name)USB IDairspyAirspy1d50:60a1dvb-as102Abilis Systems DVB-Titan1BA6:0001dvb-as102PCTV Systems picoStick (74e)2013:0246dvb-as102Elgato EyeTV DTT Deluxe0fd9:002cdvb-as102nBox DVB-T Dongle0b89:0007dvb-as102Sky IT Digital Key (green led)2137:0001b2c2-flexcop-usbTechnisat/B2C2 FlexCop II/IIb/III Digital TV0af7:0101go7007WIS GO7007 MPEG encoder1943:a250, 093b:a002, 093b:a004, 0eb1:6666, 0eb1:6668hackrfHackRF Software Decoder Radio1d50:6089hdpvrHauppauge HD PVR2040:4900, 2040:4901, 2040:4902, 2040:4982, 2040:4903msi2500Mirics MSi3101 SDR Dongle1df7:2500, 2040:d300pvrusb2Hauppauge 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:7510pwcCreative Webcam 5041E:400CpwcCreative Webcam Pro Ex041E:4011pwcLogitech QuickCam 3000 Pro046D:08B0pwcLogitech QuickCam Notebook Pro046D:08B1pwcLogitech QuickCam 4000 Pro046D:08B2pwcLogitech QuickCam Zoom (old model)046D:08B3pwcLogitech QuickCam Zoom (new model)046D:08B4pwcLogitech QuickCam Orbit/Sphere046D:08B5pwcLogitech/Cisco VT Camera046D:08B6pwcLogitech ViewPort AV 100046D:08B7pwcLogitech QuickCam046D:08B8pwcPhilips PCA645VC0471:0302pwcPhilips PCA646VC0471:0303pwcAskey VC010 type 20471:0304pwcPhilips PCVC675K (Vesta)0471:0307pwcPhilips PCVC680K (Vesta Pro)0471:0308pwcPhilips PCVC690K (Vesta Pro Scan)0471:030CpwcPhilips PCVC730K (ToUCam Fun), PCVC830 (ToUCam II)0471:0310pwcPhilips PCVC740K (ToUCam Pro), PCVC840 (ToUCam II)0471:0311pwcPhilips PCVC750K (ToUCam Pro Scan)0471:0312pwcPhilips PCVC720K/40 (ToUCam XS)0471:0313pwcPhilips SPC 900NC0471:0329pwcPhilips SPC 880NC0471:032CpwcSotec Afina Eye04CC:8116pwcSamsung MPC-C10055D:9000pwcSamsung MPC-C30055D:9001pwcSamsung SNC-35E (Ver3.0)055D:9002pwcAskey VC010 type 1069A:0001pwcAME Co. Afina Eye06BE:8116pwcVisionite VCS-UC3000d81:1900pwcVisionite VCS-UM1000d81:1910s2255drvSensoray 22551943:2255, 1943:2257stk1160STK1160 USB video capture dongle05e1:0408dvb-ttusb-budgetTechnotrend/Hauppauge Nova-USB devices0b48:1003, 0b48:1004, 0b48:1005dvb-ttusb_decTechnotrend/Hauppauge MPEG decoder DEC3000-s0b48:1006dvb-ttusb_decTechnotrend/Hauppauge MPEG decoder0b48:1007dvb-ttusb_decTechnotrend/Hauppauge MPEG decoder DEC2000-t0b48:1008dvb-ttusb_decTechnotrend/Hauppauge MPEG decoder DEC2540-t0b48:1009usbtvFushicai 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 软件无线电类airspydrivers/media/usb/airspy/airspy.c{ USB_DEVICE(0x1d50, 0x60a1) }, /* AirSpy */hackrfdrivers/media/usb/hackrf/hackrf.c{ USB_DEVICE(0x1d50, 0x6089) }, /* HackRF One */msi2500drivers/media/usb/msi2500/msi2500.cstatic 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 社区分配的厂商 IDAirspy 与 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_ID0x1BA6、AS102_USB_DEVICE_PID_00010x0001、PCTV_74E_USB_VID0x2013/PID0x0246、ELGATO_EYETV_DTT_USB_VID0x0fd9/PID0x002c、NBOX_DVBT_DONGLE_USB_VID0x0b89/PID0x0007、SKY_IT_DIGITAL_KEY_USB_VID0x2137/PID0x0001与文档表格逐项吻合。该驱动不仅匹配 ID还通过DRIVER_INFO宏为不同型号传递不同的配置参数如 Elgato 的0xC0、nBox 与 Sky 的0xA0说明同一驱动可依据 ID 区分型号并加载差异化配置。b2c2-flexcop-usbdrivers/media/usb/b2c2/flexcop-usb.cstatic 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-budgetdrivers/media/usb/ttusb-budget/dvb-ttusb-budget.cstatic const struct usb_device_id ttusb_table[] { {USB_DEVICE(0xb48, 0x1003)}, {USB_DEVICE(0xb48, 0x1004)}, {USB_DEVICE(0xb48, 0x1005)}, { } };dvb-ttusb_decdrivers/media/usb/ttusb-dec/ttusb_dec.cstatic 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 视频采集 / 编码类go7007drivers/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 编码器设备。这解释了为何该类设备在枚举时对固件版本敏感。hdpvrdrivers/media/usb/hdpvr/hdpvr-core.c使用HD_PVR_VENDOR_ID0x2040搭配五个产品 ID 常量HD_PVR_PRODUCT_ID~HD_PVR_PRODUCT_ID4即 4900/4901/4902/4982/4903对应 Hauppauge HD PVR 系列模拟/HDMI 采集盒。pvrusb2drivers/media/usb/pvrusb2 目录的 ID 表位于 pvrusb2-main.c13 个 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。stk1160drivers/media/usb/stk1160/stk1160-core.cstatic const struct usb_device_id stk1160_id_table[] { { USB_DEVICE(0x05e1, 0x0408) }, { } };usbtvdrivers/media/usb/usbtv/usbtv-core.cstatic 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两个接口。s2255drvdrivers/media/usb/s2255/s2255drv.cstatic 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 网络摄像头类pwcpwc 是 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 上曾经的主要使用门槛。驱动内部还按芯片代次拆分为 Kiarapwc-kiara.c、Timonpwc-timon.c、Nalapwc-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, idVendor1d50, idProduct60a14.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输出互相印证。常用模块名与设备类别的对应关系如下设备类型模块名示例源码位置SDRairspy、hackrf、msi2500drivers/media/usb/airspy、drivers/media/usb/hackrf、drivers/media/usb/msi2500DVB-T 调谐器as102drivers/media/usb/as102DVB 前端/解码dvb_ttusb_budget、dvb_ttusb_dec、b2c2-flexcop-usbdrivers/media/usb/ttusb-budget、drivers/media/usb/ttusb-dec、drivers/media/usb/b2c2视频采集pvrusb2、hdpvr、go7007、stk1160、usbtv、s2255drivers/media/usb/pvrusb2 等网络摄像头pwcdrivers/media/usb/pwc这些驱动的 Kconfig 选项集中在 drivers/media/usb/Kconfig如需在内核配置阶段启用可按类别打开对应的MEDIA_USB_SUPPORT子项。4.3 内核配置与编译前提SDR 类airspy/hackrf/msi2500依赖CONFIG_MEDIA_SUPPORT、CONFIG_MEDIA_USB_SUPPORT与CONFIG_RC_CORE之外的 SDR 框架CONFIG_VIDEO_V4L2及CONFIG_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语句为准。五、注意事项与限制文档表 ≠ 最终支持清单如 ttusb-dec 的0b48:1007在驱动源码中处于注释状态Unconfirmed遇到类似「表中有、代码中无」的条目时应以 drivers/media/usb 下对应驱动的usb_device_id表为最终依据。OEM 贴牌导致 VID 复杂同一硬件可能以多个品牌、多个 VID/PID 出售如 pvrusb2 覆盖 0x2040/0x1164/0x11ba/0x0ccd 四家 VID你的设备 ID 只要命中表中任一组合即可被识别。固件依赖pwc摄像头固件、go7007go7007-fw.c 固件加载等驱动需要额外固件文件才能工作仅匹配 USB ID 不代表开箱即用。匹配精度go7007 的 ID 表使用match_flags同时匹配 bcdDevice 版本与接口信息同一 PID 不同固件版本可能表现不同升级/降级设备固件前建议先确认内核版本兼容性。本表仅覆盖「其他」类 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.rst、i2c-cardlist.rst与radio-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再查表定位驱动最后用modinfo与dmesg确认加载状态即可完成从硬件识别到驱动验证的完整排查流程。输出文章【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考