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 Hybrid 参考设计和 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(仅限)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 设备有时会组装 Panasonic 调谐器)。实现了调谐器探测。非常感谢 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 sec 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 驱动程序的 Wiki 页面,以了解您的设备需要哪个固件
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. 评论¶
非常非常欢迎补丁、评论和建议。