Thecus n5200 Debian: Difference between revisions
(→lspci) |
m (→Thecus Kernel Patch: thecus-io.patch ins Wiki hochgeladen, bevor sonne.alt-f4.ch abgestellt wird) |
||
(54 intermediate revisions by 2 users not shown) | |||
Line 20: | Line 20: | ||
01:02.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) |
01:03.0 USB Controller: NetChip Technology, Inc Unknown device 2282 (rev 11) |
||
</pre> |
|||
== cpuinfo == |
|||
=== N5200 === |
|||
<pre> |
|||
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 |
|||
</pre> |
|||
=== N5200 PRO === |
|||
<pre> |
|||
processor : 0 |
|||
vendor_id : GenuineIntel |
|||
cpu family : 6 |
|||
model : 13 |
|||
model name : Intel(R) Celeron(R) M processor 1.50GHz |
|||
stepping : 8 |
|||
cpu MHz : 1497.670 |
|||
cache size : 1024 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 pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx |
|||
bogomips : 2998.63 |
|||
</pre> |
</pre> |
||
Line 26: | Line 71: | ||
== ttyS1 == |
== ttyS1 == |
||
Verbunden mit dem Display |
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 = |
= 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. |
|||
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 [http://onbeat.dk/thecus/index.php/N5200_Module_List 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. |
mit dem sercon modul von [http://onbeat.dk/thecus/index.php/N5200_Module_List 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. |
||
Line 48: | Line 120: | ||
kernel (hd0,2)/vmlinuz-2.6.18-3-686 root=/dev/sda1 console=tty1 console=ttyS0,115200n8 |
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 |
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 |
title Normal |
||
Line 70: | Line 147: | ||
</pre> |
</pre> |
||
In /boot ist kein platz mehr frei für weitere Kernel und die debian initrd,[1] 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. |
|||
[1] Die N5200 PRO Editon hat eine 128MB grosse Flashdisk, es sind jedoch nur 64MB vorparitioniert. |
|||
<pre> |
|||
Disk /dev/hda: 128 MB, 128188416 bytes |
|||
4 heads, 32 sectors/track, 1956 cylinders |
|||
Units = cylinders of 128 * 512 = 65536 bytes |
|||
Disk identifier: 0x00000000 |
|||
Device Boot Start End Blocks Id System |
|||
/dev/hda1 * 1 32 2032 83 Linux |
|||
/dev/hda2 33 216 11776 83 Linux |
|||
/dev/hda3 217 705 31296 83 Linux |
|||
/dev/hda4 706 978 17472 5 Extended |
|||
/dev/hda5 706 859 9840 83 Linux |
|||
/dev/hda6 860 978 7600 83 Linux |
|||
</pre> |
|||
Man kann die Extended Partition loeschen und neu erstellen mit der gesamten rest groesse. |
|||
Danach muessen die beiden logischen Partitionen wieder eingetragen werden mit den exakt denselben start/end zylinder. |
|||
Danach laesst sich eine zusaetzliche 64MB grosse partition erstellen welche fuer /boot unter Debian verwendet werden kann. Die Partition ist dann in menu.lst mit hd(0,6) einzutragen. |
|||
<pre> |
|||
Disk /dev/hda: 128 MB, 128188416 bytes |
|||
4 heads, 32 sectors/track, 1956 cylinders |
|||
Units = cylinders of 128 * 512 = 65536 bytes |
|||
Disk identifier: 0x00000000 |
|||
Device Boot Start End Blocks Id System |
|||
/dev/hda1 * 1 32 2032 83 Linux |
|||
/dev/hda2 33 216 11776 83 Linux |
|||
/dev/hda3 217 705 31296 83 Linux |
|||
/dev/hda4 706 1956 80064 5 Extended |
|||
/dev/hda5 706 859 9840 83 Linux |
|||
/dev/hda6 860 978 7600 83 Linux |
|||
/dev/hda7 979 1956 62576 83 Linux |
|||
</pre> |
|||
Das hda7 device file in /dev muss manuell erstellt werden, danach kann man die partition formatieren: |
|||
<pre> |
|||
root@127.0.0.1:/dev# mknod hda7 b 3 7 |
|||
root@127.0.0.1:/dev# mke2fs /dev/hda7 |
|||
</pre> |
|||
= Hardware Support = |
|||
Die hier genannten Tools kommen aus der Originalfirmware, jeder muss die dort aus rechtlichen gründen selber rausholen. |
|||
== Thecus Kernel Patch == |
|||
[[:File:Thecus-io.patch|Hier]] 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 === |
|||
<pre> |
|||
#!/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 |
|||
</pre> |
|||
== 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: |
|||
=== SETLOGO === |
|||
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. |
|||
<pre> |
|||
#!/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 |
|||
</pre> |
|||
=== setbo.pl === |
|||
Das Script geht so leider nicht, ich gehe davon aus dass der serielle Port mit den falschen Parametern initialisiert wird. |
|||
<pre> |
|||
#!/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"); |
|||
</pre> |
|||
=== 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 |
|||
<pre> |
|||
#!/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 |
|||
</pre> |
|||
== 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 |
|||
[[Category:Hardware]] |
Latest revision as of 00:07, 21 March 2021
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
N5200
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
N5200 PRO
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : Intel(R) Celeron(R) M processor 1.50GHz stepping : 8 cpu MHz : 1497.670 cache size : 1024 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 pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe nx bogomips : 2998.63
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.
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,[1] 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.
[1] Die N5200 PRO Editon hat eine 128MB grosse Flashdisk, es sind jedoch nur 64MB vorparitioniert.
Disk /dev/hda: 128 MB, 128188416 bytes 4 heads, 32 sectors/track, 1956 cylinders Units = cylinders of 128 * 512 = 65536 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/hda1 * 1 32 2032 83 Linux /dev/hda2 33 216 11776 83 Linux /dev/hda3 217 705 31296 83 Linux /dev/hda4 706 978 17472 5 Extended /dev/hda5 706 859 9840 83 Linux /dev/hda6 860 978 7600 83 Linux
Man kann die Extended Partition loeschen und neu erstellen mit der gesamten rest groesse. Danach muessen die beiden logischen Partitionen wieder eingetragen werden mit den exakt denselben start/end zylinder.
Danach laesst sich eine zusaetzliche 64MB grosse partition erstellen welche fuer /boot unter Debian verwendet werden kann. Die Partition ist dann in menu.lst mit hd(0,6) einzutragen.
Disk /dev/hda: 128 MB, 128188416 bytes 4 heads, 32 sectors/track, 1956 cylinders Units = cylinders of 128 * 512 = 65536 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/hda1 * 1 32 2032 83 Linux /dev/hda2 33 216 11776 83 Linux /dev/hda3 217 705 31296 83 Linux /dev/hda4 706 1956 80064 5 Extended /dev/hda5 706 859 9840 83 Linux /dev/hda6 860 978 7600 83 Linux /dev/hda7 979 1956 62576 83 Linux
Das hda7 device file in /dev muss manuell erstellt werden, danach kann man die partition formatieren:
root@127.0.0.1:/dev# mknod hda7 b 3 7 root@127.0.0.1:/dev# mke2fs /dev/hda7
Hardware Support
Die hier genannten Tools kommen aus der Originalfirmware, jeder muss die dort aus rechtlichen gründen selber rausholen.
Thecus Kernel Patch
Hier 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:
SETLOGO
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