Thin Client evo T20
Da sich gerade einige von der Liste den Thin Client "evo T20" von Compaq ersteigern, hier ein Artikel der eine sinnvolle Betankung dessen erleichtern soll. Ich möchte alle, die Erkenntnisse gesammelt haben ermuntern, diesen Artikel fröhlich zu erweitern.
Inhaltsverzeichnis
- 1 Betankung mit Original Software
- 2 Erstellung eines Etherbootimages
- 3 Damn Small Linux vom USB Stick booten
- 4 KNOPPIX-Dateisystem erweitern
- 5 Drive-Image mit Filesystem im Flash erstellen (in Bearbeitung)
- 6 Evo Infos
- 7 Weblinks
Betankung mit Original Software
Die Win* Methode
Sorry, ich finde es gehört dazu.
- 1. Image (...Binary Firmware...) und Nexfer von der Compaq Seite ziehen.
- 2. Nexfer nach C:\Nexfer auspacken.
- 3. Das Image in obiges Verzeichnis werfen und in "bootp.bin" umbenennen.
- 4. Die IP Adressen in "bootpmap" und "btptab" anpassen.
- 5. Ein DHCP auf dem Router kann an bleiben weil andere Ports verwendet werden.
- 6. nexfer.exe starten. Wenn es wegen Java nicht läuft: fluchen und die Linux variante nehmen.
- 7. Den evo resetten und 'p' gedrückt halten...
Wenns flaschd, nicht stören!
Nach dem flashen nexfer.exe beenden, damit Windows keine Würmer kriegt.
Nachtrag von li-la: "Evo T20 and T30 Netxfer Tool for Loading Firmware" findet sich inzwischen bei HP:
Unter windows wird eine inzwischen veraltete MS-Java Version genommen. Neuere Sun Java gehen nicht. Bei mir funktionert auf einem frisch installierten Win2000 ohne SP die Nachinstallation von: msjavx86.exe
Meine Version ist: 5.00.3805 Sprache: Englisch (USA) Google hilft die passende Version zu finden, MS selbst bietet das NICHT mehr an. Auf einer meiner alten CDs fand sich meine Version.
Die Linux Methode
Du brauchst einen dhcpd und einen tftp
DHCP
Das Config vom dhcpd sieht so aus:
# dhcpd.conf # ddns-update-style interim; subnet 192.168.0.0 netmask 255.255.255.0 { # Das ist die Nummer vom TFTP Server option routers 192.168.0.22; next-server 192.168.0.22; pool { option domain-name-servers bogus.example.com; max-lease-time 300; range 192.168.0.200 192.168.0.253; allow unknown-clients; filename "bootp.bin"; } }
Es steht in "/etc" oder "/etc/dhcp". Ein anderer IP Kreis ist nicht nötig, weil gesoderte Portnummern benutzt werden.
Wer das ganze ein wenig einschränken möchte, macht dann irgendwie sowas in der Config (anstelle von 'pool'):
host ThinClient { hardware ethernet 00:80:64:1A:E4:82; fixed-address 192.168.0.199 ; filename "bootp.bin"; }
TFTP
Ich hab den hpa-tftp genommen, weil den Denny in seinem LTSP Leitfaden auch verwendet. Dann habe ich das Image nach /var/tftp/bootp.bin kopiert.
Starten
Wir müssen beim Starten auf die verwendeten Ports achten.
# in.tftpd -a 192.168.0.22:10069 -l -v -s /var/tftpboot # dhcpd -p 10067
Jetzt den ThinClient resetten (10s Knopf drücken) und 'p' festhalten bis NETXFER kommt. Beim Flashen nicht stören. Das Runterladen des Images geht schnell. Das Image wird validiert und dann geschrieben, wobei auch die Dateigrößen von poweron.bmp, filesys0.img und filesys1.img angezeigt werden.
Sollte NETXFER "Upload failed" und in.tftpd "RRQ from $IP filename bootp.bin" (syslog) melden, liegt das wahrscheinlich an einem defekten Netzwerkkabel oder Switch/Hub.
Erstellung eines Etherbootimages
Vorwort
Hier geht es darum ein Image für den EVO T20 zu erstellen, welches ihn in die Lage versetzt vom Netzwerk zu booten. Dieser Vorgang wird oft auch PXE genannt. Dies versetzt den ThinClient wieder in einen brauchbaren Zustand z.B. für [LTSP]. Denny hat zu dazu ein Howto für die Pug geschrieben (der EVO kommt darin nicht vor).
Downloads
Diese Software wird benötigt:
- Gaasts Bundeltools bundle-tools-0.7.tar.gz
- Ein Etherboot Image eb-5.4.2pre2-natsemi.zlilo
- Dieses Image wurde auf rom-o-magic.net erstellt. Die Einstellungen waren:
- Version 5.4.2
- natsemi NIC
- zlilo Image
- CONFIG_DIRECT_PCI (sonst funktioniert die Netzwerkkarte nicht)
- Dieses Image wurde auf rom-o-magic.net erstellt. Die Einstellungen waren:
- Ein "Binary Firmware" Image von Compaq, z.B. das U96CPQ150.bin (76MB)
- Wer will das PUG poweron.bmp (ist beim Start kurz zu sehen)
Entpacken des Images
Zuerst die Tools entpacken
$ tar -xvzf bundle-tools-0.7.tar.gz
danch die U96CPQ150.bin in das Verzeichnis kopieren.
$ cp U96CPQ150.bin bundle-tools
dann in das Verzeichnis wechseln Nun müssen wir den bootstrap Code von NetXfer von dem Image extrahieren.
$ dd if=../U96CPQ150.bin of=netxfer bs=512 count=577
Danach
$ make
ausführen Etwas wie dies sollte dabei rauskommen
cc -Wall fwextract.c -o fwextract cc -Wall fwcs.c -o fwcs Runing extract_head.pl now. If this fails, you might have to run it by hand to specify the right sample bundle. ./extract_head.pl Couldn't find bundle signature, maybe this is a NetXfer image? Yes, it is. Don't forget to save the NetXfer bootstrap! See README for more information. fwhead.h successfully created cc -Wall fwpack.c -o fwpack make: *** No rule to make target `fwupload', needed by `all'. Stop.
Den Error wegen dem fwupload ignoriere ich mal getrost :D.
Entpacken des Bundels
$ ./fwextract U96CPQ150.bin extrakt
Dabei sollte so was rauskommen
This seems to be a NetXfer image, skipping the NetXfer bootstrap. Offset Size Checksum SysFlg BiosFlag Time Filename 00000178 00040000 061b3e1a 010000 00010000 3b532e4f ulc_code.ce 00040178 00000014 fdf207f8 010000 00020000 3b056f82 k 0004018c 00040000 8166c7a0 010000 00020000 3b2a67fe ulc_code.bin 0008018c 00000005 cacae1ac 010000 00020000 3af73b79 os.ver 00080194 00003728 24dc5849 010000 00020000 3b1bed43 poweron.bmp 000838bc 01e40000 1cc6f0ac 010000 00020000 3b532e3e filesys0.img 01ec38bc 01f40000 b7b46758 060003 00020000 3b532e3e filesys1.img 03e038bc 01f40000 81312caf 060004 00020000 3b532e3e filesys2.img
Damit ist dieser Teil schon mal erledigt! Vielen Dank noch ein mal an die Erschaffer der Tools!
GRUB
GRUB ist ein Multistage Boot-Loader . Er dient hier dazu das Etherbootimage zu starten.
Ich habe alle Schritte ausgeführt um GRUB zu ändern, die auf Kazaks Seite angegeben waren. Daraus habe ich diesen Patch erstellt. Damit ich mir merken kann wie man das macht
$ diff -uNr grub.org grub | gzip -c -9 > grub.patch.gz
Um den Patch anzuwenden muss man zuerst die GRUB Legacy Sourcen herunterladen,
$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/grub co grub
um danach den Patch einzuspielen.
$ zcat grub.patch.gz | patch -p0 2>&1 | tee patch.out
Nun die Datei compile-with-etherboot.sh ausführen.
$ sh compile-with-etherboot.sh
Als nächstes müssen wir die Größe des Stage2 loaders herausfinden. Diese kann je nach verwendetem Compiler unterschiedlich groß sein.
$ dd if=/path/to/grub/stage2/stage2 of=/tmp/test bs=512
Dabei sollte so etwas heraus kommen
171+1 records in 171+1 records out 87828 bytes (88 kB) copied, 0.00172 seconds, 51.1 MB/s
Dies bedeutet, dass der Stage2 Loader 172(171+1) Blocks groß ist. Dieses Wissen benötigen wir gleich. Zuerst müssen wir aber noch die Größe des Etherbootimages heraus finden.
$ dd if=/path/to/eb-5.4.2pre2-natsemi.zlilo of=/tmp/test bs=512
Die Größe wie oben notieren (bei mir war es 50 (49+1))
Nun machen wir ein "make clean".
$ make clean
Dies löscht die compilierte Version von GRUB wieder. Dann müssen wir die Datei presetmenu.etherboot mit dem Lieblingseditor bearbeiten.
default 0 timeout 0 title Etherboot kernel 175+50
Mit der presetmenu.etherboot Datei sagen wir GRUB wo denn das Etherbootimage liegt. Die Option bei GRUB nennt sich block lists.
Die erste Zahl errechnet sich wie folgt:
- Der Erste Sektor ist der MBR wird aber von dem BIOS ignoriert
- Im 2. Sektor liegt der Stage 1 Bootloader (kommt bald da hin)
- Bei mir ist der Stage2 loader 172 Sektoren groß
- Daraus ergibt sich 1 + 1 + 172 = 174
- Also muss unser Etherbootimage später einen Sektor danach anfangen = 175
Die zweite Zahl ist die Anzahl von Sektoren die das Etherbootimage beansprucht (bei mir 50).
Nun muss die Datei gespeichert werden.
Danach wieder mit
$ sh compile-with-etherboot.sh
compilieren. Mit dem Unterschied, dass GRUB nun weiß was er machen muss.
filesys0.img zusammenbauen
Nun wird GRUB in das Image "installiert" Zuerst der Stage1 Loader:
$ dd if=/path/to/grub/stage1/stage1 of=/path/to/bundle-tools/filesys0.img bs=512 seek=1
Dann der Stage2
$ dd if=/path/to/grub/stage2/stage2 of=/path/to/bundle-tools/filesys0.img bs=512 seek=2
Hier am besten noch einmal die Ausgabe überprüfen die Zahl sollte immer noch 171+1 sein (oder was bei dir beim ersten mal raus kam). Stimmen die Zahlen nicht überein muss die presetmenu.etherboot Datei noch einmal angepasst, make clean und sh compile-with-etherboot.sh ausgeführt werden.
Danach ist das Etherbootimage an der Reihe
$ dd if=/path/to/eb-5.4.2pre2-natsemi.zlilo of=/path/to/bundle-tools/filesys0.img bs=512 seek=175
seek=175 mit seek=Zahl die bei die heraus kam ersetzen
Da die filesys0.img unnötig groß ist
$ mv filesys0.img filesys0.img.big $ dd if=/path/to/bundle-tools/filesys0.img.big of=/path/to/bundle-tools/filesys0.img bs=512 count=225
count=225 mit count=Zahl die bei dir bei kernel 175+50 = 225 herauskommt austauschen
bootp.bin erstellen
In das bundle-tools Verzeichnis wechseln
$ cd /path/to/bundle-tools
Damit kann man nun das Image erstellen
$/path/to/bundle-tools/fwpack bundle.bin ulc_code.ce k ulc_code.bin /path/to/poweron.bmp filesys0.img
Als nächstes müssen wir den NetXfer Teil wieder an das Image kleben.
$ cat netxfer > bootp.bin && cat bundle.bin >> bootp.bin
Herzlichen Glückwunsch das Image ist erstellt. Folge bitte nun den Anweisungen zu NetXfer.
Damn Small Linux vom USB Stick booten
Vorwort
Ziel ist, ein Image zu erstellen, das DSL von einem USB-Stick bootet. Natürlich bleiben, wenn ausreichen Platz auf dem USB-Stick ist, die urprünglichen Daten auf dem Stick erhalten.
USB-Stick vorbereiten
Zuerst laden wir ein DSL Iso-Image von hier herunter, holen die benötigten Dateien heraus und packen sie auf den USB-Stick, bzw. auf die Festplatte.
$ mount -t iso9660 -o loop /mnt/share/download/dsl-3.0.1.iso /mnt/test $ mount /dev/sda1 /mnt/sda1 $ cp -r /mnt/test/KNOPPIX /mnt/sda1/ $ cp /mnt/test/boot/isolinux/linux24 /mnt/test/boot/isolinux/minirt24.gz ./ $ umount /mnt/sda1 $ umount /mnt/test
Beim kopieren der des KNOPPIX-Verzeichnisses wird alles kleingeschrieben, das stört aber nicht.
GRUB
Wir erstellen nun GRUB analog wie Bernhard das bereits gezeigt hat. Allerdings nehmen wir diesen Patch grub-dsl.patch.gz
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/grub co grub wget http://www.plasoft.de/downloads/grub-dsl.patch.gz zcat grub-dsl.patch.gz | patch -p0 2>&1 | tee patch.out
Nun ist es also an der Zeit die Größe des Kernels und der Initrd, die wir auf das Flash packen wollen, herauszufinden.
$ dd if=linux24 of=/tmp/test bs=512 1942+1 records in 1942+1 records out 994807 bytes (995 kB) copied, 0,038385 seconds, 25,9 MB/s $ dd if=minirt24.gz of=/tmp/test bs=512 1568+1 records in 1568+1 records out 803325 bytes (803 kB) copied, 0,035994 seconds, 22,3 MB/s
Für die erste Näherungsberechnung compilieren wir nun GRUB einmal mit untenstehender presetmenu Datei (die Werte können stimmen, sollten aber auf jeden Fall nochmal auf dem hier gezeigten weg kontrolliert werden)
Hier die Datei grub/presetmenu.dsl
default 0 timeout 0 title Damn Small Linux kernel 170+1943 root=/dev/hda1 ro vga=788 host=t20 fromhd=/dev/sda1 toram noagp nopcmcia noapm noswap noscsi desktop=jwm waitusb frugal restore=sda1 initrd 2114+1569
$ cd grub $ sh ./compile-with-dsl.sh
Jetzt können wir die exakte Größe von stage2 feststellen, stage1 ist immer 512 Byte groß.
$ dd if=stage2/stage2 of=/tmp/test bs=512 166+1 records in 166+1 records out 85176 bytes (85 kB) copied, 0,000896 seconds, 95,1 MB/s
Jetzt haben wir alle Größeninfos die wir brauchen um GRUB zu erklären wo Kernel und Initrd auf dem Flash zu finden sind.
Was noch fehlt sind die Startaddressen.
size start MBR 1 0 stage1 1 1 stage2 167 2 kernel 1943 170 initrd 1569 2114 3684
Nach der Korrektur der Datei presetmenu.dsl, einfach nochmal compilieren.
$ make clean $ sh ./compile-with-dsl.sh
Das Originalimage entpacken
Mit den bundle-tools das Originalimage wie hier beschrieben zerlegen. Wer die bundle-tools schon hat:
$ cd bundle-tools $ ./fwextract U64CPQ150.bin extrakt
Welches Originalbundle man wählt ist hierfür völlig egal
Das Image erzeugen
Der MBR des Original filesys0.img;Stage1;Stage2;Kernel;Initrd
$ cd .. $ dd if=bundle-tools/filesys0.img of=filesys0.img bs=512 count=1 $ dd if=grub/stage1/stage1 of=filesys0.img bs=512 seek=1 $ dd if=grub/stage2/stage2 of=filesys0.img bs=512 seek=2 $ dd if=linux24 of=filesys0.img bs=512 seek=170 $ dd if=minirt24.gz of=filesys0.img bs=512 seek=2114
Ein neues Bundle mit den bundle-tools erstellen und den netxfer Code nicht vergessen. Dann ab zum flashen. Wer ein schickeres Startbild möchte nimmt vielleicht dieses . Wichtig: Der Dateiname beim nächsten Schritt muß poweron.bmp sein, also alles klein geschrieben.
$ cd bundle-tools $ ./fwpack bundle.bin ulc_code.ce k ulc_code.bin poweron.bmp ../filesys0.img $ cat netxfer > bootp.bin && cat bundle.bin >> bootp.bin $ cp bootp.bin /var/lib/tftpboot/
Todo
- Sound
Bemerkung: Hier könnte evtl. schon das alsa.dsl-Paket abhilfe schaffen (lt. Beschreibung ist das Paket für DSL 2.0/2.1) (http://gd.tuwien.ac.at/opsys/linux/damnsmall/mydsl/system/alsa.dsl)
-
Uhrzeit, die Büchse vergisst leider beim herunterfahren die Zeit(siehe unten)
KNOPPIX-Dateisystem erweitern
Vorraussetzungen
Bevor wir überhaupt das KNOPPIX-Compressed-FS bearbeiten können, benötigen wir das Modul cloop.
Zuerst die Quellen holen
$ cd /usr/src $ wget http://debian-knoppix.alioth.debian.org/sources/cloop_2.04-1.tar.gz
Dann entpacken und ins neue Verzeichnis wechseln
$ tar xfz cloop_2.04-1.tar.gz $ cd cloop-2.04
Sodann erstellen wir das neue cloop-Modul mit unserem Kernel
$ make KERNEL_DIR=/usr/src/linux
und kopieren das neue Modul zu den anderen...
$ mkdir -p /lib/modules/2.6.17/misc && cp cloop.ko /lib/modules/2.6.17/misc/
dann noch die Module aktualisieren
$ depmod -a
und das neue Device erstellen
$ mknod /dev/cloop b 240 0 $ mknod /dev/cloop1 b 240 1
zuletzt noch das cloop-Modul laden
$ modprobe cloop
Die beiden Tools create_compressed_fs und extract_compressed_fs kopieren wir noch ins bin-Verzeichnis, da wir diese später noch brauchen.
$ cp create_compressed_fs /usr/bin/ $ cp extract_compressed_fs /usr/bin/
Damit können wir auf das KNOPPIX-Image zugreifen.
DSL-KNOPPIX-Image mounten
Das DSL-KNOPPIX-Image ist ein komprimiertes Dateisystem. Wir können dies einfach in ein iso-FS umwandeln:
$ extract_compressed_fs /PATH_TO_KNOPPIX/KNOPPIX > /tmp/KNOPPIX.iso
Aus den knapp 50 MB werden dann über 120 MB.
Das KNOPPIX.iso können wir wie gewohnt mounten
$ mount -o loop KNOPPIX.iso /mnt
Wollen wir das komprimierte Dateisystem direkt mounten, so geben wir folgendes ein:
$ mount -o ro,loop=/dev/cloop1 /PATH_TO_KNOPPIX/KNOPPIX /mnt
Per chroot können wir direkt in das DSL wechseln:
$ chroot /mnt $ mount -t proc none /proc
Hinweis: Vor dem Verlassen der chroot-Umgebung das Proc-FS wieder unmounten!
Damit wir Änderungen an dem Image vornehmen können müssen wir das gesamte Image auf die Festplatte kopieren und von da aus dann die Änderungen/Anpassungen vornehmen:
$ mkdir /tmp/knoppix $ cp -a /mnt/* /tmp/knoppix/
DSL-KNOPPIX erweitern
XFree86
Als erstes binden wir XFree86 ein, damit wir die volle Auflösung unserer T20 geniessen können ;-)
$ cd /tmp $ wget http://ftp.belnet.be/packages/damnsmalllinux/mydsl/system/XFree86.dsl $ cd /tmp/knoppix $ tar xfz ../XFree86.dsl
Damit der XFree86 auch genutzt wird, müssen wir noch einen Link neu setzen:
$ cd /tmp/knoppix/etc/X11 $ rm X $ ln -s /usr/bin/X11/XFree86 X
Die passende XF86Config-4 holen wir uns als Template von der VESA-Version
$ cp ../../home/dsl/XFree86_config_files/XF86Config-4_vesa
und modifizieren die entsprechenden Stellen. Wichtig sind auf jeden Fall die Sektionen "Device" und "Screen":
Section "Device" Identifier "Video Karte" driver "nsc" Option "NoAccel" "True" Option "FlatPanel" "True" VendorName "Cyrix Corporation" BoardName "5530 Video [Kahlua]" BusID "PCI:0:18:4" VideoRam 3072 EndSection Section "Screen" Identifier "Screen0" Device "Video Karte" Monitor "My Monitor" DefaultDepth 16 SubSection "Display" Depth 8 Modes "1280x1024" "1024x768" "800x600" "640x480" EndSubSection Subsection "Display" Depth 16 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection
NTPDate
Nun ergänzen wir unser DSL um die automatische Zeitsynchronisierung. Da es hierzu leider kein fertiges DSL-Paket gibt, verwende ich einfach das vom host:
$ cp /etc/init.d/ntpdate /tmp/knoppix/etc/init.d/ $ cp /usr/sbin/ntpdate /tmp/knoppix/usr/sbin/
Falls auf dem Host noch kein ntpdate installiert wurde, einfach nachholen:
$ apt-get install ntpdate
Damit die Zeit bei jedem Start automatisch synchronisiert wird, tragen wir den Aufruf noch entsprechend ein
$ vi /tmp/knoppix/opt/bootlocal.sh
#!/bin/bash # put other system startup command here /etc/init.d/ntpdate start
Zuletzt sollten wir noch den nameserver anpassen:
$ vi /tmp/knoppix/etc/dhcpc/resolv.conf
Neues KNOPPIX-Image erstellen
Nachdem alle Änderungen im neuen KNOPPIX-Image enthalten sind, erstellen wir das neue compessed-FS:
$ mkisofs -R -U -V "KNOPPIX" -hide-rr-moved -cache-inodes -no-bak -pad /tmp/knoppix | nice -5 /usr/bin/create_compressed_fs - 65536 > /tmp/KNOPPIX.neu
Danach liegt unter /tmp/KNOPPIX.neu unser neu erstelltes KNOPPIX-FS. Mit seinen 61 MB sollte es grade noch auf unser 64 MB-Flash passen :D
ToDo
- Als letztes dann das neue KNOPPIX-compressed-fs auf den Flash des T20 bringen, damit dieser auch ohne USB-Stick vollständig bootet.
done, ich hab eine Firmware erstellt, die dsl-3.4.4 direkt aus dem flash in eine ramdisk laden kann, ganz ohne usb-stick.
Im Augenblick hab ich keinen Platz mehr auf meinem schnellen webspace und kann das nur mit kleinem dsl-upstream anbieten http://baldar.dyndns.org/Compaq_Evo_T20/ li-la
Drive-Image mit Filesystem im Flash erstellen (in Bearbeitung)
Vorwort (in Bearbeitung)
Voraussetzungen (in Bearbeitung)
Geeignetes Verzeichnis anlegen (/path-to)
$ cd /path-to $ cp /irgendwoher/U64CPQ163.bin /path-to/
Grub unter /path-to-grub/ 'auspacken' und mit compile-with-dhcp compilieren.
GRUB mit DHCP
GRUB ist ein Multistage Boot-Loader . Er dient dazu ein Betriebssystem zu starten und offeriert hierfür eine Menüstrucktur welche im Normalfall sogar Live editiert werden kann. Zwecks der grösseren Flexibilität wird er zur Zeit hier genutzt um ein Menü-File via TFTP von einem Server zu laden und dann, entsprechend dem Menü, den Kernel bzw. die Initrd via TFTP oder vom Flash zu laden. Mangels Tastatur (kein Support für USB-Tastaturen zu diesem Zeitpunkt) kann immer nur ein Eintrag automatisch via 'default=' geladen werden. Die Vorgehensweise entpricht der von Bernhard, mit der Ausnahme dass der Support für ext2fs in GRUB enabled wird und kein Etherboot-Image benötigt wird.
Zuerst sollt man sich die GRUB Legacy Sourcen herunterladen,
$ mkdir -p /path-to-grub $ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/grub co /path-to-grub
Anschliessend kann man erstmal mit Bernhards Patch die nötigen Modifikationen, welche auf Kazaks Seite angegeben sind automatisch durchführen.
$ zcat grub.patch.gz | patch -p0 2>&1 | tee patch.out
Nun die Datei 'compile-with-etherboot.sh' nach 'compile-with-dhcp.sh' kopieren und wie folgt modifizieren oder aus diesem Text mit Copy&Paste eine neue 'compile-with-dhcp.sh' erstellen.
#!/bin/sh ./configure \ --enable-preset-menu=presetmenu.dhcp \ --enable-natsemi \ --enable-pci-direct \ --enable-ext2fs \ --disable-fat --disable-ffs --disable-ufs2 \ --disable-minix --disable-reiserfs --disable-vstatfs --disable-jfs \ --disable-xfs --disable-iso9660\ --disable-md5-password --disable-serial make
Die zugehörige 'presetmenu.dhcp' sollte dann so aussehen:
default 0 timeout 0 title Load config from DHCP dhcp --with-configfile
Nun die Datei compile-with-dhcp.sh ausführen.
$ sh compile-with-dhcp.sh
Als nächstes müssen wir die Größe des Stage2 loaders herausfinden. Diese kann je nach verwendetem Compiler unterschiedlich groß sein. Da wir mit den Vorschlägen im späteren Verlauf 'nur' 130048 byte (bzw. 254 Sektoren a 512 Byte) zur Verfügung haben, sollte die Stage2 nicht grösser sein. ;-)
Achtung: Sollte dieser Fall jedoch eintreten muss der Anfang der (ersten) Partition auf Zylinder 3 verlegt werden.!!
$ ls -al /path-to-grub/stage2/stage2
Dabei sollte eben ein Dateigrösse kleiner 130048 herauskommen.
GRUB mit statischer IP
Die Konfigurationsdatei für GRUB lässt sich auch ohne DHCP von einem TFTP Server laden, das presetmenu sieht dann so aus:
default 0 timeout 0 title Load config from TFTP ifconfig --address=192.168.0.3 --server=192.168.0.2 --gateway=192.168.0.1 --mask=255.255.255.0 configfile (nd)/grub.conf
address
ist dabei die statische IP vom T20, server
die IP des TFTP Servers, gateway
die IP bspw. des DSL-Routers.
Erzeugen der virtuellen Festplatte
Beim flashen des Evo werden die Bereiche filesys0.img und filesys1.img ins NAND-Flash geschrieben und sind später, anscheinend als virtuelle Festplatte, über IDE ansprechbar. Deshalb wird nun, mit ein paar Besonderheiten, eine HDD-Struktur in einer Datei aufgebaut.
$ dd if=/dev/zero of=filesys count=125952 $ losetup /dev/loop/0 filesys # /dev/loop/0 beim ersten Aufruf mit udev # sonst /dev/loop0 !!!
Erzeugen des MBR
Der Einfachheit halber wird stage1 von GRUB in den Sektor 0 kopiert.
$ dd if=/path-to-grub/stage1/stage1 of=/dev/loop0
Erzeugen der Partition
Achtung! Die erste Partition gibt anscheinend die Grösse der späteren HDD (zumindest fuer GRUB) vor!!!
Zur Erstellung der Partition startet man einfach fdisk.
$ fdisk /dev/loop0
Sollten hier irgendwelche Partitionen angezeigt werden sind diese alle mittels Taste [d] und entsprechender Angabe der Partition zu löschen.
Nun schaltet man mit Taste [x] in den Erweiterten Modus von Fdisk.
Hier stellen wir die Anzahl der Cylinder mittels Taste [c] und Eingabe von 492 um. Anschliessend erfolg die Umstellung der Anzahl der Köpfe mittels Taste [h] und Eingabe von 8 sowie die Anzahl der Sektoren/Spur mittels Taste [s] und Eingabe von 32.
Nun erfolgt der Rücksprung in den Standardmodus von Fdisk mittels Taste [r].
Nun wird mit der Tastenfolge [n], [p], [1], [2]*, [RETURN] eine primäre Partition von Zylinder 2 bis Zylinder 492 angelegt. (Automatisch Type 83 Linux)
*Hinweis: Sollte nach dem Kompilieren von GRUB die stage2 grösser als 130048 Byte sein darf die Partition erst ab einem späteren Zylinder beginnen. Für jeden Zylinder können weitere 131072 Byte angerechnet werden.
Mit der Taste [w] werden nun die Änderungen gespeichert und fdisk verlassen, wobei die Fehlermeldungen betreffen des Einlesens ignoriert werden können.
Da der Evo den MBR im Sektor 0 ignoriert muss der bereits gepatchte MBR inklusive Partitionstabelle aus Sektor 0 auch in den Sektor 1 kopiert werden.
$ dd if=/dev/loop0 of=/dev/loop0 seek=1 count=1
Nun noch die gepatchte stage2 von GRUB beginnen mit Sektor 2 einfuegen.
$ dd if=/path-to-grub/stage2/stage2 of=/dev/loop0 seek=2
Erstellen des Filesystems
Die erstellte Partition beginnt mit Cylinder 2*. Der Start der Partition kann sehr einfach über folgende Formel errechnet werden.
8 Heads/Cylinder * 32 Sectors/Cylinder * 512 Byte/Sector = 131072 (offset)
*Für jeden Zylinder welche die Partition später beginnt (stage2 zu gross) werden weitere 131072 zum Offset hinzugezählt.
$ losetup -o 131072 /dev/loop1 filesys $ mkfs.ext2 /dev/loop1 # hier bestehten noch Optmierungsmoeglichkeiten # (z.B. reserved blocks) $ tune2fs -c 0 -i 0 /dev/loop1 # Schaltet die Laufwerkspruefung ab
Inhalt einspielen
Nun können die gewüschten Inhalte in das Filesystem eingespielt werden. Hierfür wird das Loop-Device der Partition (/dev/loop1) in ein Verzeichnis eingebunden.
$ mount /dev/loop1 /mnt/ $ cp -a /irgendwas /mnt/ # z.B. /boot und /KNOPPIX aus dem DSL ISI Image $ umount /dev/loop1
Anschliessend wird die virtuelle Festplatte wieder 'abgenabelt'.
$ losetup -d /dev/loop1 $ losetup -d /dev/loop0
Drive-Image im orginal Bootp-File austauschen (in Bearbeitung)
Weil es so schön einfach ist wird jetzt die virtuelle Festplatte in das orginal Image eingefügt.
$ losetup -o 834198 /dev/loop0 U64CPQ163.bin $ dd if=filesys of=/dev/loop0 $ losetup -d /dev/loop0
Nach dem flashen des Evo mit diesem Überarbeiteten Image bezieht der Evo seine IP Adresse via DHCP und ruft die in der DHCP Konfiguration angegebene Menüdatei via TFTP ab.
'''ToDo:''' Auszug aus dhcpd.conf einfüen !!!
Z.B kann mit folgenden Eintraegen in grub-menu.lst der Kernel und die Initrd des DSL Iso Image aus dem Flash geladen werden.
default 0 timeout 0 color white/blue black/light-gray title HP Thin Client clear geometry (hd0) root (hd0,0) kernel /boot/isolinux/linux24 root=/dev/hda1 ro vga=788 host=t20 fromhd=/dev/hda1 \ toram noagp nopcmcia noapm noswap noscsi desktop=jwm waitusb frugal restore=sda1 initrd /boot/isolinux/minirt24.gz
Zum Experimentieren bietet sich aber an den Kernel und das Initrd vom TFTP-Server zu laden. (spart viel Zeit für das flashen ;-) )
default 0 timeout 0 color white/blue black/light-gray title HP Thin Client root (nd) kernel (nd)/tftpboot/kernel kernelparameter initrd (nc)/tftpboot/initrd
ToDo
- Direktes Laden von stage2 aus Sektor 1 prüfen
- Mehrfache logische Partitionen innerhalb einer primären Partition testen
- Untersuchen warum der IDE Treiber des Kernels noch immer die falsche Geometrie der Festplatte ermittelt
Evo Infos
Administrator Zugang (WinCE und NTe)
- WinCE / NTe starten
- User selection Fenster mit folgender Tastatursequenz aufrufen:
<TAB>, <HOME>, <END>, <LEFT>, <RIGHT>
- Administrator mit folgenden Eingaben anmelden (Groß/Kleinschreibung beachten!!)
login : Administrator password: Administrator (mit A !!!)
Offset Informationen
U64CPQ163.bin / U96CPQ163.bin offset offset size name 0000:0000 0000:0000 0004:8200 bootstrap 0004:8200 03e4:3896 'U64CPQ163.bin' bundle file 0004:8200 05d4:38bc 'U96CPQ163.bin' bundle file 03e4:ba96 0000:0006 unknown part of U64CPQ163.bin 05d8:babc 0000:0004 unknown part of U96CPQ163.bin --------- --------- 03e4:ba9c 05d8:bac0 end of bundle file (total filesize) 65.321.628 98.089.664 decimal
bundle file (offsets within the bundle file)
U64CPQ163.bin / U96CPQ163.bin offset offset size name 0000:0000 0000:0152 '64MB' bundle file information (directory?) 0000:0000 0000:0178 '96MB' bundle file information (directory?) 0000:0152 0000:0178 0004:0000 ulc_code.ce (BIOS) 0004:0152 0004:0178 0000:0014 k 0004:0166 0004:018c 0004:0000 ulc_code.bin 0008:0166 0008:018c 0000:0005 os.ver 0008:016e 0008:0194 0000:3728 poweron.bmp 0008:3896 0008:38bc 01e4:0000 filesys0.img 31.719.424 (61952 sectors) 01ec:3896 01ec:38bc 01f4:0000 filesys1.img 32.768.000 (64000 sectors) 03e0:38bc 01f4:0000 filesys2.img 32.768.000 (64000 sectors)
bundle file (offset from the beginning of the file including the bootstrap)
U64CPQ163.bin / U96CPQ163.bin offset offset size name 0004:8200 0000:0152 '64MB' bundle file information (directory?) 0004:8200 0000:0178 '96MB' bundle file information (directory?) 0004:8352 0004:8378 0004:0000 ulc_code.ce (BIOS) 0008:8352 0008:8378 0000:0014 k 0008:8366 0008:838c 0004:0000 ulc_code.bin 000c:8366 000c:838c 0000:0005 os.ver 000c:836e 000c:8394 0000:3728 poweron.bmp 000c:ba96 000c:babc 01e4:0000 filesys0.img 31.719.424 (61952 sectors) 01f0:ba96 01f0:babc 01f4:0000 filesys1.img 32.768.000 (64000 sectors) 03f0:babc 01f4:0000 filesys2.img 32.768.000 (64000 sectors)
Weblinks
- Original Compaq Stuff
- Link zum Originalimage für 96/128 T20 EVOs
- Kazak's Linux on Compaq HowTo - Superwichtig
- Gaasts Linux auf Winterms Seite - Gaast Tools
- wlug.org.nz - Hier geht es Richtung PXE!
- emdebian - Linux Distribution für Embedded Geräte.
- Denny's LTSP Leitfaden
- http://www.damnsmalllinux.org/
- KNOPPIX Remastering Howto
- Eine Beschreibung wie man mit einem loopback device direkt die ntfs Partition in einem Image mounten kann, um inzwischen mit grub4dos direkt einen Linux Kernel zu booten. Dann braucht man nicht mehr umständlich mit einem gepachten grub1 arbeiten, der für jede neue Version ebenfalls erstellt werden muss. Auf heutigen Distributionen kompiliert das auch vermutlich gar nicht mehr out of the box.
http://baldar.dyndns.org/dokuwiki/doku.php/compaq_evo_t20_thinclient/ http://baldar.dyndns.org/dokuwiki/doku.php/compaq_evo_t20_thinclient/firmware_creation_using_grub4dos_on_ntfs_instead_of_a_patched_grub1
- Es gibt eine gute engl. Mailingliste für den Evo T20 http://open-evot20.sourceforge.net/wiki/