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”。hardware

       然后我就去注册表中查找这个“Gadmei TV Belle WDM Video CaptureA”, 在注册表中最后找到的信息如下图:register

      从这里我们可以看到这么一串字符:

“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中的硬件信息中就可以看到了。 具体如下图所示:fly2000

       再一次赞一下ubuntu中文论坛 , 的确解决了我不少的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值