ubuntu 生活之电视卡
昨天已經將 ubuntu 大部分的東西安裝配置好了,ubuntu 生活之安裝配置 。 不過在結尾的時候提到遺留了一個問題, 就是電視卡。
????? 我的電視卡是佳的美(gadmei)的PT308, 在 ubuntu linux 下安裝tvtime之后, 無法使用。 根據網上google到的資料,我通過人肉大戰, 最后測試到在 card=2 tuner=23 就可以稱心的看電視了。 也就是用FLYVIDEO2000, philips tuner 1256 d/k。 但每次進入系統后都需要一堆的sudo總也不爽。 我就決心將佳的美的電視卡直接寫進saa7134中, 這樣開機就可以自動選對電視卡,就可以自動播放了。
????? 先將上面的播放電視卡的人肉大戰的代碼寫下來, 供以后參考
(可以看看這里:ubuntu 7.04 下搞定電視卡(saa7130) ):
sudo rmmod saa7134(如果提示被saa7134-alsa使用,請輸入:sudo rmmod saa7134-alsa)
sudo modprobe saa7134 card=x tuner=y(x,y可以自己看CARDLIST.xxxx)
????? 因為已經找到了可以播放電視的驅動, 那就可以將驅動進行打包做成適合自己電視卡的驅動, 省得每次看電視還得輸入一大堆的命令。 下面就將我整個打包的過程寫出來給各位一個參考。 可以這樣說, 下面的方法適合任何一種電視卡, 每個朋友完全可以自行打包自己的電視卡驅動。
????? 在介紹我的驅動制作過程前, 我先把我搜索到并參考了這些內容的東西給申明一下: 我的整個制作過程參考如下頁面的內容:
給 2.6.0-test6內核“增加”天敏電視大師電視卡驅動
給 天敏電視大師做了點linux下的支持
電視卡天敏大師II驅 動 (非常感謝該作者catinsnow的幫助)
????? 全文轉載“給 2.6.0-test6內核“增加”天敏電視大師電視卡驅動 ”,防備不時之需。
?
天敏電視大師是深圳天敏公司生產的一種家用級別的基于菲利普saa7130芯片的電視卡,在win下使用dscaler收看電視效果不錯,圖象很清 晰,價格也不算貴。
無論是天敏公司的主頁,還是菲利普公司的網頁,都沒有放出官方的linux驅動,只有win下的wdm驅動;linux下 saa713x芯片組驅動,一直由www.bytesex.org的linux愛好者負責開發;該驅動分成兩部分,一部分是v4l2,一部分是 saa713x,在2.6.0系列內核里已經收錄進v4l2和saa713x驅動,但很遺憾的是,在2.4.x系列內核里沒有收錄進去。
系 統:MagicLinux 1.1 final,2.6.0-test6內核(配置時將v4l選成模塊,將saa713x也選成模塊)
收看軟 件:xawtv 3.88
在win下裝上驅動和dsclaer后收看圖象和聲音一切正常。該卡在dscaler里無法自動檢測出型號,但選擇 FLYVIDEO2000型號可以正常收看
在linux下,在2.6.0內核里,用modprobe saa7134 card=3命令加載模塊后(card=3表示該卡為FLYVIDEO2000),使用xawtv也能正常收看電視,但直接用modprobe saa7134命令無法自動檢測出卡的類型,驅動不了。
既然saa7134模塊能驅動這塊電視卡并功能正常,一切都好辦,現在只是不能自動識別的 問題而已,下面通過修改代碼,讓saa7134模塊能自動檢測和驅動該卡。
從一些資料可知,PCI卡都有相應的vendor id、device id、subvendor id、subdevice id,以便操作系統識別PCI卡從而安裝相應驅動。
從開機時的BIOS自檢信息可以得 知,該卡的vendor id為1131,device id為7130。
通過dscaler菜單里的硬件信息可以知道,該卡的主廠商ID為 1131,代表為菲利普,主設備ID為7130,代表意義為所用芯片為7130,子廠商ID為1131,子設備ID為2001(意義不知)
打開 win下天敏公司放出的驅動,在cap7134proteus.inf文件里可以找到如下信息:
[Philips]
%Cap7134.DeviceDescProt%=Cap7134.Device,PCI_1131&DEV_7134&SUBSYS_20011131
這 些信息都表明,該卡的vendor id為1131,device id為7130,subvendor id為1131,subdevice id為2001
下面修改saa7134的相關源碼:
1、打開/usr/src/linux-2.6.0-test6/drivers /media/video/saa7134/saa7134.h
在”#define SAA7134_BOARD_ELSA_500TV 15″
后 加入一行:
#define SAA7134_BOARD_10MOONSTVMASTER 16
這行是定義給該卡定一個加載類型參數16
2、 打開/usr/src/linux-2.6.0-test6/drivers/media/video/saa7134/saa713-cards.c
在
[SAA7134_BOARD_ELSA_500TV] = {
.name = “ELSA EX-VISION 500TV”,
.audio_clock = 0×00187de7,
.tuner_type = TUNER_HITACHI_NTSC,
.inputs = {{
.name = name_svideo,
.vmux = 7,
.amux = LINE1,
},{
.name = name_tv,
.vmux = 8,
.amux = TV,
.tv = 1,
}},
},
的后面加入下面一段:
[SAA7134_BOARD_10MOONSTVMASTER] = {
.name = “10MOONS PCI TV CAPTURE CARD,天敏電視大師”,
.audio_clock = 0×00200000,
.tuner_type = TUNER_LG_PAL_NEW_TAPC,
.gpiomask = 0xe000,
.inputs = {{
.name = name_tv,
.vmux = 1,
.amux = LINE2,
.gpio = 0×0000,
.tv = 1,
},{
.name = name_comp1,
.vmux = 0,
.amux = LINE2,
.gpio = 0×4000,
},{
.name = name_comp2,
.vmux = 3,
.amux = LINE2,
.gpio = 0×4000,
},{
.name = name_svideo,
.vmux = 8,
.amux = LINE2,
.gpio = 0×4000,
}},
.radio = {
.name = name_radio,
.amux = LINE2,
.gpio = 0×2000,
},
.mute = {
.name = name_mute,
.amux = LINE2,
.gpio = 0×8000,
},
},
這 段是定義該卡的各種參數的,包括tuner類型為LG_PAL_NEW_TAPC,是從這個文件里flyvideo2000那段照抄下來的。
在
{
.vendor = PCI_VENDOR_ID_PHILIPS,
.device = PCI_DEVICE_ID_PHILIPS_SAA7130,
.subvendor = 0×1048,
.subdevice = 0×226b,
.driver_data = SAA7134_BOARD_ELSA_500TV,
}
后面加入下面一段:
{
.vendor = PCI_VENDOR_ID_PHILIPS,
.device = PCI_DEVICE_ID_PHILIPS_SAA7130,
.subvendor = PCI_VENDOR_ID_PHILIPS,
.subdevice = 0×2001,
.driver_data = SAA7134_BOARD_10MOONSTVMASTER,
}
這段很重要,saa7134模塊能否自動檢測支持該卡,就看這段的定義 了,saa7134模塊加載時會從這些ID定義里查找,符合的就驅動,找不到符合的就報告自動檢測失敗,需要手工指定card參數。
修改完這兩個 文件后,重新make modules和make modules_install,再modprobe saa7134,可以從dmesg的輸出里看到以下信息:(見貼圖)
Linux video capture interface: v1.00
saa7130/34: v4l2 driver version 0.2.8 loaded
saa7130[0]: found at 0000:02:06.0, rev: 1, irq: 10, latency: 32, mmio: 0xde000000
saa7130[0]: subsystem: 1131:2001, board: 10MOONS PCI TV CAPTURE CARD,天敏電視大師 [card=16,autodetected]
saa7130[0]: i2c eeprom 00: 31 11 01 20 08 20 1c 55 43 43 a9 1c 55 43 43 a9
saa7130[0]: i2c eeprom 10: ff ff 00 00 31 30 4d 4f 4f 4e 53 37 31 33 30 ff
saa7130[0]: i2c eeprom 20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7130[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
tuner: chip found @ 0xc0
tuner: type set to 37 (LG PAL (newer TAPC series))
registering 0-0060
videodev: “saa7134-video” has no release callback. Please fix your driver for proper sysfs support, see http://lwn.net/Articles/36850/
saa7130[0]: registered device video0 [v4l2]
videodev: “saa7134-vbi” has no release callback. Please fix your driver for proper sysfs support, see http://lwn.net/Articles/36850/
saa7130[0]: registered device vbi0
videodev: “saa7134-radio” has no release callback. Please fix your driver for proper sysfs support, see http://lwn.net/Articles/36850/
saa7130[0]: registered device radio0
這 些信息表明:saa7134已經自動檢測出該卡(類型為16,也就是上面定義的)并成功驅動了,設備文件為/dev/video0,現在直接運行 xawtv,設置一下,就可以收看電視節目了(見貼圖)
現提供2.6.0-test6的相應補丁和相應于www.bytesex.org上 xawtv-20030926.tar.gz驅動包的補丁(從附件下載)
轉貼請注明www.linuxfans.org
????? 這幾篇文章都是講天敏電視大師驅動的, 但同樣可以借鑒到我的佳的美(gadmei)電視卡中。
????? 我是按照第一篇“給 2.6.0-test6內核“增加”天敏電視大師電視卡驅動 ”來寫我的電視卡驅動的, 不過這篇的內容在我這里需要作部分修改。
????? 在這篇文章中提到去看電視卡的 Windows 驅動, 然后從驅動文件中提取vendor id、device id、subvendor id、subdevice id , 不過佳的美的用戶可能沒有這么幸運, 無法在inf中看到這四個數值, 至少我這里是這樣。 所以我就另外找了個辦法, 用查找自身硬件驅動的辦法來實現。
????? 我們可以看到下圖是 Windows 硬件管理器的信息, 里面顯示我的佳的美的電視卡是“Gadmei TV Belle WDM Video CaptureA”。
?????? 然后我就去注冊表中查找這個“Gadmei TV Belle WDM Video CaptureA”, 在注冊表中最后找到的信息如下圖:
????? 從這里我們可以看到這么一串字符:
“hardwareID:PCI/VEN_1131&DEV_7130&SUBSYS_00001131”
????? 這個時候如果你已經看過文章“給 2.6.0-test6內核“增加”天敏電視大師電視卡驅動 ”, 那你應該就知道vendor id、device id、subvendor id、subdevice id 這幾個信息的值了, 根據上面的注冊表信息, 我最后確定我的佳的美電視卡的信息是:
vendor id=1131
device id為7130
subvendor id=1131
subdevice id=0000
????? 有了這么一個東西就可以自己寫驅動了, Linux(ubuntu)下就是憑著這幾個硬件關鍵信息找到對應的驅動的(我估計Windows應該也是憑借這個找驅動的)。 增加驅動的方法完全跟上面文章的“給 2.6.0-test6內核“增加”天敏電視大師電視卡驅動 ”的方法一樣。
********************************
1、 下載saa7134的原始驅動:
sudo apt-get install mercurial
hg clone http://linuxtv.org/hg/v4l-dvb
2、 進入 v4l-dvb/linux/drivers/media/video/saa7134/ 目錄下, 修改如下文件:
1)修改 saa7134.h(說明, 這里是給你的卡定義一個值, 所以后面的數值是不能重復的)
找到類似
#define SAA7134_BOARD_FLYVIDEO2000????? 3
的card configuration段, 在最后添加你的卡信息, 比如我的添加的是
#define SAA7134_BOARD_GADMEITVMASTER ??? 118
********************
2)修改saa7134-cards.c(這里的修改就意味著你的卡能不能被自動識別了)
在此之前我們已經說過, 憑借人肉大戰, 我們已經找到了可以播放電視的驅動, 我的佳的美就是FLYVIDEO2000的, 所以我就把FLYVIDEO2000這一段內容拷貝出來(如果你是試驗下來是別的型號的, 那就拷貝別的內容)
拷貝出來之后修改成如下內容并增加在[SAA7134_BOARD_FLYVIDEO2000]之后:
[SAA7134_BOARD_GADMEITVMASTER ] = {
? /* “hongfengye” */
? .name?????????? = “LifeView FlyVIDEO2000″,
? .audio_clock??? = 0×00200000,
? .tuner_type???? = TUNER_LG_PAL_NEW_TAPC,
? .gpiomask?????? = 0xe000,
? .inputs???????? = {{
?? .name = name_tv,
?? .vmux = 1,
?? .amux = LINE2,
?? .gpio = 0×0000,
?? .tv?? = 1,
? },{
?? .name = name_comp1,
?? .vmux = 0,
?? .amux = LINE2,
?? .gpio = 0×4000,
? },{
?? .name = name_comp2,
?? .vmux = 3,
?? .amux = LINE2,
?? .gpio = 0×4000,
? },{
?? .name = name_svideo,
?? .vmux = 8,
?? .amux = LINE2,
?? .gpio = 0×4000,
? }},
? .radio = {
?????????????? .name = name_radio,
?????????????? .amux = LINE2,
?????????????? .gpio = 0×2000,
? },
? .mute = {
????????????? .name = name_mute,
????????????? .amux = LINE2,
????????????? .gpio = 0×3000 ,
? },
},
注意紅字 部分, 必須匹配, 其他的我照抄FLYVIDEO2000的內容; 再注意藍字 部分, 這里原來FLYVIDEO2000中是gpio=0×8000, 我經過試驗發現這個值聲音無法控制, 只要啟動 ubuntu 就一直有電視的聲音, 而改到 gpio=0×3000 聲音就可以控制, 這個gpio值我是試驗出來的, 當然也參考了上面的文章中的值, 我還是不知道如何去查找一個正確的gpio值出來, catinsnow提供說regspy可以用來監測gpio值, 我還不知道如何使用。
繼續在saa7134-cards.c中增加如下內容(也可以增加在.driver_data? = SAA7134_BOARD_FLYVIDEO2000之后):
{
? .vendor?????? = PCI_VENDOR_ID_PHILIPS,
? .device?????? = PCI_DEVICE_ID_PHILIPS_SAA7130,
? .subvendor??? = 0×1131,
? .subdevice??? = 0×0000,
? .driver_data? = SAA7134_BOARD_GADMEITVMASTER ,
},
注意, 紅色 部分依然是一一對應。 這里說明一下, 這里就是關鍵的部分, 硬件的四個標志符在這里全部配對, 硬件就找到了對應的軟件, 這里的四個值就是上面我們找到的4個, 只不過這里有其中兩個是已經有了用字符定義的常量了, 所以就直接寫成了字符, 也可以寫成上面的數字的。
3、編譯驅動并安裝
make
make install
????? 最后就是重啟了! 重啟之后看是否能夠找到你的電視卡, 如果還沒有找到, 可能還是上面的四個標志值不正確, 需要重新調整; 如果ubuntu剛開始啟動電視就發聲了, 那你就需要調整上面藍字部分的gpio值, 具體的我還不知道怎么找, 只能靠猜測了! 我的佳的美PT308已經完美的工作了,真是爽啊! 向ubuntu完美生活又邁進了一步。
????? 最后再發個gpio的感慨, 這個東西真是一個好東東, 可以直接控制硬件的信息, 這次弄正確了gpio之后, tvtime退出后直接就沒有聲音了, 但音量控制中線路輸入和線路輸入的靜音都沒有用到。 在gpio不正確的時候, 只能靠網上的朋友的辦法, 在tvtime退出的時候靜音線路輸入, 如果這個時候線路輸入有兩個以上的音源就不爽了。
????? 接下來, 準備搞搞我那攝像頭了, 不知道能不能搞定, 昨天大致的看了一下網上, 發現這個關于攝像頭的資料還是比較少的, 不知道能不能成功呢?
????? 在文章的最后, 我發現原來不用注冊表、 硬件管理器這么麻煩的東東, 只要在Windows下安裝一個fly2000的電視卡播放器, 然后在setting中的硬件信息中就可以看到了。 具體如下圖所示:
?????? 再一次贊一下ubuntu中文論壇 , 的確解決了我不少的問題。
總結
以上是生活随笔為你收集整理的ubuntu 生活之电视卡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux双机互信设置
- 下一篇: 基于Spring MVC + Sprin