Инсталация на платка 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
вече всичко е готово и трябва да заработи след рестарт на системата.
С пожелание за спорна работа от автора
Защо 10.04?
защото е LTS и с тази версия съм го правил - не описвам неща които не знам дали ще сработят
Ок, затова питах дали имаш нещо предвид за несъвместимост с по-нови, както например спряха подръжка на Х13хх на Ати. Т.е. който иска може да пробва и с 11.04 и гном3
Разбира се при желание може и да сподели дали е бил успешен опита с 11.04
За 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