středa 24. února 2021

čtvrtek 28. května 2020

Tunelováni TCP spojení IPv4, IPv6, zkrátka všude

Začalo nutností připojit se z IPv4 Only prostřednictvím sítě IPv6 Only na stroj s neveřejnou IPv4 adresou. Ještě štěstí, že mám k dispozici server, který má obě veřejné adresy.

IPv4 (klient) <4=4> IPv4/IPv6 (internetový server) IPv4/IPv6 <6=6> IPv6 (router) IPv4 <4=4> IPv4 (privátní server)

Na privátním serveru nasloucháme:

nc -l 8000

Na routeru nastavíme správně firewall (Accept) a spustíme socat:

socat TCP6-LISTEN:8000,fork <privátní server IPv4>:8000

Na Internetovém serveru spustíme také socat:

socat TCP4-LISTEN:8000,fork TCP6:[<IPv6 adresa routeru>]:8000

A klient (IPv4 Only) se připojí k serveru:
nc <IPv4 adresa internetového serveru> <port>


Jako bonus můžeme trasu mezi serverem a routerem pustit SSL tunelem: (teorie :-))
socat TCP-LISTEN:51000,fork,reuseaddr OPENSSL:remotehost:51000,cafile=certificate.pem,verify=0

socat OPENSSL-LISTEN:4433,reuseaddr,cert=server.pem,cafile=certificate.pem,fork <privátní server IPv4>:8000

středa 29. dubna 2020

Rasbian na RaspberryPi 4

Povolit consoli v souboru: /boot/config.txt

enable_uart=1

  1. # hcitool dev
    
    Sometimes the device is not active right away. Try starting the interface with:
    # hciconfig hci0 up
  2. Power off the bluetooth:
    [bluetooth] # power off
  3. Power on the bluetooth, then enable the pairing method on the mouse if needed"
    [bluetooth] # power on
  4. List the available bluetooth devices, you have to copy the mouse device ID XX:XX:XX:XX:XX:XX:
    [bluetooth] # scan on
  5. Unpair the device if already paired:
    [bluetooth] # remove XX:XX:XX:XX:XX:XX
  6. Trust the device:
    [bluetooth] # trust XX:XX:XX:XX:XX:XX
  7. Pair the mouse with the computer:
    [bluetooth] # pair XX:XX:XX:XX:XX:XX
  8. Connect the computer with the mouse:
    [bluetooth] # connect XX:XX:XX:XX:XX:XX
  9. Unblock the device control:
    [M585/M590] # unblock

Instalace Kodi

sudo apt-get update
sudo apt-get install kodi

A přidáme Kodi do seznamu úloh po startu (/etc/xdg/lxsession/LXDE-pi/autostart):
@kodi

podrobněji o vyladění výkonu:
https://www.raspberrypi.org/forums/viewtopic.php?t=251645

https://wiki.archlinux.org/index.php/bluetooth_mouse
https://learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/enabling-serial-console

úterý 4. února 2020

Pluginy Kodi (Python3)

V souvislosti s ukončením podpory Pythonu 2 přechází i LibreElec na Python 3. Pro provizorní opravu pluginu TelevizeSeznamu

by mělo stačit automaticky převést na verzi 3 pomocí 2to3.

Ve složce /storage/.kodi/addons/plugin.video.televizeseznam.cz spustíme.

LibreELEC:~/.kodi/addons/plugin.video.televizeseznam.cz # 2to3-3.7 -w client.py
LibreELEC:~/.kodi/addons/plugin.video.televizeseznam.cz # 2to3-3.7 -w addon.py

a je to. :-)

sobota 18. ledna 2020

Symlinky pro více tiskáren pod OpenWRT

Tiskárny se přesunuly do /dev/usb/lp*, udev byl nahrazen procd. Konfigurační soubory jsou podobné jako u hotplug, tedy v /etc/hotplug.d/ pro USB je to například /etc/hotplug.d/usbmisc/20-p910nd

konfigurační soubor by mělo stačit upravit takto:

skriptík v podstatě načte z /sys/class/usbmisc/lpX/device/ ze souboru ieee1284_id informace o tiskárně a podle názvu tiskárny vytvoří smylink do /dev. Například tedy /dev/ML-1520/dev/CLP-320.

Edit: Tak ještě jedna úprava, původní skript nechával symlinky a pokud uživatel znovu zapnul tiskárny ve špatném pořadí, tak to nefungovalo (soubor ieee1284_id v době odpojování neexistoval). Nově si skript vytváří v /tmp/printers soubory s názvy tiskáren, tak aby věděl kterou při odebrání smazat (uznávám šlo by to jistě i lépe).

vyzobneme název tiskárny (MFG:Samsung;CMD:GDI;MDL:ML-1520;CLS:PRINTER;MODE:GDI;STATUS:IDLE;CODE:10003)

cut -d: -f4 /sys/class/usbmisc/$DEVICENAME/device/ieee1284_id

odebereme ";CLS"
sed -e 's/;.*//'
odebere mezeru a vše za ní (příklad názvu "CLP-320 Series") sed -e 's/ .*//'


A nyní kompletní skript:
#!/bin/sh case "$ACTION" in add) [ -n "${DEVNAME}" ] && [ "${DEVNAME##usb/lp*}" = "" ] && { chmod 660 /dev/"$DEVNAME" chgrp lp /dev/"$DEVNAME" PRINTERNAME=`cut -d: -f4 /sys/class/usbmisc/$DEVICENAME/device/ieee1284_id | sed -e 's/;.*//' | sed -e 's/ .*//'` ln -s /dev/$DEVNAME /dev/$PRINTERNAME mkdir /tmp/printers echo "/dev/$PRINTERNAME" > /tmp/printers/$DEVICENAME } ;; remove) [ -n "${DEVNAME}" ] && [ "${DEVNAME##usb/lp*}" = "" ] && { # device is gone PRINTERNAME=`cat /tmp/printers/$DEVICENAME` rm $PRINTERNAME rm /tmp/printers/$DEVICENAME } ;; esac




sobota 11. ledna 2020

Nový DVB-T2 tuner

Tak to přišlo, po odchodu na zasloužený odpočinek analogové vysílání odchází na odpočinek i standart DVB-T. Pro hrátky s příjmem digitální TV jsem si musel koupit nový USB tuner.

kmod-media-tuner-r820t
kmod-dvb-usb-rtl28xxu
rtl-ais






RTL2832P, SONY CXD2887ER, Rafael Micro R828D


29881.210626] r820t 17-003a: destroying instance
[29881.210953] dvb_usb_v2: 'Astrometa DVB-T2:2-1.2' successfully deinitialized and disconnected
[29883.780263] usb 2-1.2: new high-speed USB device number 5 using ehci-pci
[29883.899164] usb 2-1.2: New USB device found, idVendor=15f4, idProduct=0131, bcdDevice= 1.00
[29883.899171] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[29883.899175] usb 2-1.2: Product: dvbt2
[29883.899179] usb 2-1.2: Manufacturer: astrometadvbt2
[29883.906786] usb 2-1.2: dvb_usb_v2: found a 'Astrometa DVB-T2' in warm state
[29884.053298] usb 2-1.2: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[29884.053317] dvbdev: DVB: registering new adapter (Astrometa DVB-T2)
[29884.053327] usb 2-1.2: media controller created
[29884.053949] dvbdev: dvb_create_media_entity: media entity 'dvb-demux' registered.
[29884.061026] i2c i2c-16: Added multiplexed i2c bus 17
[29884.061032] rtl2832 16-0010: Realtek RTL2832 successfully attached
[29884.061085] i2c i2c-16: cxd2841er_attach(): I2C adapter 00000000ae7d58ea SLVX addr 6e SLVT addr 6c
[29884.065637] i2c i2c-16: cxd2841er_attach(): attaching CXD2837ER DVB-C/T/T2 frontend
[29884.065644] i2c i2c-16: cxd2841er_attach(): chip ID 0xb1 OK.
[29884.065656] usb 2-1.2: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
[29884.065672] dvbdev: dvb_create_media_entity: media entity 'Realtek RTL2832 (DVB-T)' registered.
[29884.065999] usb 2-1.2: DVB: registering adapter 0 frontend 1 (Sony CXD2837ER DVB-T/T2/C demodulator)...
[29884.066009] dvbdev: dvb_create_media_entity: media entity 'Sony CXD2837ER DVB-T/T2/C demodulator' registered.
[29884.066281] r820t 17-003a: creating new instance
[29884.073613] r820t 17-003a: Rafael Micro r820t successfully identified
[29884.073638] r820t 17-003a: attaching existing instance
[29884.091830] r820t 17-003a: Rafael Micro r820t successfully identified
[29884.104867] rtl2832_sdr rtl2832_sdr.1.auto: Registered as swradio0
[29884.104872] rtl2832_sdr rtl2832_sdr.1.auto: Realtek RTL2832 SDR attached
[29884.104875] rtl2832_sdr rtl2832_sdr.1.auto: SDR API is still slightly experimental and functionality changes may follow
[29884.112782] Registered IR keymap rc-empty
[29884.112917] rc rc0: Astrometa DVB-T2 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/rc/rc0
[29884.113045] input: Astrometa DVB-T2 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/rc/rc0/input17
[29884.113585] rc rc0: lirc_dev: driver dvb_usb_rtl28xxu registered at minor = 0, raw IR receiver, no transmitter
[29884.113963] usb 2-1.2: dvb_usb_v2: schedule remote query interval to 200 msecs
[29884.122402] usb 2-1.2: dvb_usb_v2: 'Astrometa DVB-T2' successfully initialized and connected

úterý 19. listopadu 2019

Build DigiTempu pro Turris

Nejprve je potřeba nainstalovat vše potřebné


apt-get install ca-certificates git build-essential zlib1g-dev gawk libssl-dev subversion unzip libncurses-dev wget python file rsync

pak již stačí naklonovat aktuální verzi zrojáků pro TurrisOS

https://gitlab.labs.nic.cz/turris/turris-build/-/archive/master/turris-build-master.zip

Obsah rozbalíme a spustíme skript compile_pkgs, parametr board nahradíme HW pro který balíček kompilujeme (turris, omnia, mox)

compile_pkgs prepare_tools -t <board>

Pak již stačí přidat do feeds.conf link na balíček DigiTempu.

src-git hnw_digitemp https://github.com/hnw/openwrt-packages-digitemp.git

A provést update a zkompilovat balíček DigiTempu

./scripts/feeds update -a
./scripts/feeds install digitemp
make defconfig
make package/toolchain/compile
make package/digitemp/compile

A je to, v in/packages/arm_cortex-a9_vfpv3/packages/
No tak ne, bude ještě potřebovat laborovat, balíček nám nejde nainstalovat:
root@JFila:digitem# opkg install digitemp_3.7.2-2_arm_cortex-a9_vfpv3.ipk 
Unknown package 'digitemp'.
Collected errors:
 * pkg_hash_fetch_best_installation_candidate: Packages for digitemp found, but incompatible with the architectures configured
 * opkg_install_cmd: Cannot install package digitemp.


https://gitlab.labs.nic.cz/turris/turris-build
https://github.com/hnw/openwrt-packages-digitemp

středa 3. července 2019

Dekódování certifikátu

openssl x509 -text -noout -in certificate.crt
openssl crl -inform DEM -text -noout -in certificate.crt

formát certifikátu:

-----BEGIN CERTIFICATE-----
MIIF+TCCBOGgAwIBAgIRAOUXUXsbB/LpS0VTQsz/HFcwDQYJKoZIhvcNAQELBQAw
gY8xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
JU9CcMK//V5CIAjGNzV55hB7zFYAAAFoWw+eiwAABAMARzBFAiEAmdEbql+1pWWf
HmpkY34JziCOQzaDlFVtUFen+blgIWwCIBVnwDD3vnwSsrO2T5Clo5Pjqa+xxU7O
trLo/ZRGkICBMA0GCSqGSIb3DQEBCwUAA4IBAQAzOM9lS3RSU7rLy8T3BfixHvua
ErZ+YOHCHpYhlCeSuFZ66jVHueYWvgfF8A+enRdMM0k0z0PC9enREnumNDq3msCf
WYhSLd5lDXiEddg2GCrXkwhOFfOiG0tywS5CD+hLsTq1LQkWDQg7EKlIb6ddhaZO
IYEQ9xwE7aehynQEvAjv3UyevMYfvw7glY+MW5bkMfsxPndDD1gDbnYt8kyenjcv
odjnkvTw4ngnCy1gF9mVWkgQsE1j34FER1bVtR/FlspI0FB+ogV4Qhso1N23DwtF
VDKxH8p+ddYh1LX4b6Oy3dZqzt4HOcunPKsFv36ABpeTs8FPOjgQueTWfHQ4
-----END CERTIFICATE-----



https://www.sslmentor.cz/napoveda/formaty-certifikatu

sobota 29. června 2019

Raspberry Pi ladění

Jak jsem ji psal v předchozím příspěvku, Raspberry Pi má nadno dostupný JTAG a díky tomu je možné kód na něm pohodlně ladit. Jako převodník jsem použil čínský klon J-Linku a již dříve popsané OpenOCD.

openocd -f ..\scripts\interface\jlink.cfg -f ..\scripts\target\raspberry3.cfg

GNU MCU Eclipse OpenOCD, 64-bitOpen On-Chip Debugger 0.10.0+dev-00593-g23ad80df4 (2019-04-22-20:25)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst
adapter speed: 1000 kHz
jtag_ntrst_delay: 500
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : J-Link ARM V8 compiled Nov 28 2014 13:44:46
Info : Hardware version: 8.00
Info : VTarget = 3.306 V
Info : clock speed 1000 kHz
Info : JTAG tap: rpi3.tap tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x4)
Info : rpi3.a53.0: hardware has 6 breakpoints, 4 watchpoints
Info : rpi3.a53.1: hardware has 6 breakpoints, 4 watchpoints
Info : rpi3.a53.2: hardware has 6 breakpoints, 4 watchpoints
Info : rpi3.a53.3: hardware has 6 breakpoints, 4 watchpoints
Info : Listening on port 3333 for gdb connections
Info : Listening on port 3334 for gdb connections
Info : Listening on port 3335 for gdb connections
Info : Listening on port 3336 for gdb connections

po připojení telnetem (port 4444) se zobrazí toto:
Open On-Chip Debugger
> targets
    TargetName         Type       Endian TapName            State
--  ------------------ ---------- ------ ------------------ ------------
 0  rpi3.a53.0         aarch64    little rpi3.tap           running
 1  rpi3.a53.1         aarch64    little rpi3.tap           running
 2  rpi3.a53.2         aarch64    little rpi3.tap           running
 3* rpi3.a53.3         aarch64    little rpi3.tap           running
> halt
cannot read system control register in this mode
in procedure 'target'
> targets
    TargetName         Type       Endian TapName            State
--  ------------------ ---------- ------ ------------------ ------------
 0  rpi3.a53.0         aarch64    little rpi3.tap           running
 1  rpi3.a53.1         aarch64    little rpi3.tap           running
 2  rpi3.a53.2         aarch64    little rpi3.tap           running
 3* rpi3.a53.3         aarch64    little rpi3.tap           halted
> mww 0x3f200004 0x40240
> mdw 0x3f200000 0x50
0x3f200000: 00000000 00040240 086db6c0 00000009 3f200924 00000fff 00000000 6770696f
0x3f200020: 6770696f 6770696f 6770696f 6770696f 6770696f 1349c1ff 003efcff 00000000
0x3f200040: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0x3f200060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0x3f200080: 00000000 00000000 00000000 00000000 00000000 00000002 00000000 00000000
0x3f2000a0: 00000000 ffffffff 003fffff 6770696f 00000000 6770696f 6770696f 6770696f
0x3f2000c0: 00000000 00000000 00000000 00000000 6770696f 6770696f 6770696f 6770696f
0x3f2000e0: 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f
0x3f200100: 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f
0x3f200120: 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f 6770696f

mdb u Raspberry Pi nefunguje, protože CPU umožňuje číst jen po 32 bitech
> mdb 0x3f200000
Opcode 0x1001e4d0, DSCR.ERR=1, DSCR.EL=2

stejně tak nebude fungovat s jinou adresou než dělitelnou čtyřkou (word)
> mdw 0x3f200001
Opcode 0x1004e490, DSCR.ERR=1, DSCR.EL=2

zapnutí LEDek (nastavení směru pro GPIO12,13 a 16)
mww 0x3f200004 0x40240

Stažení image (kernel7.img je po startu nakopírován GPU od adresy 0x8000):
> dump_image flash.bin 0x8000 0x1000
dumped 4096 bytes in 0.097825s (40.889 KiB/s)

Nyní ještě k jádrům, to je novinka oproti klasickým STM32F1, které mají jádro jen jedno. Napadlo vás někdy jak to vlastně funguje, když máme procesory třeba čtyři? Jak je třeba psát program pro čtyř jádrový procesor? Pokud napíšeme program, tak jak jsem to udělal v předchozím příspěvku, nulté jádro ho vykonává ale ostatní jadérka se nám "flákají".

nahrajeme program do RAM paměti
load_image "D:/vyvoj/GPIO_jinak/main.bin" 0x90000 bin

a spustíme
resume 0x90000

Zapojení pinů:

JTAG Pin
J-Link Pin
SoC Pin
Raspberry Pi pin
Vref
1

1
nRST
3
GPIO22
15
GND
4

6
TDI
5
GPIO26
37
TMS
7
GPIO27
13
TCK
9
GPIO25
22
RTCK
11
GPIO23
16
TDO
13
GPIO24
18





neděle 26. května 2019

RTL SDR pod Windows 10

Po přechodu na Windows 10 bylo nutné nainstalovat nové ovladače pro RTL2832U. V mém případě nestačilo jen stáhnout a dle obvyklého postupu "nahradit" původní ovladač WinUSB. Koumáním logu jsem zjistil, že při instalaci si program vytvoří v "Users/Jméno_uživatele/" složku usb_driver ale hledá ji v umístění "Users/Jméno_uživatele/./usb_driver/". Stačilo tedy, v rozšířeném módu, kliknout vedle tlačítka "Install Driver" nebo "Replace Driver" a vybrat příslušnou složku amd64 nebo x86. Viz následující obrázek.


Pokud po instalaci ovladače WinUSB není možné tuner najít, tak je potřeba podobně postupovat USB Driver Tool.

http://visualgdb.com/UsbDriverTool

Jako první jsem se pokusil naladit FM rádia, konkrétně Radiožurnál je u nás na frekvenci 88,5 MHz, musel jsem tedy vyštrachat FM anténu od staré TV karty. Pro příjem jsem použil SDRSharp viz následující obrázek, je nutné si trochu pohrát se ziskem vstupního zesilovače (RF Gain).




Nastavení.


Dálková ovládání jsou většinou v pásmu 433 MHz.

Dále je možné si pěkně naladit takové ty dětské vysílačky, jedna byla na frekvenci 27 MHz a druhá na 52,6 MHz.

Příjem AM (amplitudově modulovaného signálu) je možné si vyzkoušel například na vysílání letového provozu. Pásmo se nachází v rozsahu 108-136 MHz a používá se právě AM modulace.

Příklady frekvencí letišť, které mají přiděleny:
Mladá Boleslav                       123,6 MHz
Dvůr Králové nad Labem 119,65 MHz

Příklad komunikace je zde: Aha, zrovna nám okolo letí OK-RTR - CESSNA 172 SP  z odkazu zjistíme spoustu zajímavých podrobností.

Kromě příjmu FM rádií se podařilo zprovoznit i příjem ADS-B dat palubních odpovídačů letadel. Bylo nutné si vzpomenout, jak se počítala vlnová délka lambda a uskřípnout a připájet dva drátky o délce čtvrtiny vlnové délky. Pro kmitočet ADS-B 1090 MHz je délka jedné poloviny cca 6,9 cm, tím nám vznikl půlvlnný dipól.


Dále jsem se pokoušel zobrazit spektrum GPS signálu ale patrně již bylo mimo rozsah přijímače (1575,42 MHz) nebo napájením předzesilovače antény.

Další bezva věcí je možnost SDRSharp doplnit o měřič signálu (LEVELMETER) ideální pro nastavení anténního zesilovače.

Na závěr jsem se ještě pokoušel o příjem DAB ale bohužel se nezadařilo, přikládám tedy alespoň obrázek spektra.



Zdroje:
http://sdr.ipip.cz/rtl-sdr-ads-b
http://blueskyaviation.cz/pronajem-letadel/cessna-172-sp/
https://www.rtl-sdr.com/levelmeter-new-sdr-plugin/