Thecus n5200 Debian

From chaoswiki
Revision as of 10:22, 19 December 2007 by Obri (talk | contribs) (→‎analyse OOBM)
Jump to navigation Jump to search

Hardwareinfos

lspci

00:00.0 Host bridge: Intel Corporation Unknown device 358c (rev 02)
00:00.1 System peripheral: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)
00:00.3 System peripheral: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)
00:02.0 VGA compatible controller: Intel Corporation Unknown device 358e (rev 02)
00:02.1 Display controller: Intel Corporation Unknown device 358e (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03)
00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 03)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 03)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 83)
00:1f.0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 03)
00:1f.1 IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 03)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03)
01:00.0 SCSI storage controller: Marvell Technology Group Ltd. MV88SX6081 8-port SATA II PCI-X Controller (rev 09)
01:01.0 Ethernet controller: Intel Corporation 82541GI/PI Gigabit Ethernet Controller (rev 05)
01:02.0 Ethernet controller: Intel Corporation 82541GI/PI Gigabit Ethernet Controller (rev 05)
01:03.0 USB Controller: NetChip Technology, Inc Unknown device 2282 (rev 11)

cpuinfo

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 9
model name      : Intel(R) Celeron(R) M processor          600MHz
stepping        : 5
cpu MHz         : 600.000
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 tm pbe up
bogomips        : 1199.08

ttyS0

Verbunden mit dem Seriellen Stecker

ttyS1

Verbunden mit dem LCD Display

Durch Thecus gepatchte Software

Grub

Der Grub wurde um einige Funktionen erweitert, unter anderem kann er Ausgaben auf dem LCD Display machen und warscheinlich verwaltet er irgendwelche Cryptokeys


Zusätzliche Funktionen:

  • avrport <COM port>

Setting a serial port for communicating with an avr.

  • setbto <boot_duration in sec>

Send out Linux kernel booting duration in second packet to AVR_uP. The AVR will monitor on the kernel booting timeout event.

  • setlogo [Logo String, space allowed]

Send <setlogo> packet to the avr_uP. This logo string will be displayed on lcd panel. If there is no logo string pecified in argument, the default logo is N5200 Thecus.

  • getkey

Retrieve key for decryption from the avr_uP. The key will be appended into kernel command line automatically, once the 'kernel' command executes.

Kernel

Der Ext2 treiber in dem Thecus Kernel wurde warscheinlich um eien "Verschlüsselung" erweitert. der Key dazu kommt vom gepatchten Grub</spekulation>

OS Installation

Backup

Vor der Installation sollte ein Backup der Daten auf /dev/hda angelegt werden, auf der Partition befinden sich verschiedene praktische Tools für das LCD e.t.c.

cd / && tar -cvz --exclude=proc/* --exclude=sys/* | ssh -l user host "cat > thecus-root.tgz"

und für notfälle kann auch noch ein Image des Flash IDE Laufwerks erstellt werden

dd if=/dev/hda | ssh -l user host "cat > thecus-root.img"

Debian install

mit dem sercon modul von thecus wiki die serielle Console freischalten, auf der Partition /dev/hda1 befindet sich der Grub, man sollte sich nicht vom in dem /boot auf der firmware vorhandenen lilo verwirren lassen.

die menu.lst in /mnt/boot/grub/ wie folgt anpassen:

#boot=/dev/hda
default=0
timeout=10
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
#serial --unit=1
terminal --timeout=3 serial console
#password --md5 $1$E.mPD1$GCz4omwJYBUhV8.Z8TyJE1
#password ThecusN5200x86in2006
fallback 1

title   Debian Linux
        root(hd0,2)
        kernel (hd0,2)/vmlinuz-2.6.18-3-686 root=/dev/sda1 console=tty1 console=ttyS0,115200n8
        initrd (hd0,2)/initrd.img-2.6.18-3-686

title   Debian Install
        root(hd0,2)
        kernel (hd0,2)/linux root=/dev/sda1 console=tty1 console=ttyS0,115200n8
        initrd (hd0,2)/initrd.gz

title Normal
#        kernel /boot/bzv0428 ro root=/dev/ram0 ramdisk=32768 console=tty1 console=ttyS0,115200n8
        root(hd0,1)
#        kernel (hd0,0)/bz5200v1 ro root=/dev/ram0 ramdisk=32768 irqpoll acpi=noirq pci=noacpi
#        getkey
        setlogo Thecus N5200
        setbto 200
#        kernel (hd0,1)/bz5200v1 ro root=/dev/ram0 ramdisk=131072 console=tty1 console=ttyS0,115200n8
        kernel (hd0,1)/bz5200v1 ro root=/dev/ram0  ramdisk=40960 console=tty1 console=ttyS0,115200n8
        initrd (hd0,1)/n5200fs.gz

title Factory
#        kernel /boot/bzv0428_old ro root=/dev/ram0 ramdisk=32768 console=tty1 console=ttyS0,115200n8
        root(hd0,5)
        getkey
        setlogo Fallback to Factory
        setbto 200
        kernel (hd0,5)/bz5200mv1 ro root=/dev/ram0 ramdisk=131072
        initrd (hd0,5)/minifs.gz

In /boot ist kein platz mehr frei für weitere Kernel und die debian initrd, die dateien kann man auf /dev/hda3 ablegen, diese Partition ist im normalfall in /cloopfs gemountet, leider sind die S-ATA Disks nicht über das Bios ansprechbar, booten geht nur über die interne Flashdisk. Für die Debian installation kopiert man am besten die den kernel linux und die initrd.gz aus dem debian-netinstall Archiv. Bei der Debian Installation sollte der Grub _nicht_ auf /dev/hda installiert werden, am besten installiert man ihn auf einer s-ata disk und kopiert den Kernel und die Initrd anschliessend auf /dev/hda3, die Namen sollten natürlich zu den Einträgen in der menu.lst passen.

Hardware Support

Die hier genannten Tools kommen aus der Originalfirmware, jeder muss die dort aus rechtlichen gründen selber rausholen.

Thecus Kernel Patch

Auf http://sonne.alt-f4.ch/~daniel/thecus-io.patch befindet sich ein Kernelpatch mit dem sich diverse Hardwareerweiterungen der Thecus Geräte ansteuern lassen, Der Patch wurde mit 2.6.18 und .19.2 getestet.

Der Patch stellt im Proc Verzeichnis zwei Dateien zur verfügung:

/proc/thecus_io
/proc/thecus_event

/proc/thecus_event

Über dieses File kann man feststellen wenn jemand den Stromschalter drückt, weitere Funktionen hat das File ohne einen zusätzlichen Kernelpatch nicht.

# cat /proc/thecus_event
button/power PWRF 0 0
#

/proc/thecus_io

In dem File stehen einige interessante Informationen:

# cat /proc/thecus_io
Copy button: OFF
Copy LED: OFF
Fail LED: OFF
Busy LED: OFF
Reset INT: High
Reset 51: High
GPIO_25: High
GPIO_27: High
GPIO_33: High
GPIO_34: High
GPIO_39: High
GPIO_40: High
GPIO_41: High
GPIO_42: High
GPIO_43: High
GPIO_44: Low
Switch board: No
FAN 1 RPM: 0
FAN 2 RPM: 2694

über die Datei können auch Hardwareerweiterungen des N5200 gesteuert werden

uP Reset

Der Microcontroller für das LCD Display wird neu gebootet:

echo "uP_reset 0" > /proc/thecus_io
sleep 1
echo "uP_reset 1" > /proc/thecus_io

Power off

Dem Gerät den Strom abstellen:

echo "PWR_OFF 5200" > /proc/thecus_io

Busy LED

ein:

echo "Busy 1" > /proc/thecus_io

aus

echo "Busy 0" > /proc/thecus_io

Programme aus der Originalsoftware setzen Busy teilweise auf 2, mir fällt kein Unterschied auf.

Copy LED

ein:

echo "Copy 1" > /proc/thecus_io

aus:

echo "Copy 0" > /proc/thecus_io

Fail LED

ein:

echo "Fail 1" > /proc/thecus_io

aus

echo "Fail 0" > /proc/thecus_io

Weitere

Die folgenden Befehle produzieren hier Fehlermeldungen, sie werden aber in der Originalsoftware benutzt:

echo "Buzzer 1" > /proc/thecus_io
echo "S_LED 2" >/proc/thecus_io

Shutdown über thecus_event

#!/bin/sh

if [ -f /proc/thecus_event ];then
        while [ true ]
        do
            btnPOWER=`cat /proc/thecus_event`
            if [ "${btnPOWER}" = "button/power PWRF 0 0" ];then
                echo "power OFF ..."
                (while true
                do
                echo "Busy 1" > /proc/thecus_io
                sleep 1
                echo "Busy 0" > /proc/thecus_io
                sleep 1
                done) &
                echo "Shutdown: now" > /tmp/warnmsg
                sleep 10
                poweroff
            fi
        done
fi


LCD Display

uartpkt2

Tool zum anzeigen von statischen? Informationen auf dem LCD, leider kein frei definierbarer text, das Tool kann auch das Display initialisieren.

unterstützte Befehle:

Speichert das "logo" Thecus N5200 in dem LCD Display und zeigt es an

Der Befehl

\2\1\0\16\21Thecus N5200\0\3

wird an das LCD Display geschickt, man kann den Text austauschen, die länge muss aber stinmmen.

SETKEY

Zweck unbekannt, schreibt

\2\1\0\t\0221234567\0\3

auf das LCD, für was der Key benutzt wird, ist mir nicht bekannt.

GETKEY

Zweck unbekannt, schreibt

\2\1\0\1\20\3

auf das LCD

SETBTO

Zeigt für einige sekunden

Thecus N5200
Booting... 

auf dem display an, danach wechselt das Display wieder auf Self Testing... Der Befehl der diese Anzeige auslöst:

\2\1\0\2\23\17\3

HEARTBT

Der an das LCD geschickte Befehl:

\2\1\0\1\24\3

Nach dem man diesen Befehl abgeschickt hat, sendet das Display regelmässig Daten an den Rechner, das LCD ist erst nach diesem Befehl ansprechbar.

STARTWD

Der an das LCD geschickte Befehl:

\2\1\0\1\25\3

Es ist nicht bekannt ob diese Watchdogfunktion den Rechner oder das LCD neu starten soll, bis jetzt wurde durch den Watchdog kein Host reset ausgelöst.

GETCFG

?

SETCFG

?

OOBM

Der an das LCD Geschickte Befehl:

\2\1\0 \30mdadm\0\1\0\0\3Disk 3 Rebuilding\0\375\267\1\3

Die meldung wird einige sekunden angezeigt, das \$ZAHL vor dem meldungstext definiert die Art der Meldung:

  • 0 = cmd
  • 1 = Debug
  • 2 = Inform
  • 3 = Notice
  • 4 = Warning
  • 5 = Error
  • 6 = mikrocontroller crash ;-)

Die Zahlen 375\267\1 können ohne auswirkungen beliebig geändert werden

die Meldung darf nicht länger als 17 Zeichen sein, auf das LCD passen 20 Zeichen?!

GETSYSINFO

Zeigt statisch im programm definierte Systeminfos an?!


Eigene Scripts

infotest.sh

Zeigt momentan statische Informationen auf dem Display an, eigentlich sollten die einzelnen infos abwechselnd angezeigt werden, das klappt aber irgendwie nicht.

#!/bin/sh

fillmsg(){
    unset FILL
    unset LENGTH
    LENGTH=`echo $1 | wc -m`
    FILL=`echo $2-$LENGTH | bc`
    for i in `seq 0 $FILL`; do  echo -n " "; done
}


INFO1="Test test"
FILLCHARS1=`fillmsg "$INFO1" 20`

INFO2="LAN1: 10.1.11.20"
FILLCHARS2=`fillmsg "$INFO2" 19`

INFO3="LAN2: 0.0.0.0"
FILLCHARS3=`fillmsg "$INFO3" 20`

INFO4="Linux 2.6.19.2"
FILLCHARS4=`fillmsg "$INFO4" 20`

printf "\2\1\0U\31$INFO1$FILLCHARS1\0$INFO2$FILLCHARS2\0\0$INFO3$FILLCHARS3\000$INFO4$FILLCHARS4\0\3" > /dev/ttyS1

setbo.pl

Das Script geht so leider nicht, ich gehe davon aus dass der serielle Port mit den falschen Parametern initialisiert wird.

#!/usr/bin/perl -w

use Device::SerialPort;

my $file = "/dev/ttyS1";
my $ob = Device::SerialPort->new ($file) || die "Can't open $file: $!";

$ob->baudrate(9600)     || die "fail setting baudrate";
$ob->parity("none")     || die "fail setting parity";
$ob->databits(8)        || die "fail setting databits";
$ob->stopbits(1)        || die "fail setting stopbits";
$ob->handshake("none")  || die "fail setting handshake";
$ob->write_settings     || die "fail write setting";

$ob->write("\2\1\0\2\23\17\3");

foo.pl

Benutzung: ./foo.pl > /dev/ttyS0 zeigt "Disk 2 Rebuilding" auf dem Display an.

#!/usr/bin/perl
print("\2\1\0 \30mdadm\0\1\0\0\3Disk 2 Rebuilding\0\366\267\1\3");

reset51

AVR Microcontroller neu booten

#!/bin/sh

echo "uP reset"
echo "uP_reset 0" > /proc/thecus_io
sleep 1
echo "uP_reset 1" > /proc/thecus_io
sleep 3
uartpkt2  HEARTBT

Befehle

Booting... auf der 2. Zeile

\2\1\0\2\23\17\3

Heartbeat ein

\2\1\0\1\24\3

Watchdog ein

\2\1\0\1\25\3

Thecus N5200 auf der 1. Zeile, Der gesetzte Text wird warscheinlich im Flash gespeichert.

\2\1\0\16\21Thecus N5200\0\3

Zeile 1: Notice Zeile2: Disk 3 rebuilding Nach ein Paar Sekunden wieder das "Logo"

\2\1\0 \30mdadm\0\1\0\0\3Disk 3 Rebuilding\0\372\267\1\3

Zeile 2. ein zufällig ausgewählter Text:

\2\1\0U\31LAN1 : 172.16.66.205\0LAN2 : 172.16.2.254\0\0RAID Status :Healthy\000802.3ad:Load Balance\0\3

analyse OOBM

\2\1\0

  • Prefix für alle Befehle?

\30mdadm

  • muss nicht mdadm sein, muss aber gleich lang sein.

\0\1\0\0

  • ?

\3Disk 3 Rebuilding

  • 0 = cmd
  • 1 = Debug
  • 2 = Inform
  • 3 = Notice
  • 4 = Warning
  • 5 = Error
  • 6 = crash ;-)

\0\372\267\1\3