RTLSDR: Porovnání verzí
(→Skript TCP) |
|||
(Není zobrazeno 35 mezilehlých verzí od stejného uživatele.) | |||
Řádka 1: | Řádka 1: | ||
− | Zpět na [[Raspberry]]. | + | Zpět na [[Raspberry#Projekty|Raspberry]]. |
== Distribuce == | == 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: | 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 rtl-sdr | + | sudo apt-get install -y rtl-sdr |
== Kompilace == | == Kompilace == | ||
Řádka 9: | Řádka 9: | ||
=== Příprava === | === 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 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. | ||
Řádka 18: | Řádka 17: | ||
cd ~ | cd ~ | ||
− | git clone git://git.osmocom.org/rtl-sdr | + | 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 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 | ||
Řádka 38: | Řádka 36: | ||
sudo reboot | sudo reboot | ||
− | Po znovu přihlášení můžeme příkazem | + | Po znovu přihlášení můžeme příkazem rtl_test -t ověřit, že je vše v pořádku. |
== Skript TCP == | == Skript TCP == | ||
Řádka 100: | Řádka 98: | ||
# Cesta k vlastnimu skriptu rtl_tcp | # Cesta k vlastnimu skriptu rtl_tcp | ||
− | PROGDIR=/usr | + | PROGDIR=/usr/bin |
# Adresar ze seznamem spustenych programu | # Adresar ze seznamem spustenych programu | ||
Řádka 115: | Řádka 113: | ||
# Zjisteni IP adresy | # Zjisteni IP adresy | ||
if [ "$NET" = "auto" ]; then | if [ "$NET" = "auto" ]; then | ||
− | NET=`ifconfig eth0 | grep 'inet | + | NET=`ifconfig eth0 | grep 'inet ' | cut -d: -f2 | awk '{ print $2}'` |
fi | fi | ||
if [ "$NET" = "hostname" ]; then | if [ "$NET" = "hostname" ]; then | ||
Řádka 138: | Řá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 | | + | DEVICE=`$PROGDIR/rtl_test -t 2>&1 | egrep 'RTL-SDR|Realtek|Nooelec' | cut -d: -f1 | awk '{ print $1}'` |
fi | fi | ||
Řádka 211: | Řádka 209: | ||
fi | fi | ||
PIDFILE="$PIDDIR/$PROGRAM-*.pid" | PIDFILE="$PIDDIR/$PROGRAM-*.pid" | ||
− | rm $PIDFILE | + | if [ "$PIDFILE" ]; then |
+ | rm -f $PIDFILE | ||
+ | fi | ||
} | } | ||
Řádka 217: | Řádka 217: | ||
start) | start) | ||
start | start | ||
+ | ;; | ||
+ | startd) | ||
+ | start | ||
+ | wait | ||
;; | ;; | ||
stop) | stop) | ||
Řádka 229: | Řá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.
Obsah
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:
- http://kerberossdr.com/ - vlastní web stránka
- https://www.rtl-sdr.com/ksdr/ - postup instalace radaru