Kodi auf dem Banana Pi Pro mit Infrarot Fernbedienung

  • ACHTUNG: Dieses Howto ist in einem mehrst├╝ndigen Prozess entstanden, und das Endergebnis wird von mir seitdem jeden Tag verwendet, seit 05.2018
  • Deswegen k├Ânnen nat├╝rlich trotzdem Tipp-Fehler enthalten sein, es ist mehr als Hinweis zu verstehen, was man tun muss
  • wenn es Config-Dateien zum Download gibt, dann werden die von mir 1:1 so verwendet. Garantie, dass es klappt, gibt es nat├╝rlich trotzdem keine
  • Ohne das BananaPi-Kochbuch h├Ątte ich das nie hinbekommen, da stehen weitere Eigenheiten detailliert beschrieben

Folgendes Image downloaden und verwenden:

Armbian_5.38_Bananapipro_Ubuntu_xenial_default_3.4.113_desktop.7z

  • Nur der in diesem Image vorhandene Kernel hat Video-/3D-Beschleunigung
  • Vielleicht gibt es einmal einen neueren Kernel, der auch 3D-Beschleunigung unterst├╝tzt, siehe
  • Image auf die Karte schreiben: die SD-Karte mit dem Linux-PC verbinden, via dmesg schauen, als welches Ger├Ąt es erkannt wird
dmesg
[...]
[302631.665357] sd 10:0:0:1: [sdg] 30537728 512-byte logical blocks: (15.6 GB/14.6 GiB)
[302631.676330]  sdg: sdg1

Das Image entpacken und mit dd auf die Karte schreiben:

# 7z x Armbian_5.38_Bananapipro_Ubuntu_xenial_default_3.4.113_desktop.7z
# dd if=Armbian_5.38_Bananapipro_Ubuntu_xenial_default_3.4.113_desktop.img of=/dev/sdg
  • Karte in den Banana Pi (Pro) einstecken, mit Bildschirm und Tastatur verbinden, warten bis gebootet
  • erster login
  • Beachte:
bananapi pro login: root
Password: 1234

changing password, 
current password: 1234
new UNIX password: bananapi
Retype new UNIX password: bananapi
  • Nach Login einen normalen Benutzer anlegen
new user: chrissie
password: bananapi
  • Jetzt eine IP via dhcp beziehen
# dhclient eth0
  • Oder das Netzwerk hier in der Text-Datei konfigurieren
# vi /etc/network/interfaces
# /etc/init.d/networking restart
  • reboot, kucken ob X org server geht
  • Feststellung mit top: unattended-upgr braucht 100% CPU-Leistung
# top 
  • unattendet upgrade deaktivieren: Dazu die Datei /etc/apt/apt.conf.d/20auto-upgrades so aendern:
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

alternativ 20auto-upgrades downloaden

  • kodi installieren
apt-get update
apt-get install kodi kodi-pvr-iptvsimple
  • kodi starten, es erscheint dieser Fehler
/usr/lib/arm-linux-gnueabihf/kodi/kodi-xrandr: failed to get size of gamma for output default
terminate called after throwing an instance of std::logic_error
what(): basic_string::__M_construct null not valid
Aborted
  • System von Hand hart aktualisieren, es wird eine neuerer X-Server verwendet, dieser Fehler ist dann verschwunden
# apt-get update
# apt-get upgrade
329 packets
  • in Kodi: Soundkarten output auf hdmi stellen System > Settings > Audio Output Device: sunxi-sndhdmi
  • simple PVR client enablen & configuren mit irgendeiner URL bei addons > my addons
  • System > Settings > TV > General> Enabled (x)
  • Add-On: PVR IPTV Simple Client [Enable]

Bug1: internes Wifi crashed

  • direkt beim Booten crashed das interne Wifi-Kernel-Modul, race condition?
  • dadurch umgehen, indem man das Modul blacklistet:
vi /etc/modprobe.d/blacklist.conf

[...]
blacklist ap6211
[...]

alternativ blacklist.conf downloaden

  • danach neu starten
# reboot
  • jetzt kann man das Modul von Hand laden
# modprobe ap6211
  • und es funktioniert auch
# dmesg
[...]
[  135.443706] [ap6211] Firmware up: op_mode=0x0001, Broadcom Dongle Host Driver mac=98:3b:16:e9:6c:36
[  135.461025] [ap6211] Firmware version = wl0: Mar 10 2014 14:59:50 version 5.90.195.89.18 FWID 01-b13c09c7
[  135.464100] [ap6211] Chip: a962 Rev 1 Pkg 9

# ifconfig
[...]
wlan0     Link encap:Ethernet  HWaddr 00:90:4c:11:22:33
[...]
  • um diesen Vorgang permanent zu machen, in /etc/rc.local dies hinzuf├╝gen:
[...]
# By default this script does nothing.

sleep 5; modprobe ap6211

exit 0

alternativ rc.local downloaden. Achtung - diese Version von rc.local enth├Ąlt das auskommentiert, weil ich hier einen Bananapi ohne Pro verwende, der keine interne WiFi-Karte hat. Ich habe es aber mit einem getestet. Deshalb ist das hier auskommentiert, genauso wie das mit dem Gateway, das ich jetzt wohl doch nicht mehr gebraucht habe. Daf├╝r ist das mit dem lircd drin, das wird sp├Ąter besprochen. Einfach Datei ansehen und denken!

  • Achtung! die beim Pro vorhandene interne Wifi-Karte ist so langsam, dass es f├╝r ein Streaming eh nicht reicht. Deshalb sollte man es beim blacklisten belassen, und ein USB-Wifi-Modul verwenden. Dies ist hier nur der Vollst├Ąndigkeit halber erw├Ąhnt.

Bug2: Wifi-USB geht nicht

  • Es wird ein Wifi-USB-Stick verwendet mit dem empfohlenen Chipsatz 2580
  • folgender Fehler erscheint:
[...]
[  944.529335] usbcore: registered new interface driver rt2800usb
[ 1005.163497] phy3 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
[...]
  • alle Firmwares aus git clonen, die wichtige richtige umkopieren:
# git clone https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
# cp rt2870.bin /lib/firmware/

alternativ rt2870.bin downloaden

  • Jetzt die Events watchen, dazu folgendes eingeben und schauen, was beim Aus-/Wiedereinstecken des USB-Sticks passiert:
# udevadm monitor --property
  • Es fehlt irgendein Skript oder irgendetwas klappt nicht. Deshalb das Skript per wget laden und umkopieren:
wget https://raw.githubusercontent.com/msekletar/udev/master/extras/firmware/firmware.sh
cp firmware.sh /lib/udev
chmod 755 /lib/udev/firmware.sh

alternativ firmware.sh downloaden

  • Jetzt stellt man fest, dass es immer noch nicht geht, mann muss eine udev-Regel editieren: /lib/udev/rules.d/50-firmware.rules
# stub for immediately telling the kernel that userspace firmware loading
# failed; necessary to avoid long timeouts with CONFIG_FW_LOADER_USER_HELPER=y
#SUBSYSTEM=="firmware", ACTION=="add", ATTR{loading}="-1"
SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh --firmware=$env{FIRMWARE} --devpath=$env{DEVPATH}"

alternativ 50-firmware.rules downloaden

  • mit
# reboot

neu starten, huch, es geht jetzt:

# ifconfig
[...]

wlx7cdd901d63cb Link encap:Ethernet  HWaddr 7c:dd:90:1d:63:cb  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

[...]

# dmesg:
[...]

[  173.237800] Registered led device: rt2800usb-phy1::radio
[  173.242351] Registered led device: rt2800usb-phy1::assoc
[  173.251511] Registered led device: rt2800usb-phy1::quality
[  212.394061] ADDRCONF(NETDEV_UP): wlx7cdd901d63cb: link is not ready
[  306.550771] wlx7cdd901d63cb: authenticate with 80:2a:a8:d7:d1:fe
[  306.603112] wlx7cdd901d63cb: send auth to 80:2a:a8:d7:d1:fe (try 1/3)
[  306.609799] wlx7cdd901d63cb: authenticated
[  306.647584] wlx7cdd901d63cb: associate with 80:2a:a8:d7:d1:fe (try 1/3)
[  306.667489] wlx7cdd901d63cb: RX AssocResp from 80:2a:a8:d7:d1:fe
(capab=0x431 status=0 aid=1)
[  306.716286] ADDRCONF(NETDEV_CHANGE): wlx7cdd901d63cb: link becomes ready
[  306.719199] wlx7cdd901d63cb: associated
[  317.426175] wlx7cdd901d63cb: no IPv6 routers present

Bug3: Network-Manager ist kacke

  • Jetzt die Entscheidung: Network-Manager verwenden, WLAN bequem ausw├Ąhlen:
# nmtui-conect
                +------------------------------------------------+              
                |                                                |              
                | +-------------------------------+              |              
                | | Wired                         | <Deactivate> |              
                | | * Wired connection 1        ? |              |              
                | |   eth0                      ? |              |              
                | |                               |              |              
                | | Wi-Fi                       ? |              |              
                | | * qayxsw              **    ? |              |              
                | |   FRITZ!Box 7312      *     ? |              |              
                | |   Telekom_FON         *     ? |              |              
                | |   Vodafone Hotspot    *     ? |              |              
                | |                             ? |              |              
                | |                               | <Quit>       |  
                | +-------------------------------+              |              
                |                                                |              
                +------------------------------------------------+
  • schauen, ob das dann geht, mit ifconfig und ping:
root@bananapipro:~# ifconfig
[...]
wlx000f55a60a77 Link encap:Ethernet  HWaddr 00:0f:55:a6:0a:77  
          inet addr:10.1.1.136  Bcast:10.1.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20f:55ff:fea6:a77/64 Scope:Link
[...]
  • weitere Befehle f├╝r den Network-Manager, nur der Vollst├Ąndigkeit halber:
# nmtui-connect SSID

# nmcli con show

# nmcli con mod "Wired connection 1"
  ipv4.addresses "HOST_IP_ADDRESS"
  ipv4.gateway "IP_GATEWAY"
  ipv4.dns "DNS_SERVER(S)"
  ipv4.dns-search "DOMAIN_NAME"
  ipv4.method "manual"
  • Problem: bei mir gab es mit dem installierten network-manager tearing unter kodi. Es wird irgendwie alles, vermutlich durch st├Ąndige Hintergrund-Prozesse, verlangsamt, so dass man nicht wirklich fernsehschauen kann.

  • deshalb Network-Manager entfernen,

# apt-get remove network-manager network-manager-gnome

und das Netzwerk und Wifi von Hand konfigurieren:

Datei: /etc/wpa_supplicant/wpa_supplicant.conf

network={
    ssid="qayxsw"
    psk="asdf1234"
}

Datei: /etc/network/interfaces

# Wired adapter #1
#auto eth0
allow-hotplug eth0
no-auto-down eth0
iface eth0 inet dhcp
metric 10

auto wlx000f55a60a77
allow-hotplug wlx000f55a60a77
iface wlx000f55a60a77 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
metric 20

alternativ wpa_supplicant.conf downloaden alternativ interfaces downloaden

  • nach dem Reboot spinnt das Gateway immer noch, trotz die IP per DHCP gezogen werden konnte. Ich habe keine Ahnung, deshalb hart dieser Eintrag in /etc/rc.local
#!/bin/sh -e
#
# rc.local
#

/sbin/route add default gw 10.1.1.1

Update: habe ich jetzt nicht mehr gebraucht, der Fehler ist nicht mehr aufgetreten. Erw├Ąhnung nur der Vollst├Ąndigkeit halber!

Booten, Netzwerk ├╝ber Wifi, starten von Kodi sollte nun gehen. Dann weiter. Sonst nochmals nachdenken und ├╝berarbeiten
  • Infrarot in Betrieb nehmen

# apt-get install lirc lirc-x xinput evtest
  • fuer xte
apt-get install xautomation
  • testen: evtest aufrufen, auf der auf NEC-Protokoll, z. B. LG Ger├Ąte verwenden das, gestellten Infrarot-Fernbedienung von Schwaiger einige Tasten dr├╝cken
  • Ich verwende die Schwaiger UFB4801
  • mein Grundig-Fernseher geht dort mit Code 6202, f├╝r Kodi habe ich dort den LG Sat Receiver 4247 programmiert, auf DVD den LG DVD Player 6922
  • auf die Tasten des DVD Players habe ich irexec Funktionen gemappet, so dass man den Mauszeiger steuern kann. So kann man auch ohne angesteckte Maus im Notfall was tun.
root@bananapipro:/home/chrissie# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	axp20-supplyer
/dev/input/event1:	sunxi-ir
Select the device event number [0-1]
1

[...]
Testing ... (interrupt to exit)
Event: time 1526827956.852202, type 1 (EV_KEY), code 1 (KEY_ESC), value 1
Event: time 1526827956.852221, -------------- SYN_REPORT ------------

CTRL-C quits
---

Bug: es bleibt einem lirc leider nicht erspart

  • grunds├Ątzlich w├╝rde es ja gehen, hei├čt das. Es werden Tasten gesendet. Leider kann man dieses EV_KEY so nicht mit Kodi verwenden. Wenn jemand dazu was einf├Ąllt, kann er mir das mitteilen
  • deshalb das disablen
# xinput disable sunxi-ir
  • Devices checken:
# cat /proc/bus/input/devices
[...]
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi-ir"
P: Phys=RemoteIR/input1
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=sysrq rfkill kbd event1 
B: PROP=0
B: EV=100003
B: KEY=ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe
[...]
  • udev rules anpassen
root@bananapipro:/etc/udev/rules.d# cat 10-local.rules 
KERNEL=="event*",ATTRS{phys}=="RemoteIR/input1",SYMLINK+="input/ir"

alternativ 10-local.rules downloaden

  • udev-Regel sofort aktivieren
# udevadm trigger
  • ir muss jetzt als udev-device erscheinen:
root@bananapipro:/etc/udev/rules.d# ls /dev/input/
by-id  by-path  event0  event1  event2  event3  ir  mice  mouse0
  • Namespaces checken
irrecord -l 
  • Wenn jetzt alles plausibel ist, k├Ânnen die Fernbedienungs-Tasten mit irrecord aufgezeichnet werden. Dazu irrecord starten, und sinvolle Tasten der Reihe nach dr├╝cken: Welche das sind, damit ist man weitgehend frei, es empfiehlt sich aber irgendwelche in der licrd-Community verankerten Standards zu folgen.
# irrecord -H devinput -d /dev/input/ir my_config.cfg

[...]

Hold down an arbitrary button.
................................................................................
Found gap length: 39973
Now enter the names for the buttons.

Please enter the name for the next button (press <ENTER> to finish recording)
KEY_1

Now hold down button "KEY_1"

[...]
  • Es wird eine vcr.cfg erstellt, hier muss man Dinge l├Âschen:
begin remote

  name  vcr.cfg
  bits           56
  eps            30
  aeps          100

  one             0     0
  zero            0     0
  pre_data_bits   8
  pre_data       0x0
  gap          39973
  toggle_bit_mask 0x0

      begin codes
          KEY_1                    0x01000100000001 0x000000BEDCE405
          KEY_2                    0x01000200000001 0x000000BEDCE405
          KEY_3                    0x01000300000001 0x000000BEDCE405
          KEY_4                    0x01000400000001 0x000000BEDCE405
          KEY_5                    0x01000500000001 0x000000BEDCE405

-----------------------------------------------------^^ delete second hex codes in each line!
[...]
  • diese Datei umkopieren nach: /etc/lirc/lircd.conf

alternativ lircd.conf downloaden

  • evtl Datei /etc/lirc/hardware.conf
# /etc/lirc/hardware.conf
#
DRIVER="devinput"
DEVICE="/dev/input/ir"

#Chosen Remote Control
REMOTE="None"
REMOTE_MODULES=""
REMOTE_DRIVER="devinput"
REMOTE_DEVICE="/dev/input/ir"
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS=""

#Chosen IR Transmitter
TRANSMITTER="None"
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""

[...]

alternativ hardware.conf downloaden

Bug: falsche Pfade im lirc Paket

  • weiss der Maintainer, wird in Zukunft behoben
  • nach jedem Booten muss dieses Directory angelegt werden:
# mkdir -p /var/run/lirc
  • lircd testen via irw: einfach tasten auf der Fernbedienung dr├╝cken
# lircd --nodaemon -H devinput -d /dev/input/event3 &
[1] 6066
 lircd-0.9.0[6066]: lircd(devinput) ready, using /var/run/lirc/lircd

# irw
lircd-0.9.0[6066]: accepted new client on /var/run/lirc/lircd
lircd-0.9.0[6066]: initializing '/dev/input/event3'
0001001200000001 00 KEY_OK lircd.conf
0001001200000001 00 KEY_OK lircd.conf
0001001200000001 01 KEY_OK lircd.conf
0001001200000001 02 KEY_OK lircd.conf
0001001200000001 00 KEY_OK lircd.conf
0001000100000001 00 KEY_1 lircd.conf
0001000100000001 00 KEY_1 lircd.conf
[...]
  • dauerhaftes enablen:
# systemctl enable lirc
  • folgende Eintr├Ąge in /etc/rc.local, um den Pfad anzulegen und trotz systemctl lircd richtig zu starten
mkdir -p /var/run/lirc/
/usr/sbin/lircd -H devinput -d /dev/input/ir
  • jetzt irxevent und irexec testen: als normaler User als daemon starten, und irgendwas auf der Fernbedienung drcken, es muss irgenwas passieren.
irxevent -d
irexec -d
  • folgende Dateien verwenden
lircd.conf -> /etc/lircd.conf
lircrc -> /home/chrissie/.lircrc

alternativ lircrc downloaden

  • autostart dateien & kodi tv key list f├╝r lircd sowie playlist installieren:

So startet kodi automatisch, wenn der Banana Pi hochf├Ąhrt.

Hinweis: in der Playlist settings.xml, die ihr hier laden k├Ânnt, sind nat├╝rlich Fantasie-Eintr├Ąge

  • gen.xml kann man innerhalb von Kodi aufzeichnen. So kann man Tasten von der Fernbedienung, die ├╝ber lircd kommen, auf Kodi Funktionen ummappen.
/home/chrissie/start-kodi.sh
/home/chrissie/.config/autostart/start_kodi.desktop
/home/chrissie/.kodi/userdata/keymaps/gen.xml
/home/chrissie/.kodi/userdata/addon_data/pvr.iptvsimple/settings.xml

hier start-kodi.sh downloaden

hier start_kodi.desktop downloaden

hier gen.xml downloaden

hier settings.xml downloaden

  • dies so tun: umkopieren via scp vom Linux-PC aus, geht nat├╝rlich auch anders, das kann man auch mit den anderen config-dateien tun, sie auch als root auf das Ger├Ąt kopieren
scp start-kodi.sh chrissie@10.1.1.130:
scp start_kodi.desktop chrissie@10.1.1.130:~/.config/autostart/
scp settings.xml chrissie@10.1.1.130:~/.kodi/userdata/addon_data/pvr.iptvsimple/
scp gen.xml chrissie@10.1.1.130:~/.kodi/userdata/keymaps/
  • start-kodi.sh muss executable sein:
$ chmod 755 start-kodi.sh
  • Fertig - der Lohn der M├╝hen

Artikel erstellt am: 01 February 2018 , aktualisiert am 01 March 2019