Digital Video Broadcasting или как заставить работать TechniSat SkyStar-1 под Linux
В нынешнее время многие покупают себе домой спутниковые тарелки
и тюнеры для просмотра спутникового телевидения. Так как данные
передаются в цифровом виде, то почему бы не попробовать подключить
компьютер к сети интернет через тарелку... Подумано - сделано.
Многие компании в наше время выпускают тюнеры для компьютеров.
А другие приспособили их для приема данных и используют их для работы
с интернет. При работе через тарелку Вы можете принимать данные со
скоростью до 55Мб/с, в зависимости от провайдера услуг.
Вот и у меня появилась возможность попробовать это чудо. Имелась
карточка SkyStar-1 и тарелка 1,8 м, настроенная на Astra 19.2E. В
качестве тестового провайдера был взят
EuropeOnLine
(EOL) - 15$ в месяц. Был зарегистрирован пользователь для 103
транспондера (частота - 12461000 кГц, Symbolrate - 27500 kSb/s).
Также необходимо иметь наземный канал (ppp соединение с провайдером
либо подключение через локальную сеть).
Что касательно софта, то для этого тюнера и для многих других он
написан под MS Windows. Меня такая перспектива не устраивала.
Соответственно было принято решение заставить все это работать
под Linux. Был установлен
Slackware
Linux в минимальной комплекции с необходимыми средствами разработки.
После этого я бороздил просторы интернета в поисках информации на
мою тему, было найдено несколько, на мой взгляд, интересных сайтов
посвященных спутниковому телевидению и не только, это
"Itelsat" Kiev Sat
Internet, Sat TV и
"Все о спутниковом, кабельном и эфирном ТВ". На этих сайтах очень
много полезной информации, но как потом оказалось самым необходимым
был сайт LinuxTV.
Здесь были найдены драйвера для тюнера(для
Siemens и
Technotrend,
но они подходят и для
TechniSat SkyStar-1), а так же программа для работы с 103
транспондером(как оказалось потом эта программа не совсем для него),
также здесь оказался довольно хороший архив рассылки.
Теперь все необходимое было на руках, оставалось только все настроить.
Первым делом было собрано
ядро 2.2.14
(зачем нам гнаться за последними ядрами?). При сборке ядра необходимо
обязательно выключить поддержку видео (CONFIG_VIDEO_DEV=n в
конфигурационном файле ядра).
Теперь предстояла сборка драйверов. Были взяты последние драйвера,
на тот момент, версии 0.6 -
siemens_dvb-0.6.tar.gz. В файле драйвера
dvb.c были исправлены
некоторые строки, т.к. после инсталляции драйверов, а проще сказать
копирования их в директорию /lib/modules/2.2.xx/misc/, файлы прошивки
не копируются, соответственно при выполнении команды insmod карта
тюнера не будет функционировать. Файлы прошивки карты, так называемые
firmware - Dpram, Root и Boot_up.axf я скопировал в папку
/lib/modules/skystar/. И соответственно поправил dvb.c, где заменил:
if (!(len=firmread("Dpram", (char**) &lfirm)))
if (!(len=firmread("dpram", (char**)
на
if (!(len=firmread("/lib/modules/skystar/Dpram", (char**) &lfirm)))
if (!(len=firmread("/lib/modules/skystar/dpram", (char**)
и так же для остальных двух файлов firmware.
После чего драйвера собрались без каких либо проблем. В этой же папке
можно выполнить команду make insmod - загрузятся драйвера для карты,
чтобы выгрузить их выполните make rmmod.
После выполнения команды make insmod у вас должно появится устройство
dvb0 с IP адресом 192.168.4.1 (на IP адрес можете внимания не обращать
он может быть любым из зарезервированных сетей 192.168.0.0 и 10.0.0.0),
проверить это вы можете при помощи команды ifconfig. При выполнении
команды make insmod выдается ошибка о том что не возможно найти модуль
msp3400.o - в файле Makefile строка компиляции этого модуля заремлена,
а insmod msp3400.o - нет, поэтому заремте его:
insmod tuner.o
# insmod msp3400.o
Если у Вас появилось устройство dvb0 - то все в порядке, тюнер
работает. Можно выполнить команду make install, в результате которой
файлы dvb.o, i2c-core.o, saa7146_core.o, saa7146_v4l.o, tuner.o,
VES1820.o, VES1893.o, videodev.o будут скопированы в папку
/lib/modules/2.2.xx/misc/.
Теперь нам необходима программа для получения данных с тарелки.
Для этого существует демон dvbd, который сделан специально для 103
транспондера(так сказано на LinuxTV). С LinuxTV был скачан и распакован
файл dvbd2.tar.gz.
Небольшая оговорка, незнаю как у других, но у меня работает тарелка на
спутник с LNB LO = 11300000. Поэтому после многих попыток заставить
работать эту программу пришлось изучить файл
dvbd.c, и что я там
обнаружил:
if (ret > 10600000 && ret < 14500000)
{
front.freq = front.curfreq = ((__u32) ret - 10600000) * 1000 ;
}
Вот так они вычисляют частоту, хотя LNB LO = 10600000 это для
113-115 транспондеров. Соответственно провелись некоторые изменения:
все строки
front.freq = front.curfreq = ((__u32) ret - 10600000) * 1000 ;
были заменены на
front.freq = front.curfreq = ((__u32) ret - 11300000) * 1000 ;
Перед сборкой необходимо проверить в файле dvbd.h такую строку:
#define network_device "eth0"
здесь должен быть указан интерфейс(ppp0, eth0 или другой интерфейс)
по которому вы имеете соединение с провайдером интернет(наземный канал).
После чего делаем make и копируем файл dvbd в любой каталог который
прописан в PATH.
Нам необходим файл конфигурации для этой программы, он должен находится
в каталоге /etc, если Вас не устраивает этот каталог - можете изменить
char cfgname[128] = "/etc/dvbd.conf"; (в файле dvbd.h)
Ниже приведен листинг файла /etc/dvbd.conf
# DVB receiver configuration file,
# (c) 2000 data planet international
#
# standard location in /etc
#
# LNB power on=1/off=0
#
power 1
#
# symbol rate [symbol/sec]
#
# ASTRA 1E/1F
#
symbolrate 27500000
#
# frequency [kHz]
#
# ASTRA TR 103
#
frequency 12461000
#
# 22 kHz signal on=1/off=0
#
ttk 1
#
# diseqc on=1/off=0
#
diseqc 0
#
# AFC on=1/off=0
#
AFC 1
#
# polarisation H=1/V=0
#
polarisation 1
#
# settings for MPE filter,
# PID and MAC filtering, valid MAC bytes
#
filter_0 512
Имея файл конфигурации и работающий тюнер(загружены все модули и
присутствует dvb0 устройство) запускаем программу dvbd. Ждем некоторое
время, программа должна выдавать информационные строки о работе тюнера.
Если поле Sync = 127, то тарелка настроена на спутник и Вы можете
принимать данные. Если же нет попробуйте поменять пятую цифру значения
freq в файле dvbd.conf. У меня например в связи с тем что расстроена
головка значение freq = 12457000. Но каждый раз меняя значение это поля
Вам необходимо выгружать и загружать драйвера, иначе никаких изменений
не будет. Если Вы добились Sync=127, то можно пускать программу в виде
демона, это будет выглядеть так dvbd -q.
Теперь если у Вас не стоит никакого прокси на машине, указываете
вашему браузеру прокси того транспондера на который у Вас есть доступ
и работаете.
Если у Вас стоит Squid - вот строчки которые я добавил в его конфиг:
cache_peer ваш_прокси parent 8080 0 no-query default login=login:passw
prefer_direct off
always_direct deny all
Это и все что надо squid'у.
Теперь я захотел все автоматизировать, тоесть чтобы все поднималось
при загрузке системы. Был написан простенький
rc.dvb:
#!/bin/sh
if [ -x /usr/bin/dvbd ]; then
/sbin/insmod i2c-core
/sbin/insmod videodev
/sbin/insmod saa7146_core mode=0
/sbin/insmod saa7146_v4l
/sbin/insmod VES1893
/sbin/insmod VES1820
/sbin/insmod dvb
/sbin/insmod tuner
/sbin/ifconfig dvb0 192.168.4.1
echo -n "Starting DVBD... "
/usr/bin/dvbd -q
echo "Done"
fi
Этот файл был скопирован в /etc/rc.d/ и запускается перед Squid'ом.
У меня например в Slackware он запускается после файла rc.inet2, тоесть
когда поднялась сетка.
Вот и все - остальное за Вами. Пробуйте, настраивайте, я не
гарантирую что будет работать с любым ядром - на LinuxTV советуют 2.2.14.
У меня работает это все на
RedHat 6.2 c ядром
2.2.14 и на Slackware 7.1 с яром 2.2.14.