RTLSDR: Porovnání verzí

Z Poznámkový blok
Přejít na: navigace, hledání
(RTL-SDR)
(Skript TCP)
 
(Není zobrazeno 42 mezilehlých verzí od stejného uživatele.)
Řádka 1: Řádka 1:
== Příprava ==
+
Zpět na [[Raspberry#Projekty|Raspberry]].
Pokud neinstalujeme ovladače do již stávajícího zařízení, připravíme si image podle [[Raspberry]]. Pro přístup přes SSH nezapomeňte nakopírovat prázdný soubor ssh.  
+
== Distribuce ==
 +
Pokud nepotřebujeme nejnovější verzi, tak stačí když provedeme instalaci přímo pomocí balíčku. Tato volba je výrazně jednoduší. Pak stačí zadat:
 +
sudo apt-get install -y rtl-sdr
  
 +
== Kompilace ==
 +
Složitější je provést instalaci přímo pomocí kompilace. Tato volba ale má za výhodu, že budeme mít nainstalovanou nejnovější verzi.
 +
 +
=== Příprava ===
 
Jakmile budeme mít připravenou distribuci doporučuji provést aktualizaci a následně doinstalovat programy které nám umožní vlastní instalaci ovladačů rtl-sdr:
 
Jakmile budeme mít připravenou distribuci doporučuji provést aktualizaci a následně doinstalovat programy které nám umožní vlastní instalaci ovladačů rtl-sdr:
  sudo apt-get update
+
  sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get upgade
+
  sudo apt-get install -y git gcc autoconf make libusb-1.0-0-dev libtool librtlsdr0
  sudo apt-get install git gcc autoconf make libusb-1.0-0-dev libtool
 
 
Je samozřejmě možné že některé programy mohou být již v distribuci zahrnuty.
 
Je samozřejmě možné že některé programy mohou být již v distribuci zahrnuty.
  
== Instalace ==
+
=== Instalace ===
 
Pak pokračujeme vlastní instalací ovladačů rtl-sdr:
 
Pak pokračujeme vlastní instalací ovladačů rtl-sdr:
  
 
  cd ~
 
  cd ~
  git clone git://git.osmocom.org/rtl-sdr.git
+
  git clone git://git.osmocom.org/rtl-sdr
 
  cd rtl-sdr/
 
  cd rtl-sdr/
 
  autoreconf -i
 
  autoreconf -i
 
  ./configure
 
  ./configure
  make
+
  make && sudo make install
sudo make install
+
   
  sudo ldconfig
 
 
  sudo mv $HOME/rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/rtl-sdr.rules
 
  sudo mv $HOME/rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/rtl-sdr.rules
  
 
== Nastavení ==
 
== Nastavení ==
Nakonec zablokujeme načtení původních ovladačů rtl v souboru raspi-blacklist.conf a vše restartujeme:
+
Nakonec zablokujeme načtení původních ovladačů rtl v souboru raspi-blacklist.conf a vše restartujeme (platí pro oba způsoby instalace):
 
  sudo nano /etc/modprobe.d/raspi-blacklist.conf
 
  sudo nano /etc/modprobe.d/raspi-blacklist.conf
+
 
 
  blacklist dvb_usb_rtl28xxu
 
  blacklist dvb_usb_rtl28xxu
 
  blacklist rtl2832
 
  blacklist rtl2832
Řádka 32: Řádka 36:
 
  sudo reboot
 
  sudo reboot
  
Po znovu přihlášení můžeme příkazem rtp_test -t ověřit, že je vše v pořádku.
+
Po znovu přihlášení můžeme příkazem rtl_test -t ověřit, že je vše v pořádku.
  
== Skript ==
+
== Skript TCP ==
 
Bohužel součástí instalace není skript, který by zajistil automatické spuštění po startu. Proto jsem se pokusil vytvořit následující. Jeho podstatnou výhodou je, že umožňuje spuštění RTL TCP serveru pro všechny klíčenky, které jsou připojeny.
 
Bohužel součástí instalace není skript, který by zajistil automatické spuštění po startu. Proto jsem se pokusil vytvořit následující. Jeho podstatnou výhodou je, že umožňuje spuštění RTL TCP serveru pro všechny klíčenky, které jsou připojeny.
  
Řádka 94: Řádka 98:
 
   
 
   
 
  # Cesta k vlastnimu skriptu rtl_tcp
 
  # Cesta k vlastnimu skriptu rtl_tcp
  PROGDIR=/usr/local/bin
+
  PROGDIR=/usr/bin
 
   
 
   
 
  # Adresar ze seznamem spustenych programu
 
  # Adresar ze seznamem spustenych programu
Řádka 109: Řádka 113:
 
  # Zjisteni IP adresy
 
  # Zjisteni IP adresy
 
  if [ "$NET" = "auto" ]; then
 
  if [ "$NET" = "auto" ]; then
     NET=`ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
+
     NET=`ifconfig eth0 | grep 'inet ' | cut -d: -f2 | awk '{ print $2}'`
 
  fi
 
  fi
 
  if [ "$NET" = "hostname" ]; then
 
  if [ "$NET" = "hostname" ]; then
Řádka 132: Řádka 136:
 
  # Zjisteni vsech SDR zarizeni jeli nastaveno all
 
  # Zjisteni vsech SDR zarizeni jeli nastaveno all
 
  if [ "$DEVICE" = "all" ]; then
 
  if [ "$DEVICE" = "all" ]; then
     DEVICE=`$PROGDIR/rtl_test -t 2>&1 | grep 'Realtek' | cut -d: -f1 | awk '{ print $1}'`
+
     DEVICE=`$PROGDIR/rtl_test -t 2>&1 | egrep 'RTL-SDR|Realtek|Nooelec' | cut -d: -f1 | awk '{ print $1}'`
 
  fi
 
  fi
 
   
 
   
Řádka 205: Řádka 209:
 
     fi
 
     fi
 
     PIDFILE="$PIDDIR/$PROGRAM-*.pid"
 
     PIDFILE="$PIDDIR/$PROGRAM-*.pid"
     rm $PIDFILE
+
     if [ "$PIDFILE" ]; then
 +
        rm -f $PIDFILE
 +
    fi
 
  }
 
  }
 
   
 
   
Řádka 211: Řádka 217:
 
     start)
 
     start)
 
         start
 
         start
 +
        ;;
 +
    startd)
 +
        start
 +
        wait
 
         ;;
 
         ;;
 
     stop)
 
     stop)
Řádka 223: Řádka 233:
 
         ;;
 
         ;;
 
     *)
 
     *)
     echo $"Moznosti: $0 {start|stop|restart|kill} [ID_zarizeni] [ID_zarizeni_1] [ID_zarizeni_2]"
+
     echo $"Moznosti: $0 {start|startd|stop|restart|kill} [ID_zarizeni] [ID_zarizeni_1] [ID_zarizeni_2]"
 
     retval=1
 
     retval=1
 
  esac
 
  esac
 +
 +
Skript uložíme do /etc/init.d pod nazvem rtl-tcp.sh. Následně přidáme práva pro spouštění a nastavíme automaticke spuštění při startu
 +
chmod +x rtl-tcp.sh
 +
update-rc.d rtl-tcp.sh defaults
 +
 +
Pro nové systému se již update-rc.d nepoužívá a tak nastavíme spouštění pomocí jako službu:
 +
sudo systemctl edit --force --full rtl-tcp.service
 +
 +
[Unit]
 +
Description=RTL-SDR TCP Server
 +
After=network-online.target
 +
 +
[Service]
 +
Type=simple
 +
ExecStart=/etc/init.d/rtl-tcp.sh start
 +
ExecReload=/etc/init.d/rtl-tcp.sh restart
 +
ExecStop=/etc/init.d/rtl-tcp.sh stop
 +
RestartSec=10
 +
Restart=on-failure
 +
 +
[Install]
 +
WantedBy=multi-user.target
 +
Alias=rtl-tcp.service
 +
 +
== SystemD ==
 +
 +
Aby byla zachována moznost spusteni na vice klicenkach, je nutne upravit skript a vytvořit dve služby. Jednu multi pro vlastni rtlsdr a druhou, která to vše spusti.
 +
 +
[Unit]
 +
Description=RTL-SDR TCP Server
 +
After=network.target
 +
 +
[Service]
 +
Type=simple
 +
ExecStart=/usr/bin/rtl_tcp "%i"
 +
RestartSec=10
 +
Restart=on-failure
 +
 +
[Install]
 +
DefaultInstance=all
 +
 +
== KerberosSDR ==
 +
Hardverově zajímavé provedeni RTL-SDR ze na jedné desce se nachází celkem 4 klíčenky včetně USB hub. Tudíž následně je propojen z PC jen jedním kabelem.
 +
 +
Ke KerberosSD se vážou podstatné okazy:
 +
* http://kerberossdr.com/ - vlastní web stránka
 +
* https://www.rtl-sdr.com/ksdr/ - postup instalace radaru
 +
 +
== Odkazy ==
 +
 +
* https://osmocom.org/projects/rtl-sdr/wiki
 +
* https://git.osmocom.org/rtl-sdr/
 +
 +
* [[Raspberry#Projekty | Zpět na projekty Raspberry Pi]]

Aktuální verze z 19. 11. 2024, 22:05

Zpět na Raspberry.

Distribuce

Pokud nepotřebujeme nejnovější verzi, tak stačí když provedeme instalaci přímo pomocí balíčku. Tato volba je výrazně jednoduší. Pak stačí zadat:

sudo apt-get install -y rtl-sdr

Kompilace

Složitější je provést instalaci přímo pomocí kompilace. Tato volba ale má za výhodu, že budeme mít nainstalovanou nejnovější verzi.

Příprava

Jakmile budeme mít připravenou distribuci doporučuji provést aktualizaci a následně doinstalovat programy které nám umožní vlastní instalaci ovladačů rtl-sdr:

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y git gcc autoconf make libusb-1.0-0-dev libtool librtlsdr0

Je samozřejmě možné že některé programy mohou být již v distribuci zahrnuty.

Instalace

Pak pokračujeme vlastní instalací ovladačů rtl-sdr:

cd ~
git clone git://git.osmocom.org/rtl-sdr
cd rtl-sdr/
autoreconf -i
./configure
make && sudo make install

sudo mv $HOME/rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/rtl-sdr.rules

Nastavení

Nakonec zablokujeme načtení původních ovladačů rtl v souboru raspi-blacklist.conf a vše restartujeme (platí pro oba způsoby instalace):

sudo nano /etc/modprobe.d/raspi-blacklist.conf
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
blacklist r820t

sudo reboot

Po znovu přihlášení můžeme příkazem rtl_test -t ověřit, že je vše v pořádku.

Skript TCP

Bohužel součástí instalace není skript, který by zajistil automatické spuštění po startu. Proto jsem se pokusil vytvořit následující. Jeho podstatnou výhodou je, že umožňuje spuštění RTL TCP serveru pro všechny klíčenky, které jsou připojeny.

#!/bin/sh
#
### BEGIN INIT INFO
# Provides:          skeleton
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.  This example start a
#                    single forking daemon capable of writing a pid
#                    file.  To get other behavoirs, implemend
#                    do_start(), do_stop() or other functions to
#                    override the defaults in /lib/init/init-d-script.
### END INIT INFO

# Author skriptu: Tydyt

# Nastaveni adresy na ktere RTL TCP server posloucha:
# 0.0.0.0   - server nasloucha na vsech svych adresach
# 127.0.0.1 - server posloucha jen na adrese lokalhost (nelze se vzdalene pripojit)
# x.x.x.x   - server nasloucha na konkretni adrese (adresa musí byt k dispozici)
# auto      - skript nastavi automaticky vnejsi IP adresu z eth0
# hostname  - skript nastavi automaticky IP adresu z hostname
NET="0.0.0.0"

# Seznam RTL SDR zarizeni ktere se maji pouzit
# Jednotlive ID oddelit mezerou
# 0      - pouzije se prvni zarizani ID 0
# 0 4 5  - pouziji se zrizeni ID 0, 4, 5
# all    - pouziji se vsechny zarizeni
DEVICE="all"

# Vychozi TCP port pro server
PORT="1234"

# Zpusob vytvoreni TCP portu pro jednotlive zarizani
# sum - k vychozimu portu je pricteno ID zarizeni ($PORT + $DEVICE)
# add - k vychozimu portu je pridano ID zarizeni ($PORT$DEVICE)
PORT_ADD="sum"

# Moznost pridani dalsich parametru pro server. Tyto hodnoty mohou byt
# zmeneny vlastni aplikaci ktera se k RTL RTP serveru pripoji.
#        -f frequency to tune to [Hz]
#        -g gain (default: 0 for auto)
#        -s samplerate in Hz (default: 2048000 Hz)
#        -b number of buffers (default: 15, set by library)
#        -n max number of linked list buffers to keep (default: 500)
#        -P ppm_error (default: 0)
#
PROG_ARGS=""

# Nazev vlastniho skriptu rtl_tcp
PROGRAM=rtl_tcp

# Cesta k vlastnimu skriptu rtl_tcp
PROGDIR=/usr/bin

# Adresar ze seznamem spustenych programu
PIDDIR=/var/run

# Zacatek skriptu
PATH=/sbin:/usr/sbin:/bin:/usr/bin

if [ ! -f $PROGDIR/$PROGRAM ]; then
    echo "Nebyl nelezen skript rtl_tcp !"
    exit 0
fi

# Zjisteni IP adresy
if [ "$NET" = "auto" ]; then
    NET=`ifconfig eth0 | grep 'inet ' | cut -d: -f2 | awk '{ print $2}'`
fi
if [ "$NET" = "hostname" ]; then
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
        NET=$_IP
    else
        NET="0.0.0.0"
    fi
fi

# Nastav id z prikazovaho radku jsouli zadane
if [ $# -gt 1 ]; then
    DEVICE=""
    for ID in $@; do
        if [ ! "$ID" = "$1" ]; then
            DEVICE="$DEVICE $ID"
        fi
    done
fi

# Zjisteni vsech SDR zarizeni jeli nastaveno all
if [ "$DEVICE" = "all" ]; then
    DEVICE=`$PROGDIR/rtl_test -t 2>&1 | egrep 'RTL-SDR|Realtek|Nooelec' | cut -d: -f1 | awk '{ print $1}'`
fi

start(){
    for ID in $DEVICE; do
        if [ "$PORT_ADD" = "sum" ]; then
            PORT_ID=$(($PORT+$ID))
        else
            PORT_ID="$PORT$ID"
        fi
        if [ "$PROG_ARGS" ]; then
            ARGS="-a $NET -p $PORT_ID $PROG_ARGS"
        else
            ARGS="-a $NET -p $PORT_ID"
        fi
        startone $ID $PORT_ID
    done
}

stop(){
    for ID in $DEVICE; do
        stopone $ID
    done
}

startone(){
    PIDFILE="$PIDDIR/$PROGRAM-$1.pid"
    if [ -f $PIDFILE ]; then
        echo "Server RTL TCP na zarizeni ID $1 JE jiz spusten !"
        return
    else
        echo -n "Server RTL TCP na zarizeni ID $1 ... "
        $PROGDIR/$PROGRAM -d $1 $ARGS >> /dev/null 2>&1 &
        PID=$!
        sleep 1
        PIDR=`pidof $PROGRAM`
        if [ "$PIDR" ]; then
            for ID in $PID; do
                if [ $ID = $PID ]; then
                    echo $PID > "$PIDFILE"
                    echo "Je spusten na porte TCP $2"
                    return
                fi
            done
        fi
        echo "Se nepodarilo spustit ! ($ARGS)"
    fi
}

stopone(){
    PIDFILE="$PIDDIR/$PROGRAM-$1.pid"
    if [ ! -f $PIDFILE ]; then
        echo "Server RTL TCP na zarizeni ID $1 NENI spusten !"
        return
    else
        echo -n "Server RTL TCP na zarizeni ID $1 ... "
        pid2kill=`cat $PIDFILE`
        kill -9 $pid2kill
        rm $PIDFILE
        echo "Je ukoncen."
    fi
}

killall(){
    echo -n "Ukonceni vsech RTL TCP serveru: "
    PID=`pidof $PROGRAM`
    echo "pid: $PID"
    if [ "$PID" ]; then
        for ID in $PID; do
            kill -9 $ID
        done
    fi
    PIDFILE="$PIDDIR/$PROGRAM-*.pid"
    if [ "$PIDFILE" ]; then
        rm -f $PIDFILE
    fi
}

case "$1" in
   start)
        start
        ;;
   startd)
        start
        wait
        ;;
   stop)
        stop
        ;;
   restart)
        killall
        start
        ;;
    kill)
        killall
        ;;
   *)
    echo $"Moznosti: $0 {start|startd|stop|restart|kill} [ID_zarizeni] [ID_zarizeni_1] [ID_zarizeni_2]"
    retval=1
esac

Skript uložíme do /etc/init.d pod nazvem rtl-tcp.sh. Následně přidáme práva pro spouštění a nastavíme automaticke spuštění při startu

chmod +x rtl-tcp.sh
update-rc.d rtl-tcp.sh defaults

Pro nové systému se již update-rc.d nepoužívá a tak nastavíme spouštění pomocí jako službu:

sudo systemctl edit --force --full rtl-tcp.service
[Unit]
Description=RTL-SDR TCP Server
After=network-online.target

[Service]
Type=simple
ExecStart=/etc/init.d/rtl-tcp.sh start
ExecReload=/etc/init.d/rtl-tcp.sh restart
ExecStop=/etc/init.d/rtl-tcp.sh stop
RestartSec=10
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=rtl-tcp.service

SystemD

Aby byla zachována moznost spusteni na vice klicenkach, je nutne upravit skript a vytvořit dve služby. Jednu multi pro vlastni rtlsdr a druhou, která to vše spusti.

[Unit]
Description=RTL-SDR TCP Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/rtl_tcp "%i"
RestartSec=10
Restart=on-failure

[Install]
DefaultInstance=all

KerberosSDR

Hardverově zajímavé provedeni RTL-SDR ze na jedné desce se nachází celkem 4 klíčenky včetně USB hub. Tudíž následně je propojen z PC jen jedním kabelem.

Ke KerberosSD se vážou podstatné okazy:

Odkazy