linux dvb编译,linux dvb - frontend

1. linux dvb devices

linux dvb api使得应用程序可以控制相关硬件模块通过六个unix风格的字符设备,包括video, audio, frontend, demux, ca, ip-over-dvb networking。video和audio设备控制mpeg2解码的硬件,frontend设备控制tuner和dvb解调器。demux设备用于过滤pes和section,如果不是硬件实现的也可以通过软件来完成。最后,CA设备控制条件接收相关的硬件模块。所有的设备在目录/dev/dvb下面:

/dev/dvb/adapterN/audioM

/dev/dvb/adapterN/videoM

/dev/dvb/adapterN/frontendM

/dev/dvb/adapterN/netM

/dev/dvb/adapterN/demuxM

/dev/dvb/adapterN/caM

其中N值标识第N个适配卡,M用于标识某适配卡下第几个该类型的设备。

2. api头文件

每个dvb设备对应一个头文件,比如:。

3. frontend api

open(), close(),

ioctl() - 包括:FE_READ_STATUS, FE_READ_BER, FE_READ_SNR, FE_READ_SIGNAL_STRENGTH, FE_READ_UNCORRECTED_BLOCKS, FE_SET_FRONTEND, FE_GET_FRONTEND, FE_GET_EVENT 等等。

4. 实现

以TDA10048+TDA18211为例。

phStbDemux_frontend.c, frontend_init()根据预设的demod和tuner类型,调用dvb_attach():

card->fe = dvb_attach(tda10048_attach, &tda10048_conf, card->i2c_adapter);

相当于 card->fe = tda10048_attach(&tda10048_conf, card_i2c_adapter);

该函数记录i2c adapter,配置,ops等信息到tda10048_state,返回dvb_frontend结构指针,该结构指针的priv变量携带了tda10048_state的指针位置,使得card->fe能够操作10048。

类似,随后调用的

card->fe = dvb_attach(tda18211_attach, card->fe, card->tuner_addr, card->i2c_adapter, instance_count == 0);

在card->fe里记录了tuner的操作和对应的i2c。

所以新的demod或者tuner,参考实现即可。包括实现attach函数(配置设备,记录i2c adapter,向外提供操作函数),以及操作函数。

frontend_init()之后调用dvb_register_frontend()用于注册设备。

事实上,在/etc/init.d/S91dvb.sh, 调用insmod phStbDemux833x.ko,将调用模块phStbDemux833x中的pnx8335_init_module(),进而调用dvb_phStb_register(),进而调用dvb_phStb_load_card().

dvb_phStb_load_card()注册adapter,dmx初始化,ca注册,以及frontend_init()。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值