Linux 内核 dvb-usb-ce6230 驱动设备卡列表详解:CE6230 参考设计与 AVerMedia A310 的 USB ID 识别

发布时间:2026/9/9 15:26:14
Linux 内核 dvb-usb-ce6230 驱动设备卡列表详解:CE6230 参考设计与 AVerMedia A310 的 USB ID 识别 Linux 内核 dvb-usb-ce6230 驱动设备卡列表详解CE6230 参考设计与 AVerMedia A310 的 USB ID 识别【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux导读dvb-usb-ce6230是 Linux 内核媒体子系统Media Subsystem中基于dvb-usb-v2框架的 DVB-T USB 接收驱动用于支持基于 Intel CE6230 单芯片方案的 USB 2.0 地面数字电视棒。本文以 dvb-usb-ce6230-cardlist.rst 为骨架完整解读该驱动支持的设备清单、USB IDVID:PID对照关系并深入到 drivers/media/usb/dvb-usb-v2/ce6230.c 等源码验证其硬件组成、I2C 桥接与调谐流程。读完本文你将能够通过lsusb识别此类设备、正确配置内核编译选项、并理解设备与驱动绑定背后的代码逻辑。卡片列表Card List文档在做什么在内核媒体子系统文档体系中Documentation/admin-guide/media/下存在一批以*-cardlist.rst命名的文件例如 em28xx-cardlist.rst 的同级文档、以及 usb-cardlist.rst。它们的功能统一且明确为某一具体驱动的产品型号Card Name与 USB ID 之间建立权威对照表。dvb-usb-ce6230-cardlist.rst 全文即为两张表格构成的「驱动支持设备名录」左侧为产品名称右侧为设备在 USB 总线上被枚举出来的 16 进制 ID通常写作厂商ID(Vendor ID):产品ID(Product ID)。这张表是所有用户查询我的 USB 电视棒能否被此驱动识别的第一手依据也是驱动源码中usb_device_id表的文档化镜像。受支持设备的完整名单依据 dvb-usb-ce6230-cardlist.rst 的flat-table该驱动共登记两款设备Card name产品名USB IDsVID:PIDAVerMedia A310 USB 2.0 DVB-T tuner07ca:a310Intel CE9500 reference design8086:9500两点值得特别注意AVerMedia A310 的厂商 ID07ca0x07ca 是 AVerMedia圆刚在 USB 标准组织注册的厂商代号产品 IDa310与其型号名 A310 直接对应Intel CE9500 参考设计使用8086:95000x8086 是 Intel 的厂商 ID而 0x9500 表明这是一块用于方案验证的参考设计板reference design厂商可以基于该方案定制贴牌产品实际零售设备常以其他品牌出现。事实对照上述两行内容在驱动源码 ce6230.c 的ce6230_id_table[]中被逐一复现详见下文源码印证一节文档与代码完全一致。如何在真实系统上识别这两款设备USB ID 的获取方式由 usb-cardlist.rst 给出它同样适用于本文的设备$ lsusb Bus 001 Device 015: ID 046d:082d Logitech, Inc. HD Pro Webcam C920 ...当你的设备插入 USB 口后只要lsusb输出中出现07ca:a310AVerMedia A310或8086:9500Intel CE9500 参考板即可断定该设备属于dvb-usb-ce6230驱动的管辖范围。此外还可以通过lsusb -v查看接口描述以便在硬件制造商不确定时辅助判断。驱动在内核中的注册与构建内核配置项与模块名dvb-usb-ce6230的编译入口位于 drivers/media/usb/dvb-usb-v2/Kconfigconfig DVB_USB_CE6230 tristate Intel CE6230 DVB-T USB2.0 support depends on DVB_USB_V2 select DVB_ZL10353 select MEDIA_TUNER_MXL5005S if MEDIA_SUBDRV_AUTOSELECTtristate说明它可以编译为内核内建y或可加载模块m当以模块方式构建时生成的模块名为dvb-usb-ce6230.ko由 drivers/media/usb/dvb-usb-v2/Makefile 的dvb-usb-ce6230-objs : ce6230.o规则决定depends on DVB_USB_V2表明它运行在第二代的 USB DVB 框架之上通过select自动拉取两种核心芯片驱动解调器 Zarlink/Intelzl10353DVB_ZL10353与 Maximmxl5005s硅调谐器MEDIA_TUNER_MXL5005S。启用方式任选其一# 方式一menuconfig 交互式配置Device Drivers → Multimedia support → Media USB Adapters make menuconfig # 方式二直接写入 .config echo CONFIG_DVB_USB_CE6230m .config make olddefconfig make modules驱动在 usb-cardlist.rst 主表与 toctree 中的登记在 USB 媒体驱动总目录表中dvb-usb-ce6230被登记为 Intel CE6230 DVB-T USB2.0该文档的 toctree 里同样通过dvb-usb-ce6230-cardlist条目将本文对应的 cardlist 纳入文档导航树构成了总表 → 分驱动 cardlist的完整查询路径。设备 ID 表源码中的 Card List设备与驱动的绑定由内核 USB 核心的 probe 流程完成。在 ce6230.c 中static const struct usb_device_id ce6230_id_table[] { { DVB_USB_DEVICE(USB_VID_INTEL, USB_PID_INTEL_CE9500, ce6230_props, Intel CE9500 reference design, NULL) }, { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A310, ce6230_props, AVerMedia A310 USB 2.0 DVB-T tuner, NULL) }, { } }; MODULE_DEVICE_TABLE(usb, ce6230_id_table);可以看到两条记录与 RST 卡片列表一一对应连字符串名称Intel CE9500 reference design、AVerMedia A310 USB 2.0 DVB-T tuner都保持完全一致——cardlist 文档正是这张表的可读投影MODULE_DEVICE_TABLE(usb, ...)会将该表导出到模块的.modinfo与modalias中因此当设备插入后即便模块未加载udev/modprobe也能依据usb:v8086p9500、usb:v07capA310这样的 modalias 自动装载dvb-usb-ce6230模块随后 usb_driver 通过dvb_usbv2_probe进入dvb-usb-v2框架做后续初始化。从源码看驱动背后的硬件组成cardlist 文档虽只给出产品清单但要真正理解为什么这张表里只有两款设备需要回到芯片方案层面。从 ce6230.c 的 attach 回调可以确认其完整射频链路前端 attach解调ce6230_zl10353_frontend_attach()调用zl10353_attach挂载解调器对应配置ce6230_zl10353_config源码行 163-171解调器 I2C 地址0x1e、ADC 时钟450000Hz、第二中频if2 45700kHz、no_tuner 1解调器不管理 tuner、TS 并行输出parallel_ts 1tuner attach调谐ce6230_mxl5003s_tuner_attach()调用mxl5005s_attach配置ce6230_mxl5003s_config源码行 187-202I2C 地址0xc6、中频IF_FREQ_4570000HZ、晶振16 MHz、单 AGC、数字模式、零中频输出等。这套 zl10353 解调器 mxl5005s 调谐器 的组合正是 Intel CE6230 单芯片参考方案的标准外围搭配这也解释了 Kconfig 中select DVB_ZL10353与select MEDIA_TUNER_MXL5005S两个强制依赖的由来。凡采用 CE6230 方案无论贴牌为 AVerMedia 还是 Intel 参考板的产品I2C 拓扑与寄存器访问方式一致故可共用同一个ce6230_props。USB 控制传输与 I2C 桥的底层实现CE6230 方案本身并不直接暴露解调/调谐器的 I2C 总线而是通过 USB Vendor Class 控制端点做 I2C 桥接。这一点在驱动头文件 ce6230.h 中体现为一张命令编码表命令宏值含义CONFIG_READ0xd0读配置rd 0UNKNOWN_WRITE0xc7写配置wr 7I2C_READ0xd9I2C 读rd 9I2C_WRITE0xcaI2C 写wr aDEMOD_READ0xdb解调器寄存器读rd bDEMOD_WRITE0xcc解调器寄存器写wr cREG_READ0xde通用寄存器读rd eREG_WRITE0xcf通用寄存器写wr f其中usb_req结构体ce6230.h用cmd/value/index/data_len/data五元组描述一次控制传输。其执行逻辑在ce6230_ctrl_msg()ce6230.c根据命令是读I2C_READ/DEMOD_READ/REG_READ还是写构造USB_TYPE_VENDOR | USB_DIR_IN/OUT的requesttype调用usb_control_msg()走 endpoint 0 完成传输超时上限为 ce6230.h 中定义的CE6230_USB_TIMEOUT1000 ms传输前强制msleep(1)源码注释明确写道 avoid I2C errors即避免连续 USB 控制传输过快导致片内 I2C 出错读方向传输完成后将返回数据拷贝回请求缓冲区。上层 I2C 子系统通过ce6230_i2c_master_xfer()ce6230.c进入此桥当访问地址等于解调器地址0x1e时使用DEMOD_READ/DEMOD_WRITE命令index 为寄存器号其他地址如 tuner0xc6则使用通用I2C_WRITE命令value 带0x2000偏移标记。换言之Linux I2C 核心对 zl10353、mxl5005s 的每次读写最终都会被翻译为若干条 vendor 类型 USB 控制请求发往 CE6230 芯片。电源控制与 TS 流传输路径电源/流控ce6230_power_ctrl()ce6230.c通过切换 USB 接口 1 的备用设置AlternateSetting 0 为空闲、1 为 streaming实现收发状态切换TS 流端点ce6230_propsce6230.c声明单适配器num_adapters 1、BULK 传输、端点0x82、6 个并发 URB、每个缓冲区 16×512 字节承载来自 zl10353 并行 TS 输出的 MPEG-TS 数据。小结如何对照使用这份 Card List当手中有一台基于 Intel CE6230 方案的 DVB-T 电视棒时可按下述三步完成驱动适配识别插入设备执行lsusb若 ID 为07ca:a310或8086:9500即命中 dvb-usb-ce6230-cardlist.rst 登记范围加载确认内核已使能CONFIG_DVB_USB_CE6230模块名dvb-usb-ce6230或直接modprobe dvb-usb-ce6230modalias 会在插入时自动匹配使用驱动成功 probe 后会在 DVB 框架下注册前端的/dev/dvb/adapterN节点配合dvbv5-zap、tvheadend、VLC等用户态工具即可调谐收看地面数字电视。在此基础上若需开发或调试基于 CE6230 方案的新型号设备只需在 ce6230.c 的ce6230_id_table[]中新增 VID:PID 条目并同步更新本文对应的 cardlist 文档即可复用既有的 I2C 桥、zl10353/mxl5005s attach 与 TS 传输通道这也是Card Name USB ID表驱动整个媒体子系统设备适配的典型开发模式。【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考