9.2.1. dvb-usb 框架背後的思想

注意

  1. 此文件已過時。 請檢視 DVB Wiki:https://linuxtv.org/wiki 以獲取更新的資訊。

  2. 已棄用: 更新的 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

  1. 歷史記錄 & 新聞

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,以找出您的裝置需要的韌體

https://linuxtv.org/wiki/index.php/DVB_USB

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.3.3. 評論

非常歡迎補丁、評論和建議。

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 支援我硬體並非常耐心地傾聽我的問題。