9.2.1. dvb-usb 框架背后的思想¶
注意
此文档已过时。 请查看 DVB Wiki:https://linuxtv.org/wiki 以获取更新的信息。
已弃用: 更新的 DVB USB 驱动程序应使用 dvb-usb-v2 框架。
2005 年 3 月,我得到了新的 Twinhan USB2.0 DVB-T 设备。 他们提供了规格和固件。
我很想把驱动程序(当然,带有一些怪癖)放到 dibusb 中。 在阅读了一些规格并进行了一些 USB 嗅探后,我意识到,之后的 dibusb 驱动程序将是一团糟。 所以我决定以不同的方式来做:借助 dvb-usb 框架。
该框架提供通用功能(主要是内核 API 调用),例如
传输流 URB 处理,结合 dvb-demux-feed-control(支持批量和等时)
为 DVB-API 注册设备
如果适用,注册 I2C 适配器
遥控/输入设备处理
固件请求和加载(目前仅适用于 Cypress USB 控制器)
可以由多个驱动程序共享的其他功能/方法(例如,用于批量控制命令的函数)
待办事项:I2C 分块器。 它根据寄存器的长度以及可以多次写入和多次读取的值的数量,创建特定于设备的寄存器访问块。
特定 DVB USB 设备的源代码仅通过总线与设备进行通信。 DVB-API 功能之间的连接通过回调完成,回调分配在静态设备描述(struct dvb_usb_device)中,每个设备驱动程序都必须具有该描述。
有关示例,请查看 drivers/media/usb/dvb-usb/vp7045*。
目标是将所有 usb 设备(dibusb、cinergyT2,可能还有 ttusb;flexcop-usb 已经受益于通用 flexcop 设备)迁移到使用 dvb-usb-lib。
待办事项:根据请求的馈送数量动态启用和禁用 pid 过滤器。
9.2.1.1. 支持的设备¶
有关卡/驱动程序/固件的完整列表,请参见 LinuxTV DVB Wiki:https://linuxtv.org: https://linuxtv.org/wiki/index.php/DVB_USB
历史记录 & 新闻
2005-06-30
增加了对 WideView WT-220U 的支持(感谢 Steve Chang)
2005-05-30
向 dvb-usb 框架添加了基本的等时支持
- 增加了对 Conexant 混合参考设计和 Nebula 的支持
DigiTV USB
2005-04-17
所有 dibusb 设备都已移植以利用 dvb-usb 框架
2005-04-02
重新启用并改进了遥控代码。
2005-03-31
将 Yakumo/Hama/Typhoon DVB-T USB2.0 设备移植到 dvb-usb。
2005-03-30
基于 dibusb 源代码的 dvb-usb 模块的首次提交。 第一个设备是 TwinhanDTV Alpha / MagicBox II USB2.0-only DVB-T 设备的新驱动程序。
(从 dvb-dibusb 更改为 dvb-usb)
2005-03-28
增加了对 AVerMedia AverTV DVB-T USB2.0 设备的支持(感谢 Glen Harris 和 AVerMedia 的 Jiun-Kuei Jung)
2005-03-14
增加了对 Typhoon/Yakumo/HAMA DVB-T 移动 USB2.0 的支持
2005-02-11
增加了对 KWorld/ADSTech Instant DVB-T USB2.0 的支持。 非常感谢 Joachim von Caron
2005-02-02 - 增加了对 Hauppauge Win-TV Nova-T USB2 的支持
2005-01-31 - USB1.1 设备的失真流已消失
2005-01-13
将镜像的 pid_filter_table 移回 dvb-dibusb 首先找到适用于 HanfTek UMT-010 的几乎正常工作的版本,发现 Yakumo/HAMA/Typhoon 是 HanfTek UMT-010 的前身
2005-01-10
重构完成,现在一切都非常令人愉快
一些怪异设备的调谐器怪癖(Artec T1 AN2235 设备有时会组装松下调谐器)。 实现了调谐器探测。 非常感谢 Gunnar Wittich。
2004-12-29
经过几天的努力,修复了没有返回 URB 的错误。
2004-12-26
重构了 dibusb 驱动程序,将其拆分为单独的文件
启用了 i2c 探测
2004-12-06
解调器 i2c 地址探测的可能性
新的 usb ID(Compro、Artec)
2004-11-23
合并了 DiB3000MC_ver2.1 中的更改
修改了调试
可以为 USB2.0 提供完整的 TS
2004-11-21
dib3000mc/p 前端驱动程序的第一个工作版本。
2004-11-12
添加了其他遥控键。 感谢 Uwe Hanke。
2004-11-07
添加了遥控支持。 感谢 David Matthews。
2004-11-05
添加了对新设备的支持(Grandtec/Avermedia/Artec)
将我的更改(对于 dib3000mb/dibusb)合并到 FE_REFACTORING,因为它成为了 HEAD
将传输控制(pid 过滤器、fifo 控制)从 usb 驱动程序移动到前端,似乎在那里更好(添加了 xfer_ops-struct)
为前端(mc/p/mb)创建了一个通用文件
2004-09-28
添加了对新设备的支持(未知,供应商 ID 为 Hyper-Paltek)
2004-09-20
添加了对新设备的支持(Compro DVB-U2000),感谢 Amaury Demol 的报告
更改了 usb TS 传输方法(多个 urbs,在设置新 pid 之前停止传输)
2004-09-13
添加了对新设备的支持(Artec T1 USB TVBOX),感谢 Christian Motschke 的报告
2004-09-05
发布了 dibusb 设备和 dib3000mb 前端驱动程序(vp7041.c 的旧新闻)
2004-07-15
偶然发现该设备具有用于 PLL 的 TUA6010XS
2004-07-12
发现该驱动程序也应该适用于 CTS Portable(中国电视系统)
2004-07-08
解决了固件提取-2.422 问题,驱动程序现在可以与从 2.422 提取的固件一起正常工作
#if for 2.6.4 (dvb), 编译问题
更改了固件处理,请参见 vp7041.txt 第 1.1 节
2004-07-02
一些调谐器修改,v0.1,清理,首次公开
2004-06-28
现在使用 dvb_dmx_swfilter_packets,一切运行良好
2004-06-27
能够观看和切换频道(预 Alpha)
尚未进行章节过滤
2004-06-06
收到了第一个 TS,但是内核崩溃:/
2004-05-14
固件加载程序正在工作
2004-05-11
开始编写驱动程序
9.2.1.2. 如何使用?¶
9.2.1.2.1. 固件¶
大多数 USB 驱动程序需要在开始工作之前将固件下载到设备。
查看 DVB-USB 驱动程序的 Wikipage,以找出您的设备需要的固件
9.2.1.2.2. 编译¶
由于驱动程序在 Linux 内核中,因此在您喜欢的配置环境中激活该驱动程序应该足够了。 我建议将驱动程序编译为模块。 热插拔会完成剩下的工作。
如果您使用 dvb-kernel,请进入 build-2.6 目录,运行“make”和“insmod.sh load”。
9.2.1.2.3. 加载驱动程序¶
当需要时(因为您插入了设备),热插拔能够加载驱动程序。
如果要启用调试输出,则必须从 dvb-kernel cvs 存储库中手动加载驱动程序。
首先查看有哪些可用的调试级别
# modinfo dvb-usb
# modinfo dvb-usb-vp7045
etc.
modprobe dvb-usb debug=<level>
modprobe dvb-usb-vp7045 debug=<level>
etc.
应该可以解决问题。
当驱动程序加载成功,固件文件位于正确的位置并且设备已连接时,“电源”LED 应该会亮起。
此时,您应该能够启动支持 dvb 的应用程序。 我使用 (t|s)zap、mplayer 和 dvbscan 来测试基本功能。 VDR-xine 提供了长期测试场景。
9.2.1.3. 已知问题和错误¶
不要在运行 DVB 应用程序时移除 USB 设备,您的系统很可能会崩溃或死机。
9.2.1.3.1. 添加对设备的支持¶
待办事项
9.2.1.3.2. USB1.1 带宽限制¶
许多当前支持的设备都是 USB1.1,因此当连接到 USB2.0 集线器时,它们的最大带宽约为 5-6 MBit/s。 这不足以接收 DVB-T 频道的完整传输流(约为 16 MBit/s)。 通常,如果您只想观看电视(这不适用于 HDTV),这不是问题,但是同时观看一个频道并在同一频率上录制另一个频道根本无法很好地工作。 这适用于所有 USB1.1 DVB-T 设备,而不仅仅是 dvb-usb 设备)
TS 因设备大量使用而失真的错误已完全消失。 我使用的所有 dvb-usb 设备(Twinhan、Kworld、DiBcom)现在都可以使用 VDR 正常工作。 有时我甚至能够录制一个频道并观看另一个频道。
9.2.1.4. 3. 致谢¶
DiBcom 的 Amaury Demol (Amaury.Demol@parrot.com) 和 Francois Kanounnikoff,感谢他们提供规格、代码和帮助,dvb-dibusb、dib3000mb 和 dib3000mc 都基于这些。
David Matthews,感谢他识别出一种新的设备类型(带有 AN2235 的 Artec T1),并使用遥控事件处理扩展了 dibusb。 谢谢你。
Alex Woods,感谢他经常回答有关 usb 和 dvb 的问题,非常感谢。
Bernd Wagner,感谢他提供大量错误报告和讨论。
Gunnar Wittich 和 Joachim von Caron,感谢他们信任并提供了机器上的 root shell 来实现对新设备的支持。
Allan Third 和 Michael Hutchinson,感谢他们帮助编写 Nebula digitv 驱动程序。
Glen Harris,感谢他提出了一种新的 dibusb 设备,以及 AVerMedia 的 Jiun-Kuei Jung,感谢他慷慨地提供了特殊的固件以使该设备在 Linux 中启动并运行。
Twinhan 的 Jennifer Chen、Jeff 和 Jack,感谢他们友好地支持编写 vp7045 驱动程序。
WideView 的 Steve Chang,感谢他提供有关新设备和固件文件的信息。
Michael Paxton,感谢他提交遥控键映射。
linux-dvb 邮件列表上的一些人为鼓励我。
Peter Schildmann >peter.schildmann-nospam-at-web.de<,感谢他提供用户级固件加载程序,这节省了大量时间(在编写 vp7041 驱动程序时)
Ulf Hermenau 帮助我解决了传统中文问题。
André Smoktun 和 Christian Frömmel 支持我硬件并非常耐心地倾听我的问题。
9.2.1.3.3. 评论¶
非常欢迎补丁、评论和建议。