Freenerding: einen gebrickten Turris Omnia opensource Router fixen

in #deutsch2 years ago

Heute hatte ich die ehrenvolle Aufgabe, einen gebrickten Turris Omnia zu reparieren. Der Kunde hatte ihn mit Paketupdates geschossen, es ging nichts mehr, auch die eigentlich totsicheren Factory Reset und Recovery von USB Funktionen waren ohne Effekt.
Also schraubt man das Ding auf, um an die serielle Konsole des Geräts zu kommen.

Da ich gerade keinen TTL Adapter, aber natürlich immer einen Raspberry pi zur Hand hatte, nahm ich einfach den. Das sieht dann so aus.

image.png

Das Pi darf natürlich in raspi-config kein getty auf der seriellen Konsole aktiviert und muss hardware serial aktiviert haben.

Mittels screen kommt man auf den Router
screen /dev/ttyS0 115200

Dann kann man über den erfreulicherweise noch intakten Bootloader und einen tftp Server auf dem pi mit dem aktuellsten Image das TurrisOS neu flashen.

Die konkrete Fehlermeldung war

U-Boot 2019.07 (Sep 25 2019 - 14:41:57 +0000), Build: jenkins-turris-os-packages-kittens-omnia-876
SoC: MV88F6820-A0 at 1600 MHz
DRAM: 2 GiB (800 MHz, 32-bit, 2T, ECC not enabled)
Disabling MCU watchdog... disabled
WDT: Started with servicing (60s timeout)
MMC: mv_sdh: 0
Loading Environment from SPI Flash... SF: Detected mx25l6405d with page size 256 Bytes, erase size 4 KiB, total 8 MiB
OK
Model: Turris Omnia
Turris Omnia:
RAM size: 2048 MiB
Serial Number: 0000000decafbad
Regdomain set to **
RESET button was pressed, overwriting bootcmd!
Net: eth0: ethernet@70000, eth1: ethernet@30000, eth2: ethernet@34000
Hit any key to stop autoboot: 0
Setting bus to 2
SF: Detected mx25l6405d with page size 256 Bytes, erase size 4 KiB, total 8 MiB
device 0 offset 0x100000, size 0x700000
SF: 7340032 bytes @ 0x100000 Read: OK
gpio: pin gpio@71_4 (gpio 4) value is 1
Wrong Image Format for bootm command
ERROR: can't get kernel image!

Die Prozedur zur Reparatur

  1. auf dem Pi, das rescue Image herunterladen und doppelt auspacken, um die Datei image.fit.lzma zu bekommen
    wget https://repo.turris.cz/hbs/omnia/packages/turrispackages/rescue-image_3.6.1-1_arm_cortex-a9_vfpv3-d16.ipk
    tar xvfz rescue-image_3.6.1-1_arm_cortex-a9_vfpv3-d16.ipk
    tar xvfz data.tar.gz
  2. eine tftp Serverumgebung auf dem pi einrichten
apt-get install xinetd tftpd tftp
echo "service tftp
{
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = /tftpboot
disable         = no
}" >> /etc/xinetd.d/tftp

mkdir /tftpboot
chmod -R 777 /tftpboot
chown -R nobody /tftpboot          
/etc/init.d/xinetd start
  1. Image bereitstellen
    cp usr/share/rescue-image/image.fit.lzma /tftpboot/

  2. auf dem turris im uboot diese Befehle eingeben
    setenv autoload no
    dhcp
    tftpboot ${kernel_addr_r} image.fit.lzma
    sf probe
    sf update ${kernel_addr_r} 0x00100000 ${filesize}
    reset

Nachdem das rescue-System nun wieder bootet, flasht man per USB Stick das aktuellste release via der 4-LED Methode.
image.png
Der Router ist wieder einsatzbereit, öffnet auf serial eine root-shell, verteilt auf LAN0 192.168.1.0/24 IPs und wartet auf Erstkonfiguration per Browser.

BusyBox v1.30.1 () built-in shell (ash)

      ______                _         ____  _____
     /_  __/_  ____________(_)____   / __ \/ ___/
      / / / / / / ___/ ___/ / ___/  / / / /\__
     / / / /_/ / /  / /  / (__  )  / /_/ /___/ /
    /_/  \__,_/_/  /_/  /_/____/   \____//____/

 -----------------------------------------------------
 TurrisOS 5.3.0, Turris Omnia
 -----------------------------------------------------
root@turris:/#

Nun, wo der Router wieder geht, bin ich ein klein wenig traurig, dass ich ihn dem Kunden zurückgeben muss. Das Vieh würde ich gern behalten, ich mag freie Hardware+Software und Leistung scheint das Ding zu haben.

bis zum nächsten Freenerding...

Sort:  

Congratulations @schlafhacking! You received a personal badge!

HiveFest VI Attendeee

You can view your badges on your board and compare yourself to others in the Ranking

Check out the last post from @hivebuzz:

HiveFest⁶ Meetings Contest