Корпорация Дженерал Сателайт — российская научно-производственная компания, представляющая на российском и международном рынке высокотехнологичное радиоэлектронное оборудование, характеристики которого отвечают самым высоким стандартам. Надежность и профессионализм за многие годы успешной работы позволили компании занять место лидера в телекоммуникационном бизнес-сообществе России.
Что нужно:
Распаковываем драйвера, например, в /usr/src/DVB, заходим в /usr/src/DVB/driver
$ make
Если все скомпилилось без проблем, идем дальше.
В этом же каталоге говорим
$ make insmod
Эта операция просто загружает все необходимые модули.
Если все загрузилось, то DVB-S уже работает и можно смотреть телевизор.
В каталоге /usr/src/DVB/apps есть несколько полезных программ. Нас интересует, в первую очередь, те, что переключают каналы. Проще всего скомпилировать szap.
Заходим в /usr/src/DVB/apps/szap и говорим
$ gcc -o szap szap.c
Там же лежит channels.conf. В нем каждая строка - настройка на канал.
Формат строки следующий:
<имя_канала>: <частота_в_MHz>: <поляризация>: <номер_сутника_dseq>: <сим_рейт_в_kS/s>: <video_pid>: <audio_pid>: <**>: <service_id>
szap использует параметры только до audio_pid. Т.е. от <**> ничего не читает. Этот формат принимает много программ, у VDR <**> - это номер DVB карты которая может декодировать шифрованный канал. 0 - открытый (FTA). <service_id> - ???.
Надо добавить настройку на транспондер в channels.conf:
Например EON103:
12461:h:0:27500:0x1fff:0x1fff:0:28006
Копируем channels.conf в каталог ~/.szap.
Если это первая строка в channels.conf, то переключаем на нее szap -n 1
Драйвера загружены, но интерфейса dvb0 нет.
Нужно скомпилировать маленькую програмку (положить ее в /usr/src/DVB или поправить третий include):
// gcc -o netdvb netdvb.c
#include <fcntl.h>
#include <sys/ioctl.h>
#include "ost/include/ost/net.h"
int main(int argc, char **argv)
{
char devnamen[80];
int dev, fdn;
struct dvb_net_if netif;
dev = 0;
netif.pid = 512;
netif.if_num = 0;
sprintf(devnamen,"/dev/ost/net%d",dev);
printf("Open %s\n",devnamen);
if((fdn = open(devnamen,O_RDWR|O_NONBLOCK)) < 0){
perror("DVB NET DEVICE: ");
return;
}
ioctl( fdn,NET_ADD_IF,&netif);
}
Запускаем ее - появляется сетевой интерфейс dvb0_0 (проверить ifconfig -a), но он пока в down состоянии. Далее к интерфейсу надо привязать IP адрес и hardware адрес -MAC (в стиле ethernet). EOL вычисляет аппаратный адрес клиента по IP адресу, с которого идут исходящие пакеты. Т.е. аппаратный адрес должен быть равен 00:02:<ip_byte1>:<ip_byte2>:<ip_byte3>:<ip_byte4>. IP адрес интерфейса dvb0_0 может быть любым, неконфликтующим с другими адресами в собственной сети.
Подняв интерфейс dvb0_0, добавляем команду
$ echo 0>/proc/sys/net/ipv4/conf/dvb0_0/rp_filter
(если было 1), иначе Linux не впустит пакеты из dvb0_0.
Описанные выше манипуляции (после загрузки драйверов make insmod) можно объединить в скрипт idvb:
#!/bin/sh
DVBDEV="dvb0_0"
DVBIP="192.168.1.1"
szap -n 1
netdvb &&\
ifconfig $DVBDEV $DVBIP hw ether `ifconfig $1 | awk '
/inet addr:/{split(gensub(/( *inet addr:)([^ ]+)( +.*)/,"\\\\2",1),ipb,".");\
printf "0:2:%X:%X:%X:%X\n",ipb[1],ipb[2],ipb[3],ipb[4]}'`
echo "0">/proc/sys/net/ipv4/conf/$DVBDEV/rp_filter
Запускаем так ./idvb ppp0
ppp0 - имя интерфейса для исходящих пакетов. Скрипт активирует интерфейс, переключит канал и привяжет dvb0_0 аппаратный адрес, вычисленный по исходящему интерфейсу.
Замечания:
Ссылки:
12.04.02
Мазенков Сергей
| Комментарии? Поправки? Дополнения? dvbnet@msk.gs.ru |
![]() |