Posted: Wed Aug 29, 2012 18:49 Post subject: Marvell Orion (Netgear WNR3500)
ich habe mir die Mühe gemacht, einen Kernel für o.g. Hardware zu bauen. Wie an folgenden Boot-Log zu sehen ist, scheitert die NVRAM-Initialisierung.
im Kernel-Source-Baum
drivers/mtd/maps/nvram_kernel.c
drivers/mtd/maps/nvram.c
drivers/mtd/maps/wrapper.h
Speziell die Adresse 0xbe000000 (nvram_kernel.c) passt nicht so recht ins Bild. Auf einem WZR-HP-AG300H liegt die Adresse unterhalb vom Kernel (vermute ich). Aktuell habe ich uboot eine loadaddr 00008000 verpasst (zImage verpackt).
in den openWRT-Sourcen gibt es diese Dateien nicht.
Vielleicht findet sich ja ein Wissender, der helfen kann.
Using egiga0 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.1
Filename 'root.uImage'.
Load address: 0x400000
Loading: *#################################################################
#################################################################
#################################################################
###
done
Bytes transferred = 1009672 (f6808 hex)
Marvell>> bootm 00400000
## Booting image at 00400000 ...
Image Name: ARM Linux Kernel Image
Created: 2012-08-29 13:36:24 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1009608 Bytes = 985.9 kB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
OK
DRAM CS[0] base 0x00000000 size 16MB
DRAM Total size 16MB
[8192kB@ff800000] Flash: 8 MB
Addresses 12M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (12M - 8M): Done
sysinit-orion5x.c lädt jetzt die notwendigen Module, um den Switch in Betrieb zu nehmen (br0 wird automatisch konfiguriert).
offene Fragen:
- nvram commit scheitert, obwohl Daten scheinbar geschrieben werden (cat /dev/mtd/x enthält sinnvolle Daten).
- diverse gpio-Fehler (suche noch den Verursacher; leds, switch?)
- switch config
- uboot-env
Nicht schlecht wäre eine Auflistung, in welcher Reihenfolge die Sourcen aus services aufgerufen werden (ist ja auch die Reihenfolge der Verursacher von Fehlern).
was nicht geht:
- nvram commit -> [ 516.424781] nvram_commit: erase error
- gpio-Fehler unverändert
- switch unverändert
root@DD-WRT:~# cat /proc/version
Linux version 3.3.8-svn19995 (ladmin@fedora) (gcc version 4.6.3 20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #81 Mon Sep 24 21:18:36 CEST 2012
root@DD-WRT:~# cat /proc/cpuinfo
Processor : Feroceon rev 0 (v5l)
BogoMIPS : 331.77
Features : swp half thumb fastmult edsp
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 0
was geht:
- http
- ssh
- lan config
- wan (dhcp+pppoe)
- wlan (Treiber geladen; Interfacename wlan0 wird benutzt)
- flashbares Image (Netgear -> DD-WRT)
- wpa_supplicant kann eine Verbindung herstellen (man. Konfiguration und starten)
was noch nicht geht:
- gpio (im Code ruhig gestellt)
- wlan (wlioctl liefert viele Fehler)
- nvram commit (FlashChip wird wahrscheinlich nicht unterstützt)
- flashen in DD-WRT -> DD-WRT (die Standardmethode wird aufgrund von knappen RAM nicht funktionieren)
- weitere Kleinigkeiten wie LEDs, Reset- + WPS-Button (alles gpio-basiert)
was ich brauchen könnte:
- Schreibzugriff auf den NOR-Speicher (unlock und erase Sequence ist bekannt) - traue mich da nicht ran!!!
was geht:
- http
- ssh
- lan config
- wan (dhcp+pppoe)
- nvram
- jffs (grundsätzlich ja, Überprüfung von Checksummen beim Booten stört noch)
- wlan (Treiber geladen; Interfacename wlan0 wird benutzt)
- flashbares Image (Netgear -> DD-WRT)
- wpa_supplicant kann eine Verbindung herstellen (man. Konfiguration und starten)
was noch nicht geht:
- gpio (im Code ruhig gestellt)
- wlan (wlioctl liefert viele Fehler)
- flashen in DD-WRT -> DD-WRT (die Standardmethode wird aufgrund von knappen RAM nicht funktionieren)
- weitere Kleinigkeiten wie LEDs, Reset- + WPS-Button (alles gpio-basiert)
was geht:
- http
- ssh
- lan config
- wan (dhcp+pppoe)
- nvram
- jffs (grundsätzlich ja, Überprüfung von Checksummen beim Booten stört noch)
- wlan
- client mit eap-peap/wpa2 funktioniert nach dem Booten
- client-bridge mit wpa2 funktioniert (Netzwerk-Config fehlt noch -> relayd)
- die Abhängigkeiten werden langsam klarer (nas, wan, stabridge)
- flashbares Image (Netgear -> DD-WRT)
was noch nicht geht:
- gpio (im Code ruhig gestellt)
- wlan (wlioctl liefert viele Fehler)
- flashen in DD-WRT -> DD-WRT (die Standardmethode wird aufgrund von knappen RAM nicht funktionieren)
- weitere Kleinigkeiten wie LEDs, Reset- + WPS-Button (alles gpio-basiert)
was geht:
- http
- ssh
- lan config
- wan (dhcp+pppoe)
- nvram
- jffs (grundsätzlich ja, Überprüfung von Checksummen beim Booten stört noch)
- wlan (client/client bridge funktioniert; übernehmen von Config-Änderungen via GUI fehlt noch)
- die Abhängigkeiten werden langsam klarer (nas, wan, stabridge)
- flashbares Image (Netgear -> DD-WRT)
was noch nicht geht:
- gpio (im Code ruhig gestellt)
- wlan (wlioctl liefert viele Fehler)
- flashen in DD-WRT -> DD-WRT (die Standardmethode wird aufgrund von knappen RAM nicht funktionieren)
- weitere Kleinigkeiten wie LEDs, Reset- + WPS-Button (alles gpio-basiert)
für das Update vom uboot-env benötige ich eine crc32-Berechnung. Leider liefert die Implementierung in libutils nicht das gewünschte Ergebnis (die aktuelle Checksumme).
muss ich noch mehr beachten als
Code:
crc32(<pointer auf die Daten>, <size der Daten>, CRC32_INIT_VALUE);
Ja. Ergebnis muss mit NOT-Operator bearbeitet werden!
Code:
~crc32(<pointer auf die Daten>, <size der Daten>, CRC32_INIT_VALUE);
was geht:
- http
- ssh
- lan config
- wan (dhcp+pppoe)
- nvram
- jffs
- wlan (client/client bridge funktioniert; übernehmen von Config-Änderungen via GUI fehlt noch)
- die Abhängigkeiten werden langsam klarer (nas, wan, stabridge)
- flashbares Image (Netgear -> DD-WRT)
- uboot-env patchen (Checksummenprüfung aus bootcmd entfernen)
was noch nicht geht:
- gpio (im Code ruhig gestellt)
- wlan (wlioctl liefert viele Fehler)
- flashen in DD-WRT -> DD-WRT (die Standardmethode wird aufgrund von knappen RAM nicht funktionieren)
- weitere Kleinigkeiten wie LEDs, Reset- + WPS-Button (alles gpio-basiert)
Ein mehrtägiger Test ist ohne nennenswerte Problem durchgelaufen (im Client-Bridge-Mode verbunden mit WZR-HP-AG300H).
Lediglich der WLAN-Durchsatz (ca. 1MB RX) ist noch dürftig.
Im Anhang finden sich die gepatchten/neue Source-Files (hoffentlich vollständig).
Die noch offenen Punkt sind für meine weitere Verwendung der Hardware entbehrlich (kein gesteigertes Interesse mehr Zeit zu investieren).
Wer mag, der kann gern mehr Aufwand reinstecken. Die Ergebnisse würde ich mir gern anschauen.
was geht:
- http
- ssh
- lan config
- wan (dhcp+pppoe)
- nvram
- jffs
- wlan (client/client bridge funktioniert; übernehmen von Config-Änderungen via GUI fehlt noch)
- flashbares Image (Netgear -> DD-WRT)
- uboot-env patchen (Checksummenprüfung aus bootcmd entfernen)
- gpio (Buttons+LEDs; ziemlich kruder Code)
was noch nicht geht:
- flashen in DD-WRT -> DD-WRT (die Standardmethode wird aufgrund von knappen RAM nicht funktionieren)
- WLAN ap-mode (openwrt-Patch noch nicht angeschaut)
patchen (mit Fedora17 getestet)
- tar-file auspacken
- ins Verzeicnis dd-wrt wechseln
- './svn-update dd-wrt --revision 20551' aufrufen
- zip-file wnr3500.zip auspacken
- *.patch files anwenden (svn)
- ins Verzeichnis opt wechseln
- './install_wnr3500' ausführen (im make wird mehrmals Enter erwartet)
- nach erreichen der Ausgabe 'make config done' kann install_wnr3500 mit dem Parameter --no-config wiederholt aufgerufen werden
Toolchain muss noch modifiziert werden (Namen von Binaries+2 Type-Definitionen; 38 MB kann ich leider nicht hochladen)