Sie sind nicht angemeldet.

Anzeigen

**Wir werden in den kommenden Tagen einen Umzug auf einen neuen Server durchführen. Im Rahmen dieser Maßnahme wird das Forum ca. 1 Stunde nicht erreichbar sein.** nslu2-info.de ist ein privates Projekt von mir, welches jeden Monat aus eigener Tasche finanziert wird. Mit einer freiwilligen Spende wird der Erhalt und der weitere Ausbau dieses Forums unterstützt. Um mich beim Erhalt des Forums zu unterstützen, kannst Du entweder via Flattr oder Paypal spenden. Ich bedanke mich schon jetzt bei allen Unterstützern.

Lieber Besucher, herzlich willkommen bei: Die NSLU2 Community****wenns ums speichern und streamen geht****. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

-tomas-

Anfänger

  • »-tomas-« ist der Autor dieses Themas

Beiträge: 6

Firmwareversion / your current Firmware: originale Firmware 2.3r24

  • Nachricht senden

1

Donnerstag, 1. Februar 2007, 23:27

FNS-1000: Tutorial vmlinuz (Kernel Konsole) patchen auf ttyS1

Hinweis: ich habe diese Nachricht schon in des Forum von http://www.axel-beierlein.de/board/index.php gestellt.

verwendete NAS: FNS-1000, müsste aber auch bei der NSLU2 genauso gehen

Ich benötige ttyS0 für eigene Erweiterungen (LCD...).
Der XScale-IXP425 besitzt eine zweite serielle Schnittstelle, diese ist aber leider nicht verdrahtet.
Ich hatte das Problem, dass der Kernel nicht zu bewegen war, die Serielle Schnittstelle ttyS0 freizugeben.
Die üblichen Tricks schlugen nicht an

Quellcode

1
2
3
setserial /dev/ttyS0 port none
setserial /dev/ttyS0 irq 0
setserial /dev/ttyS0 uart none

Auch für einen USB-RS232 Adapter (Prolific PL2303 ) habe ich zwar die Treiber der NSLU2 installiert bekommen, und der PL2303 wurde auch erkannt, jedoch tauchte das Device /dev/ttyUSB0 im System nie auf.
siehe auch http://www.nslu2-linux.org/wiki/Peripherals/USB2Serial

Also dachte ich mir, einfach im Kernel vmlinuz die entsprechende Zeile von ttyS0 auf ttyS1 zu patchen:

Quellcode

1
Kernel command line: console=ttyS0,115200 root=/dev/ram0 initrd=0x01000000,14M mem=32M@0x00000000


Leider ist der Kernel komprimiert und mit einem bootloader und einem footer versehen.
erst einmal RTFM:

Zitat

FNS-1000_V27R17_GPL\linux-2.4.x.dongle\arch\arm\boot\compressed\Makefile
create a compressed vmlinuz image from the original vmlinux
GZFLAGS :=-9
gzip $(GZFLAGS) < piggy > piggy.gz


ergab folgende Erkenntnis: der Kernel ist mit gzip -9 komprimiert worden.
Das ergibt die magic bytes 1F 8B 08 (gzip=[1F 8B] und max compression =[8])

Los gehts:

Ubuntu geladen und die Firmware entpackt mit

Quellcode

1
2
3
4
5
6
7
8
9
10
# ./slugtool unpack /27R19.bin 
Unpacking '27R19.bin'....
        Redbook....
        Reading SysConf Header....
        SysConf....
        Reading vmlinuz Header....
        vmlinuz....
        Reading ramdisk Header....
        ramdisk.gz....
        Trailer....

jetzt die vmlinuz mit einem Hexeditor (Ultraedit) geöffnet und die magic bytes 1F 8B 08 gesucht und bei 2E9Ch gefunden

Zitat

00002E70: 73 73 69 6E-67 20 4C 69-6E 75 78 2E-2E 2E 00 00 ssing Linux...
00002E80: 20 64 6F 6E-65 2C 20 62-6F 6F 74 69-6E 67 20 74 done, booting t
00002E90: 68 65 20 6B-65 72 6E 65-6C 2E 0A 00-1F 8B 08 00 he kernel.&#9689; &#9660;ï&#9688;
00002EA0: 0D 32 B3 44-02 03 EC FD-0B 74 55 D5-B5 07 0E EF &#9834;2&#9474;D&#9787;&#9829;ý²&#9794;tU&#305;Á&#8226;&#9835;´
00002EB0: 7D 5E 39 84-03 39 79 61-C4 04 76 00-6D AA 41 76 }^9ä&#9829;9ya&#9472;&#9830;v mAv


Die ersten 11931 Bytes (bis 2E9bH ) sind der Bootloader.
Dieser endet mit Uncompressing Linux done, booting the kernel.
Diese Bytes habe ich ausgeschnitten und für später gesichert.
Unsere Datei vmlinuz.part.gz beginnt jetzt mit 1F 8B 08...

Quellcode

1
2
gzip -d ./ vmlinuz.part.gz
ergibt Fehlermeldung: decompression OK, trailing garbage ignored

d.h. da hängt noch etwas in der zip Datei hinten dran, was verworfen wurde.

Also wieder zur Kontrolle gepackt mit

Quellcode

1
gzip -9 < vmlinuz.part > vmlinuz.part.gz

Datei verglichen mit Original ergab, dass die neue gz Datei Bytegenau dem Original entspricht mit FB 37 20 00 endet. Im Original kommt danach noch ein 114Byte langer footer.
(Wofür auch immer):

Zitat

000F9010: 78 4A 4C FB-37 20 00 00-00 00 2C 88-00 00 2C A8
000F9020: 00 00 2C C8-00 00 2C E0-00 00 2D 00-00 00 2D 28
000F9030: 00 00 2D 50-00 00 2D 78-00 00 2D 88-00 00 2D 98
000F9040: 00 00 2D A8-00 00 2D C8-00 00 2D E0-00 00 2D F8
000F9050: 00 00 2E 08-00 00 2E 18-00 00 2E 9C-00 0F 90 17
000F9060: 00 00 2E 28-00 00 2E 40-00 00 2E 48-00 00 2E 50
000F9070: 00 10 14 E0-00 00 2E 68-00 00 2E 80-00 00 00 00
000F9080: 00 00 00 00-00 00 00 00- -


Diese 114 Byte footer für später sichern.

Jetzt ist alles bekannt, alles weitere in Stichpunkten

Quellcode

1
gzip -d ./ vmlinuz.part.gz

mit einem Hexeditor in der vmlinuz.part die Zeile

Quellcode

1
console=ttyS0,115200 root=/dev/ram0 initrd=0x01000000,14M mem=32M@0x00000000

gepatcht ttyS0 gepatcht auf

Quellcode

1
console=ttyS1,115200 root=/dev/ram0 initrd=0x01000000,14M mem=32M@0x00000000

ACHTUNG: Hier darf kein Byte eingefügt oder gelöscht werden!!

jetzt mit folgendem Befehl (siehe oben RTFM) den Kernel wieder zusammenpacken:

Quellcode

1
gzip -9 < vmlinuz.part > vmlinuz.part.gz


Die Datei vmlinuz.part.gz vorne um den Bootloader und hinten um den footer ergänzt.
Zum Schluss ist die neue vmlinuz genau so groß wie das Original!!

jetzt die Firmware wieder packen mit:

Quellcode

1
2
3
4
5
6
7
8
./slugtool pack ./27R19.bin
Packing '/27R19-hookpatch6.bin'....
        zeroing entire file....
        Redbook....
        SysConf....
        vmlinuz....
        ramdisk.gz....
        Trailer....


Firmware in die FNS-1000 geladen und gebootet:

Hier das letzte Lebenszeichen der seriellen Schnittstelle:

Quellcode

1
2
3
4
5
6
7
RedBoot> boot;exec 0x01d00000
have eRcOmM 
copy kernel code from flash to RAM
copy ramdisk file from flash to RAM
run kernel
Using base address 0x01d00000 and length 0x000f9088
Uncompressing Linux.................................................................... done, booting the kernel.


das war es :-)

Kontrolle im System mit dmesg

Zitat

# dmesg
Linux version 2.4.22-xfs (root@localhost.localdomain) (gcc version 3.2.1) #617 Tue Jul 11 13:05:07 CST 2006
CPU: XScale-IXP425/IXC1100 revision 1
Machine: Intel IXDP425 Development Platform
Warning: bad configuration page, trying to continue
Security risk: creating user accessible mapping for 0x60000000 at 0xff00f000
Security risk: creating user accessible mapping for 0x51000000 at 0xf1000000
Security risk: creating user accessible mapping for 0x54000000 at 0xf4000000
Security risk: creating user accessible mapping for 0x55000000 at 0xf5000000
Security risk: creating user accessible mapping for 0x56000000 at 0xf6000000
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: console=ttyS1,115200 root=/dev/ram0 initrd=0x01000000,14M mem=32M@0x00000000
Relocating machine vectors to 0xffff0000
Calibrating delay loop... 266.24 BogoMIPS
Memory: 32MB = 32MB total



kurzer Test mit ttyS0 -> alles klar, die Schnittstelle ist frei :-)

Das ganze geht natürlich auch mit mem=64M@0x00000000

Hinweis: Man kann alternativ auch den Kernel neu compilieren, ist aber nicht mein Ding.

Anzeigen

Social Bookmarks