Чат

🕑 ↗
За да пишеш, трябва да си влязъл в профила си.

Hauppauge WinTV-HVR400 + sasc-ng Ubuntu 10.04

Започната от бебезавър, 16-05-2011, 17:26

« назад - напред »

0 Потребители и 1 гост преглеждат тази тема.

бебезавър

Инсталация на платка Hauppauge със sasc-ng на Убунту сиситема.

1. Инсталираме Ubuntu linux 10.04

2. След инсталацията на линукса той си качва драйвери за този модел платка, но с тях не се компилира правилно sasc-ng, за това инсталираме драйверите както следва:


apt-get install linux-headers-`uname -r` build-essential subversion mercurial openssl gettext libssl-dev screen libncurses5-dev dialog
cd /usr/local/src
hg clone http://hg.kewl.org/pub/v4l-dvb-20100517/
cd /usr/local/src/v4l-dvb-20100517
make menuconfig

В диалоговия прозорец който ще се появи отиваме на                                         Multimedia support  --->   DVB/ATSC adapters  ---> FireDTV and FloppyDTV и махаме поддръжката му, понеже така и не можах да го компилирам с поддръжка на FireDTV и FloppyDTV, ако имате желание може да пробвате и да не го премахвате. След което продължаваме:

make
make install
reboot


Вече имаме компилиран и зареден драйвер за Hauppauge-a, за проверка може да използвате:

dmesg |grep cx88


3. Инсталиране и компилиране на sasc-ng

cd /usr/local/src
hg clone http://85.17.209.13:6100/sc
cd /usr/local/src/sc
chmod +x contrib/sasc-ng/configure
chmod +x contrib/sasc-ng/dvbloopback/module/config_dvb.pl
cd /usr/local/src/sc/contrib/sasc-ng/
./configure --dvb-dir=/usr/local/src/v4l-dvb-20100517
make
make module

при проблем с компилацията моля променете ред номер 59 на /usr/local/src/sc/contrib/sasc-ng/dvbloopback/module/dvb_loopback.c като сложите подходящата версия на ядрото - за ядро 2.6.32 на ubuntu 10.04 не ми се е налагало.

Продължаваме с инсталацията на sasc-a

rm /lib/modules/`uname -r`/misc/dvbloopback.ko
cd /usr/local/src/sc/contrib/sasc-ng/
cp sasc-ng /usr/bin
cp /usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/* /usr/lib/
mkdir /lib/modules/`uname -r`/misc
/usr/bin/install dvbloopback.ko /lib/modules/`uname -r`/misc/
depmod


4. Ако всичко е минало успешно без грешки трябва да можем да заредим модула:

modprobe dvbloopback

Проверка дали е зареден можем да направим със:

lsmod |grep dvbloop


5. Създаване на папките и файловете необходими за sasc-ng

mkdir /etc/camfiles
cd /usr/local/src/sc/contrib/sasc-ng/
mv sc_files/* /etc/camfiles/
cp sasc-ng /usr/bin/


6. Създаване на стартиращи скриптове:
създаваме файл в /usr/local/bin със име runsasc

touch /usr/local/bin/runsasc

Във него поставяме следното съдържание:

#!/bin/bash

# Script to automate running of SASC-NG and Drivers

# Driver directory
DRIVERDIR="/usr/local/src/mythtv.cvs/sasc-ng"
# Path to SASC-NG binary
SASCPRG="sasc-ng"
# Path to CAM Directory
CAMDIR="/etc/camfiles/"
# Number of DVB Cards you have in your system dedicated to SASC-NG
ADAPTERS="1"
# Startup Options passed to SASC-NG.  Adjust according to your devices.
#OPTIONS="-r 0 -v 2 -o"
OPTIONS="-j 0:1  --log /var/log/sasc-ng.log --cam-budget --sid-allpid --sid-nocache --cam-dir"
# Number of times runsasc will attempt to restart SASC-NG after a crash has occured (set to 0 for no limit)
MAXTRIES=10
# Minimum runtime required (in seconds) for SASC-NG to continue restart attempts
MINRUN=20

## End Configuration Section ##

SASCCMD="$SASCPRG $OPTIONS $CAMDIR"
KILL="/usr/bin/killall -q -TERM"

# Detect whether the DVBLooopback driver is already loaded
# and return 0 if it *is* loaded, 1 if not:
function DriverLoaded()
{
  grep -qse dvbloopback /proc/modules
}

# Load all DVBLoopback driver modules needed for your hardware:
function LoadDriver()
{
  modprobe dvbloopback num_adapters=$ADAPTERS
  sleep 5
}

# Unload all DVBLoopback driver modules loaded in LoadDriver():
function UnloadDriver()
{
  rmmod dvbloopback
}

# Load driver if it hasn't been loaded already:
if ! DriverLoaded; then
   LoadDriver
   fi

LASTRESTART=$(date +%s)
LOOPCOUNT=0
while (true) do
      if [ $LOOPCOUNT -le $MAXTRIES ] || [ $MAXTRIES -eq 0 ] ; then
        eval "screen -D -m -S sasc-ng $SASCCMD &"
        # Wait for SASC-NG to initialize then do rest
        sleep 10
        touch /tmp/SASC_COMPLETE
      else
        $KILL runsasc
      fi
      # Remember PID of SASC-NG process
      PID=$!
      # Wait for SASC-NG to end or signal to arrive
      wait $PID
      # Remember return value of SASC-NG
      RET=$?
      if test $RET -eq 0 -o $RET -eq 2; then exit; fi
      TIMEOFDEATH=$(date +%s)
      RUNTIME=$((TIMEOFDEATH - LASTRESTART))
      if [ $TIMEOFDEATH -le $(($LASTRESTART + $MINRUN)) ] ; then
        echo "`date` SASC-NG crashed in $RUNTIME seconds. Minimum required runtime for SASC-NG is $MINRUN seconds. Killing runsasc process..."
        $KILL runsasc
      fi
      echo "`date` Reloading DVBLoopback drivers"
      $KILL sasc-ng
      sleep 10
      UnloadDriver
      LoadDriver
      LASTRESTART=$(date +%s)
      LOOPCOUNT=$((LOOPCOUNT+1))
      echo "`date` Restarting SASC-NG $LOOPCOUNT time(s). Maximum retries set to $MAXTRIES"
      done

Задаваме подходящите права за файла:

chmod 755 /usr/local/bin/runsasc
chmod +x /usr/local/bin/runsasc

създаваме следващия файл в директория /etc/init.d/ със име sascd

touch /etc/init.d/sascd

в него поставяме следния код

#! /bin/bash
#
# sasc start-stop script
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME="runsasc"
DESC="SASC-NG"
DAEMON="sasc-ng"

ENABLED=0
test -f /etc/default/sascc && . /etc/default/sascc
test "$ENABLED" != "0" || exit 0

rm -f /tmp/SASC_COMPLETE

LOOP=0
case "$1" in
  start)
         if ! ps -C sasc-ng > /dev/null 2>&1; then
         echo -e "Starting $DESC: $NAME. \n"
         runsasc &
         until [ -e /tmp/SASC_COMPLETE ] || [ $LOOP -eq $TIMEOUT ] ; do
           sleep 1
           LOOP=$((LOOP+1))
         done
         if [ $LOOP -eq $TIMEOUT ]; then
           echo -e "SASC-NG startup sequence has timed out in $TIMEOUT seconds. SASC-NG will not start. \n"
           exit 1
         fi
         echo -e "SASC-NG startup time was $LOOP second(s). \n"
         echo -e "SASC-NG startup sequence completed. \n"
         else
         echo -e "SASC-NG is already running. \n"
         fi
         ;;
  stop)
         if ps -C sasc-ng > /dev/null 2>&1; then
         echo -e "Stopping $DESC: $NAME. \n"
         sleep 3
         killall -q -TERM $NAME
         killall -q -TERM $DAEMON
         sleep 5
         rmmod dvbloopback.ko
         else
         echo -e "SASC-NG is not running. \n"
         fi
         ;;
  restart|force-reload)
         if ps -C sasc-ng > /dev/null 2>&1; then
         echo -e "Restarting $DESC: $NAME. \n"
         sleep 3
         killall -q -TERM $NAME
         killall -q -TERM $DAEMON
         sleep 5
         rmmod dvbloopback.ko
         sleep 2
         runsasc &
         until [ -e /tmp/SASC_COMPLETE ] || [ $LOOP -eq $TIMEOUT ] ; do
           sleep 1
           LOOP=$((LOOP+1))
         done
         if [ $LOOP -eq $TIMEOUT ]; then
           echo -e "SASC-NG startup sequence has timed out in $TIMEOUT seconds. SASC-NG will not start. \n"
           exit 1
         fi
         echo -e "SASC-NG startup time was $LOOP second(s). \n"
         echo -e "SASC-NG startup sequence completed. \n"
         else
         echo -e "SASC-NG is not running. \n"
         fi
         ;;
  *)
         N=/etc/init.d/$NAME
         echo "Use: $N {start|stop|restart|force-reload}" >&2
         exit 1
        ;;
esac

rm -f /tmp/SASC_COMPLETE

exit 0

след което го правим изпълним и го добавяме в реда за изпълнение на убунту:

chmod +x /etc/init.d/sascd
update-rc.d -f sascd remove
update-rc.d sascd defaults 15

След което се нуждаем само от един последен файл а именно sascc който да се намира в /etc/default

touch /etc/default/sascc

и в него добавяме:

# /etc/default/sascc
# Default SASC-NG startup config

# Change to 1 to enable sasc-ng's init-script
ENABLED=1

# DVBLoopback Device creation timeout (in seconds)
TIMEOUT=60


вече всичко е готово и трябва да заработи след рестарт на системата.

С пожелание за спорна работа от автора
Знанието не ни прави нито по-добри, нито - по-щастливи. Мъдростта е свобода!
vdr: tbs QBOX S2 on Asrock ION 330 vdr, Dreambox 500s, DL-STB-S200 --> Bulsat antena 75E, Triax TD 78 - 39E,42E, Tecatel 100 - 4.8E, 9E, 13E, 16E, 19.2E, 23.5E, 28.2E.

Brian

;;612

бебезавър

защото е LTS и с тази версия съм го правил - не описвам неща които не знам дали ще сработят
Знанието не ни прави нито по-добри, нито - по-щастливи. Мъдростта е свобода!
vdr: tbs QBOX S2 on Asrock ION 330 vdr, Dreambox 500s, DL-STB-S200 --> Bulsat antena 75E, Triax TD 78 - 39E,42E, Tecatel 100 - 4.8E, 9E, 13E, 16E, 19.2E, 23.5E, 28.2E.

Brian

Ок, затова питах дали имаш нещо предвид за несъвместимост с по-нови, както например спряха подръжка на Х13хх на Ати. Т.е. който иска може да пробва и с 11.04 и гном3
;;612

бебезавър

Разбира се при желание може и да сподели дали е бил успешен опита с 11.04
Знанието не ни прави нито по-добри, нито - по-щастливи. Мъдростта е свобода!
vdr: tbs QBOX S2 on Asrock ION 330 vdr, Dreambox 500s, DL-STB-S200 --> Bulsat antena 75E, Triax TD 78 - 39E,42E, Tecatel 100 - 4.8E, 9E, 13E, 16E, 19.2E, 23.5E, 28.2E.

смд

#5
За 11.04 и особенно ако е Х64 трябва да се пачне саска по следния начин: ( иначе след конфигурирането дава грешка заради разликата в кернела който е 2.6.38 )

cd /usr/local/src/sc
nano 2.6.38-sasc-ng.patch
Пишем пача :
--- contrib/sasc-ng/dvbloopback/module/dvblb_forward.c    2011-04-25 02:44:10.511089600 +0300
+++ contrib/sasc-ng/dvbloopback/module/dvblb_forward.c    2011-04-24 21:04:17.000000000 +0300
@@ -166,9 +166,9 @@
     struct file *ftmp = find_forwardmap(lbdev, f->private_data);
     if (!ftmp || IS_ERR(ftmp))
         return -EFAULT;
-    if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->ioctl)
-        return lbdev->forward_dev->fops->ioctl(
-                   ftmp->f_dentry->d_inode, ftmp, cmd, arg);
+    if (lbdev->forward_dev->fops &&lbdev->forward_dev->fops->unlocked_ioctl)
+        return lbdev->forward_dev->fops->unlocked_ioctl(
+                   ftmp, cmd, arg);
     return -EFAULT;
 }
 
--- contrib/sasc-ng/dvbloopback/module/dvb_loopback.c    2011-04-25 02:44:10.511089600 +0300
+++ contrib/sasc-ng/dvbloopback/module/dvb_loopback.c    2011-04-25 00:42:54.234135688 +0300
@@ -118,9 +118,9 @@
 /* This is a copy of dvb_usercopy.  We need to do this because it isn't exported
    by dvbdev
 */
-static int dvblb_usercopy(struct inode *inode, struct file *file,
+static int dvblb_usercopy(struct file *file,
              unsigned int cmd, unsigned long arg,
-             int (*func)(struct inode *inode, struct file *file,
+             int (*func)(struct file *file,
              unsigned int cmd, void *arg))
 {
     char    sbuf[128];
@@ -180,7 +180,7 @@
     }
 
     /* call driver */
-    if ((err = func(inode, file, cmd, parg)) == -ENOIOCTLCMD)
+    if ((err = func(file, cmd, parg)) == -ENOIOCTLCMD)
         err = -EINVAL;
 
     if (err < 0)
@@ -663,7 +663,7 @@
    dvb_generic_ioctl) which is called by dvblb_ioctl for device-0.  It is
    used to forward ioctl commands back to the userspace application
 */
-static int dvblb_looped_ioctl(struct inode *inode, struct file *f,
+static int dvblb_looped_ioctl(struct file *f,
     unsigned int cmd, void *parg)
 {
     int ret;
@@ -692,7 +692,7 @@
     return ret;
 }
 
-static int dvblb_ioctl(struct inode *inode, struct file *f,
+static long dvblb_ioctl(struct file *f,
     unsigned int cmd, unsigned long arg)
 {
     void * parg = (void *)arg;
@@ -723,7 +723,7 @@
         if (lbdev->forward_dev)
             return dvblb_forward_ioctl(lbdev, f, cmd, arg);
 
-        return dvblb_usercopy (inode, f, cmd, arg,
+        return dvblb_usercopy (f, cmd, arg,
                                dvbdev->kernel_ioctl);
     }
     /* This is the userspace control device */
@@ -978,7 +978,7 @@
     .write        = dvblb_write,
     .poll        = dvblb_poll,
     .mmap        = dvblb_mmap,
-    .ioctl        = dvblb_ioctl,
+    .unlocked_ioctl        = dvblb_ioctl,
 };
 
 static struct dvb_device dvbdev_looped = {
@@ -998,7 +998,7 @@
     .write        = dvblb_write,
     .poll        = dvblb_poll,
     .mmap        = dvblb_mmap,
-    .ioctl        = dvblb_ioctl,
+    .unlocked_ioctl        = dvblb_ioctl,
 };
 
 static struct dvb_device dvbdev_userspace = {
--- contrib/sasc-ng/Makefile    2011-04-25 02:44:10.507089818 +0300
+++ contrib/sasc-ng/Makefile    2011-04-25 00:40:31.390323663 +0300
@@ -8,7 +8,7 @@
 
 CC       ?= gcc
 CXX      ?= g++
-CXXFLAGS ?= -Wall -D__user= -Werror
+CXXFLAGS ?= -Wall -D__user= #-Werror
 CFLAGS   ?= -Wall -D__user=
 
 ifdef DVB_DIR
@@ -17,7 +17,7 @@
 endif
 
 DEFINES += -DRELEASE_VERSION=\"$(VERSION)\" -D__KERNEL_STRICT_NAMES
-INCLUDES += -Idvbloopback/module -I/lib/modules/$(shell uname -r)/build/include
+INCLUDES += -Idvbloopback/module -I/usr/include
 LBDIR = dvbloopback/src
 SCDIR = sc/PLUGINS/src/$(SCVER)
 SC_FLAGS = -O2 -fPIC -Wall -Woverloaded-virtual
@@ -57,7 +57,7 @@
 INC_DEPS := $(shell ls $(LBDIR)/*.h) dvbloopback/module/dvbloopback.h
 INC_DEPS_LB := $(shell ls dvblb_plugins/*.h)
 
-LIBS = -lpthread -lcrypto -lcrypt
+LIBS = -lpthread -lcrypto -lcrypt -lv4l1
 
 all: $(TOOL) libscanwrap.so
 
--- contrib/sasc-ng/sc/dvbdevice.cpp    2011-04-25 02:44:10.519089162 +0300
+++ contrib/sasc-ng/sc/dvbdevice.cpp    2011-04-24 21:04:17.000000000 +0300
@@ -10,7 +10,7 @@
 #include "include/vdr/dvbdevice.h"
 #include
 #include
-#include
+#include
 #include
 #include
 #include
diff -u -r systems/constcw/constcw.c systems/constcw/constcw.c
--- systems/constcw/constcw.c    2011-04-25 02:44:10.567086537 +0300
+++ systems/constcw/constcw.c    2011-04-25 02:39:59.527575519 +0300
@@ -70,7 +70,7 @@
 
 bool cPlainKeyConstCw::Matches(const cEcmInfo *ecm)
 {
-  return ecm->prgId==prgId && ecm->source==source && ecm->transponder==transponder;
+  return ecm->prgId==prgId;
 }
 
 bool cPlainKeyConstCw::Parse(const char *line)
и съответно съхраняваме ( Ctrl + о ) и пачваме:

patch -p0 <2.6.38-sasc-ng.patch
След което продължаваме инсталацията по обичайния метод.
След проведените от мен безброй тестове обаче трябва да отбележа че ситуацията отива на по зле с пачнат саск и 64бит на новия кернел.

няма разлика в натоварването на процесора , като има минимална разлика в скороста на различните опримизации като за 11.04 (х64) на core2duo беше макс 520 а 9.10 (х86) 480. Другото което се забелязва е лошата работа при паралелна обработка на няколко канала едновременно от един транспондер - примерно за 9.10 - могат да се пуснат примерно 13 едновременно - като ограничението идва само от скоростта на подаване на ключове от кард сървъра , докато при 11.04 с пачнат саск ситуацията е по слаба и нестабилна - с многократни опити успах да подкарам едва 8. Въпреки това резулатите могат да варират в зависимост от конфигурацията... ;) ;;513
;;650

SatShop.bg
Ъплоуд център DishPointer Сателитни изстрелвания