
Linux 内核 DVB 驱动 dvb-usb-rtl28xxu 支持机型与 USB ID 全清单解析【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux本文围绕内核文档 dvb-usb-rtl28xxu-cardlist.rst 展开这是一份由内核官方维护的“驱动能力对照表”——它把 Realtek RTL28xxU 系列 USB DVB 驱动模块名dvb_usb_rtl28xxu支持的所有电视棒/采集棒与其 USB Vendor:Product ID 一一对应。读完本文你可以据此判断手中的 DVB-T / DVB-T2 / DAB 接收棒是否被内核直接支持、由哪一颗主芯片驱动并知道如何在运行时核对设备 ID、加载模块与验证接收链路。这份 cardlist 文档在内核文档体系中的位置Linux 内核的媒体子系统文档中usb-cardlist.rst 汇总了所有 USB 电视设备的驱动及其说明文档其中对dvb-usb-rtl28xxu的定位是Realtek RTL28xxU DVB USB并链接到本文核心文档 dvb-usb-rtl28xxu-cardlist.rst。这类*-cardlist.rst文档是内核作者随驱动同步维护的可检索清单cardlist结构统一为“Card name ↔ USB IDs”两列表格配合源码中的usb_device_id表使用文档用于人读、检索、核对源码中的rtl28xxu_id_table[]用于内核在枚举 USB 设备时做精确匹配。两条证据线互相印证是本文成文的基础。背景一个驱动两代主控三类衍生设备dvb_usb_rtl28xxu是 drivers/media/usb/dvb-usb-v2/rtl28xxu.c 中实现的 DVB USB v2 框架驱动源码文件头注明版权归属 Antti Palosaari 与 Thomas Mair。它面向的是一整个以 Realtek 芯片为核心的接收棒生态主控分为两代RTL2831U老一代 DVB-T 解调主控仅支持 DVB-T需要为特定调谐器配置专属解调参数RTL2832U新一代主控除 DVB-T 外配合从解调器slave demod可实现 DVB-T2/C 接收同时在驱动中它还与 SDR软件无线电子驱动关联部分机型可当 RTL-SDR 使用RTL2832P源码注释中的特殊分组指 RTL2832U 第二颗从解调器MN88472/MN88473、CXD2837ER 或 Si2168构成的 DVB-T2 双解调方案。主控型号的区分由内核在设备接入时自动完成驱动在rtl28xxu_identify_state()见 rtl28xxu.c中向设备发送一条老芯片不支持的零长度 I2C 读命令返回-EPIPE判定为 RTL2831U返回 0 判定为 RTL2832U。之后rtl28xxu_read_config()会通过 GPIO 使能与打开解调 I2C 网关逐一探测挂在 I2C 总线上的调谐器 ID 寄存器从而确定板载的调谐器型号详见下文“探测与调谐器类型”。编译开关为CONFIG_DVB_USB_RTL28XXUKconfig 定义见 drivers/media/usb/dvb-usb-v2/Kconfig它依赖DVB_USB_V2 I2C_MUX并会在MEDIA_SUBDRV_AUTOSELECT开启时自动连带选中 RTL2830/RTL2832 解调驱动、MN88472/MN88473/CXD2841ER/Si2168 等从解调器驱动以及 E4000、FC0012、FC0013、FC2580、MT2060、MXL5005S、QT1010、R820T、SI2157、TUA9001 等调谐器驱动。由此可见这份卡片清单的背后是一个“解调主控 从解调器 多种调谐器”的开放硬件组合平台同一颗 RTL2832U 可以搭载完全不同的调谐器因此必须以 USB ID 而非品牌来判断兼容性。官方完整支持机型清单Card list 原文全量保留以下 33 行全部来自文档原文的flat-table未做任何删减。USB ID 的格式为厂商ID(Vendor ID):产品ID(Product ID)均为十六进制一个机型出现两个 ID 表示同一产品有两个固件变体或版本。卡片名与源码中DVB_USB_DEVICE(..., Card name, ...)的字符串一一对应可作为人工对照表Card name机型名USB IDsASUS My Cinema-U3100Mini Plus V21b80:d3a8Astrometa DVB-T215f4:0131Compro VideoMate U620F185b:0620Compro VideoMate U650F185b:0650Crypto ReDi PC 50 A1f4d:a803Dexatek DK DVB-T Dongle1d19:1101Dexatek DK mini DVB-T Dongle1d19:1102DigitalNow Quad DVB-T Receiver0413:6680Freecom USB2.0 DVB-T14aa:0160、14aa:0161G-Tek Electronics Group Lifeview LV5TDLX DVB-T1f4d:b803GIGABYTE U73001b80:d393Genius TVGo DVB-T030458:707fGoTView MasterHD 35654:ca42Leadtek WinFast DTV Dongle mini0413:6a03Leadtek WinFast DTV2000DS Plus0413:6f12Leadtek Winfast DTV Dongle Mini D0413:6f0fMSI DIGIVOX Micro HD1d19:1104MaxMedia HU394-T1b80:d394PROlectrix DV1076691f4d:d803Peak DVB-T USB1b80:d395Realtek RTL2831U reference design0bda:2831Realtek RTL2832U reference design0bda:2832、0bda:2838Sveon STV201b80:d39dSveon STV211b80:d3b0Sveon STV271b80:d3afTURBO-X Pure TV Tuner DTT-20001b80:d3a4TerraTec Cinergy T Stick Black0ccd:00a9TerraTec Cinergy T Stick RC (Rev. 3)0ccd:00d3TerraTec Cinergy T Stick0ccd:00d7TerraTec NOXON DAB Stick0ccd:00b3TerraTec NOXON DAB Stick (rev 2)0ccd:00e0TerraTec NOXON DAB Stick (rev 3)0ccd:00b4Trekstor DVB-T Stick Terres 2.01f4d:C803几点值得注意的细节参考设计reference design两行0bda正是 Realtek 的厂商 IDinclude/media/dvb-usb-ids.h 中USB_VID_REALTEK 0x0bda因此0bda:2831/0bda:2832/0bda:2838是 Realtek 官方公板含“中国电视棒”常见的 RTL2832U R820T 组合。多品牌共用同一方案1b80前缀的 ASUS、GIGABYTE、Sveon、TURBO-X、MaxMedia、Peak 等多张卡片以及1d19的 Dexatek 系、1f4d的 G-Tek 系很多是同一 OEM 方案的贴牌产物这就是文档用“机型名”而非“芯片名”登记的原因。大写无关紧要Trekstor 的1f4d:C803在源码中写成0xC803USB_PID_TREKSTOR_TERRES_2_0十六进制大小写不影响值。从驱动源码交叉验证并按主控分组卡片清单只给“名字 ↔ ID”的映射并不区分硬件代际而真正的分组信息藏在 rtl28xxu.c 的rtl28xxu_id_table[]里。该表用注释明确划分为RTL2831U devices / RTL2832U devices / RTL2832P devices三段与文档逐条对应RTL2831U 分组DVB-T 单解调机型USB ID源码条目rtl28xxu_id_tableRealtek RTL2831U reference design0bda:2831USB_VID_REALTEK, USB_PID_REALTEK_RTL2831UFreecom USB2.0 DVB-T14aa:0160/14aa:0161USB_VID_WIDEVIEW, USB_PID_FREECOM_DVBT(_2)这一代可选的板载调谐器只有三种——QT1010、MT2060、MXL5005S。驱动在rtl2831u_read_config()rtl28xxu.c中先打开解调 I2C 网关依次读 QT10100x0f 寄存器应为 0x2c与 MT20600x00 寄存器应为 0x63的 ID 寄存器都探测不到就按 MXL5005S 处理随后在rtl2831u_frontend_attach()中把不同的平台参数频谱反转spec_inv、VTOP、KRF、AGC 目标值等随rtl2830_platform_data传给解调驱动。注意源码注释里 RTL2831U 的 GPIO 定义GPIO4 用于 MT2060 调谐器供电控制、GPIO2 控制 LED。RTL2832U 分组最大的一组DVB-T 为主机型USB IDRealtek RTL2832U reference design0bda:2832、0bda:2838TerraTec Cinergy T Stick Black0ccd:00a9G-Tek… Lifeview LV5TDLX DVB-T1f4d:b803TerraTec NOXON DAB Stick三个修订版0ccd:00b3/0ccd:00e0/0ccd:00b4Trekstor DVB-T Stick Terres 2.01f4d:C803Dexatek DK / DK mini / MSI DIGIVOX Micro HD1d19:1101/1d19:1102/1d19:1104DigitalNow Quad DVB-T Receiver0413:6680Leadtek Winfast DTV Dongle Mini D / WinFast DTV2000DS Plus / WinFast DTV Dongle mini0413:6f0f/0413:6f12/0413:6a03TerraTec Cinergy T Stick RC (Rev. 3) / T Stick0ccd:00d3/0ccd:00d7ASUS My Cinema-U3100Mini Plus V2 / GIGABYTE U7300 / MaxMedia HU394-T / Peak / Sveon STV20/21/27 / TURBO-X DTT-2000均为1b80:xxxxCompro VideoMate U620F / U650F185b:0620/185b:0650Crypto ReDi PC 50 A / PROlectrix DV1076691f4d:a803/1f4d:d803Genius TVGo DVB-T030458:707fRTL2832U 的调谐器探测逻辑rtl2832u_read_config()rtl28xxu.c比上一代复杂得多它要遍历 FC0012、FC0013、MT2266、FC2580、MT2063、MAX3543、TUA9001、MXL5007T、E4000、TDA18272、R820T、R828D、SI2157 共 13 种候选调谐器每种都通过“读特定 I2C 地址特定寄存器的特定值”来确认身份例如 FC0012 读 0x00 得 0xa1、R820T 读 0x00 得 0x69。个别调谐器还需要 GPIO 回调协作如 FC0012 的 VHF 使能GPIO6 翻转、TUA9001 的 RESETN/RXENGPIO4/GPIO1这部分由rtl2832u_fc0012_tuner_callback()等函数实现。RTL2832P 分组DVB-T2 双解调机型USB IDAstrometa DVB-T215f4:0131GoTView MasterHD 35654:ca42这是清单里最“特殊”的两条。RTL2832U 自身不具备 DVB-T2 解调能力需要外挂从解调器。rtl2832u_read_config()在探测到 R828D 调谐器后会用 GPIO0 对从解调器上下电复位再探测 MN88472ID 0x02、MN88473ID 0x03、CXD2837ERID 0xb1探测到 SI2157 调谐器后则探测 Si2168。随后的rtl2832u_frontend_attach()会把从解调器作为第二前端挂到adap-fe[1]如 MN8847x 走 I2C client、CXD2837ER 走cxd2841er_attach_t_c、Si2168 走si2168I2C client此时一个适配器内会有两个前端TS 流从从解调器复用回主解调器输出。若从解调器挂载失败驱动会打印日志并以“仅 DVB-T、降级模式”继续运行源码中err_slave_demod_failed:分支将slave_demod复位为 NONE。PID 过滤能力rtl28xxu_propsrtl28xxu.c声明适配器具备 PID 过滤器支持DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFFpid_filter_count 3232 条硬件 PID 过滤槽TS 流通过端点0x81的 bulk 传输送达配置为 6 个 URB、每个 URB 8×512 字节缓冲。USB ID 前缀VID与厂商对照文档里的 33 个 ID 虽然分属二十多个品牌但底层的厂商 ID前四位只有十余个全部可在 include/media/dvb-usb-ids.h 找到宏定义。下表给出了 VID → 定义宏 → 常见出处便于快速判断“谁的棒子”厂商 ID头文件宏卡片清单中的常见品牌0bdaUSB_VID_REALTEKRealtek 参考设计14aaUSB_VID_WIDEVIEWFreecom0ccdUSB_VID_TERRATECTerraTecCinergy / NOXON 全系1f4dUSB_VID_GTEKG-Tek / Lifeview、Trekstor、Crypto ReDi PC 50 A、PROlectrix1d19USB_VID_DEXATEKDexatek DK、MSI DIGIVOX0413USB_VID_LEADTEKLeadtek WinFast、DigitalNow1b80USB_VID_KWORLD_2KWorld OEM 系ASUS、GIGABYTE、Sveon、TURBO-X、MaxMedia、Peak185bUSB_VID_COMPROCompro VideoMate0458USB_VID_KYEGeniusKYE 旗下15f4USB_VID_HANFTEKAstrometa5654源码直接使用0x5654GoTView观察这张表可以得出一个实用结论同一个 VID 前缀尤其1b80、1d19、1f4d之下往往是同一套主板/方案的多个贴牌型号只要其中一个型号被内核支持同前缀同方案的姊妹型号通常也能工作——这正是内核文档坚持“按 USB ID 精确匹配”而用户实际选购时经常“按品牌猜”的原因。实践判断你的接收棒是否被支持拿到一根 DVB-T 棒后可按以下步骤核对它是否落在上表范围内读取设备 IDLinux 下无需 rootlsusb输出形如Bus 001 Device 004: ID 0bda:2832 Realtek Semiconductor Corp.其中0bda:2832就是用于对照清单的完整 ID。若没有lsusb也可读取 sysfscat /sys/bus/usb/devices/*/idVendor 2/dev/null | head cat /sys/bus/usb/devices/*/idProduct 2/dev/null | head与本文/官方文档清单比对把厂商:产品两个值都对上表。注意不要只看品牌——例如同样是 TerraTec只有表中四个具体 PID00a9/00d3/00d7与 NOXON 的00b3/00b4/00e0才由本驱动支持同样地0bda:2832与0bda:2838都被登记但其他 Realtek ID 不在清单内。确认驱动已加载将设备插入后若命中rtl28xxu_id_table[]内核会自动绑定驱动。可查看lsmod | grep rtl28xxu # 预期显示 dvb_usb_rtl28xxu dmesg | grep -i rtl28xxu # 应能看到 tunerxxx / demod 附着等日志 ls -l /dev/dvb/ # 成功后出现 adapter0/frontend0 等节点查看解出的硬件身份驱动探测完成后dmesg中rtl2831u_read_config/rtl2832u_read_config的调试路径会打印tunerFC0012之类的探测结论需开启dvb_usb调试这能告诉你棒内实际是哪颗调谐器。手动加载模块与可用参数若驱动编译为模块CONFIG_DVB_USB_RTL28XXUm可显式加载modprobe dvb_usb_rtl28xxu模块对外暴露两个参数源码见 rtl28xxu.c参数类型说明disable_rcint默认 0权限 0644置 1 时禁用 RTL2832U 的红外遥控接收。该选项同时会写IR_RX_IE0x00关闭 IR 中断——注释说明这是为了避免 IR 中断造成SDR 采样丢失对把 RTL2832U 棒当 RTL-SDR 使用的用户尤其重要adapter_nr由DVB_DEFINE_MOD_OPT_ADAPTER_NR提供指定 DVB 适配器编号dvb_adapter索引例如希望既看 DVB-T 又避免遥控器抢占带宽导致 SDR 丢采样可modprobe dvb_usb_rtl28xxu disable_rc1若设备 ID 不在清单内而你认为它“应当是”同芯片方案不要直接修改仓库或强绑——更稳妥的做法是确认 ID 后向内核媒体子系统提交 patch把新 ID 加入rtl28xxu_id_table[]并同步更新本文档的flat-table这正体现了“驱动源码表 cardlist 文档表必须成对维护”的内核惯例。遥控器RC支持的差异清单中有三行在源码表里带了专用 RC keymap其余为NULL即默认不映射物理按键TerraTec Cinergy T Stick Black0ccd:00a9→RC_MAP_TERRATEC_SLIMLeadtek WinFast DTV2000DS Plus0413:6f12→RC_MAP_LEADTEK_Y04G0051Astrometa DVB-T215f4:0131→RC_MAP_ASTROMETA_T2HYBRID两代主控的红外处理方式也不同rtl28xxu.cRTL2831U硬件自带 NEC 解码器rtl2831u_get_rc_config()仅开放 NEC/NECX/NEC32 三种协议驱动轮询读取interval 400ms并在rtl2831u_rc_query()中区分标准 16 位、扩展 24 位与完整 32 位 NEC 帧RTL2832U红外接收位于独立地址空间0xfc00段见 rtl28xxu.h采用RC_DRIVER_IR_RAW原始红外模式把硬件收到的 pulse/duration 数组逐个送入内核ir_raw_event_store_with_filter()交给内核通用 IR 解码器处理因此理论上支持内核所有 IR 解码协议轮询间隔 200mstimeout设为0xbf * 51与硬件 idle 长度配置匹配。从卡片清单到硬件框图驱动如何工作最后把上面的散点串成一张简化的数据流图帮助你理解为什么“一张卡片表”背后隐藏着完整的探测逻辑USB 接入 └─ rtl28xxu_identify_state(): 零长度 I2C 读 → -EPIPE? RTL2831U : RTL2832U └─ rtl28xxu_read_config(): ├─ 操作 SYS 域 GPIO供电/复位/使能 ├─ 打开解调 I2C 网关RTL2832U 另有关闭动作 ├─ 逐个探测 调谐器 IDQT1010/MT2060/…/R820T/SI2157 └─ RTL2832P 附加探测从解调器MN8847x/CXD2837ER/Si2168 └─ frontend_attach: 挂载 rtl2830/rtl2832 主解调可选从解调 → fe[1] └─ tuner_attach: 挂载对应调谐器驱动多经主解调的 muxed I2C └─ 成功后注册 DVB adapterPID 过滤 32 槽, bulk 0x81 流寄存器模型驱动通过 vendor 类型的usb_control_msg访问芯片寄存器按地址域划分功能内存映射注释在 rtl28xxu.h0x0000DEMOD 解调域、0x2000USB/SIE/端点/DMA 域、0x3000SYS 系统与 GPIO 域、0xfc00RC遥控器RTL2831U 无域读写在rtl28xxu_ctrl_msg()rtl28xxu.c中通过请求类型字节完成收发单条消息上限 128 字节。I2C 三种访问方式rtl28xxu_i2c_xfer()rtl28xxu.c按“集成解调访问address 0x10 页缓存→ 旧式 I2C → 新式 I2C 数据访问”的顺序选择协议——新式最贵通常需要两条 USB 消息且 RTL2831U 不支持因此仅在旧式无法承载如 I2C 写读组合时才使用对 RTL2832U Si2168 的设备还会强制new_i2c_write true。解调/调谐器驱动的衔接主解调rtl2830/rtl2832与 SDR 驱动rtl2832_sdr实现见 drivers/media/dvb-frontends/rtl2832.c 与 drivers/media/dvb-frontends/rtl2832_sdr.c。rtl2832u_tuner_attach()末尾会把 E4000、FC0012、FC2580、R820T 等支持 SDR 的调谐器机型注册一个rtl2832_sdrplatform device——这解释了为什么这批“电视棒”中相当一部分在社区里被当软件无线电前端使用也解释了驱动作者为何专门提供disable_rc来保护 SDR 采样不丢数据。更多阅读dvb-usb-rtl28xxu-cardlist.rst本文核心清单的原始文档usb-cardlist.rst全部 USB DVB 驱动的导航索引drivers/media/usb/dvb-usb-v2/rtl28xxu.c驱动主实现与rtl28xxu_id_table[]drivers/media/usb/dvb-usb-v2/rtl28xxu.h寄存器地址映射、命令定义与设备私有结构drivers/media/usb/dvb-usb-v2/KconfigCONFIG_DVB_USB_RTL28XXU及其依赖/联动选中的子驱动include/media/dvb-usb-ids.hUSB VID/PID 宏定义全集drivers/media/dvb-frontends/rtl2832.cRTL2832U 内建解调驱动另有 rtl2830、rtl2832_sdr 同目录Documentation/driver-api/media/drivers/dvb-usb.rstUSB DVB 设备的通用说明与固件指引。【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考