[Gelöst] FW 6.50 für 7490 in Trunk rev. 13490 - keine Auswahlmöglichkeit

- Das mit dem WLAN: Mit der original Firmware funktioniert das WLAN ohne Probleme, sobald ich auf Freetz wechsel geht das WLAN nicht mehr. Wechsel zurück geht. Auch nach recover bleibt das Bild gleich...
- USB Stick ist mit freetz nicht mehr zu mounten. Funktioniert mit Stock ebenfalls problemlos.

Zumindest das mit dem WLAN hab ich kurz hin und her testen können...

edit:
mod_load.log
Code:
Loading modules ... sh: /lib/modules/3.10.73/kernel/fs/fat/fat.ko: unknown operand
sh: /lib/modules/3.10.73/kernel/fs/fat/vfat.ko: unknown operand
done.

Deshalb mag der USB-Stick nicht...
 
Zuletzt bearbeitet:
Genauere Informationen zum WLAN stehen event. (kommt auf den Punkt an, wo es knallt) in der Datei /var/tmp/wlan_support.log oder /var/tmp/wlan_sanity.log ... letztere existiert m.W. nur, wenn der wland selbst ein Problem feststellt.

Beim modload-Skript sieht das ja fast so aus, als wenn da das Kommando durcheinander kommt ... die Fehlermeldung ist etwas komisch und sieht fast so aus, als würde da das "ko"-File direkt aufgerufen (allerdings hat das i.d.R. kein x-Flag und müßte "permission denied" melden).

Starte doch mal bitte "sh -x /usr/bin/modload 2>&1 | tee /var/tmp/modload.debug" und poste den Teil der Ausgabe ab dem "echo -n 'Loading modules ... '" - ich bin mir nicht sicher, ob es an einer abweichenden Funktion des "modprobe"-Kommandos (etwas anderes wird da ja nicht aufgerufen) oder erst später an einer eigenen Module-Konfiguration in /tmp/flash/mod/modules bei Dir liegen kann. Ich gehe allerdings davon aus, daß Du da keine Module getauscht hast (das gibt die Toolchain an der Stelle ja eigentlich nicht her) und daher die Module unterhalb von /lib/modules/3.10.73/kernel/fs/fat im "original"- und im "modified"-Zweig identisch sind, sonst braucht man gar nicht erst zu suchen. Ich weiß nicht, welche Pakete Freetz enthalten könnte, die eigene fat/vfat-Module brauchen - ist nicht mein Tisch.

Mehrfaches Laden eines Kernel-Modules stört eigentlich nicht, wird eben beim zweiten Mal einfach nicht geladen, "modprobe" liefert nicht einmal eine Fehlermeldung dabei. Ansonsten gibt es in der Busybox zwei Varianten beim Bau des "modprobe"-Applets - ich gehe mal davon aus, daß bei Dir "FREETZ_BUSYBOX_MODPROBE_SMALL" nicht gesetzt ist?

Was passiert denn nach einem Neustart, wenn Du von Hand "modprobe fat" und "modprobe vfat" (das würde eigentlich anhand der modules.dep fat.ko ebenfalls laden, wenn es direkt als erstes aufgerufen wird) noch einmal aufrufst? Hinter den Kulissen mündet das ja in das Laden und Starten der Initialisierung des Modules, das sind normale "relocatable ELF files". Wenn man den falschen Parameter von außen nicht sehen kann, müßte man ggf. mit "strace" an das "modprobe" herangehen und suchen, welcher Parameter da intern übermittelt werden könnte.

Wie sieht eigentlich die Ausgabe von "lsmod" aus? Vielleicht sind die notwendigen Module ja doch geladen und das Problem liegt am Ende an einer anderen Stelle?

Ich tippe aber erst einmal auf einen älteren Eintrag in /tmp/flash/mod/modules, der irgendwelche merkwürdigen Parameter in der Abarbeitung von
Code:
if [ -r /tmp/flash/mod/modules ]; then
        grep -v "^ *#" /tmp/flash/mod/modules | while read -r module; do
                [ -n "$module" ] && modprobe ${module%.ko}
        done
fi
ergibt, weil die Konstruktion mit "${module%.ko}" nur ein ".ko" am Ende wegschneidet und da weder geprüft wird, ob ein passendes Kernel-Module existiert oder ob die Zeile syntaktisch richtig ist. Aber das klärt schon der erste Blick auf die o.a. Debug-Ausgabe von "modload".
 
Genauere Informationen zum WLAN stehen event. (kommt auf den Punkt an, wo es knallt) in der Datei /var/tmp/wlan_support.log oder /var/tmp/wlan_sanity.log ... letztere existiert m.W. nur, wenn der wland selbst ein Problem feststellt.

Code:
--BEGIN_SANITY_META--
severity: fatal
error: 0101
count: 5
--END_SANITY_META--

--BEGIN_WLAND_SUPPORT--
01:01:08: open
WLAND:[04093]:01:01.08/[68.50]:checking wland prerequisites...
WLAND:[04093]:01:01.08/[68.85]:derived config 'AP-only mode Dual', ID: 1 (0x00000000)
WLAND:[04093]:01:01.08/[68.92]:repeating_module_init:173: krextd lib available 0
WLAND:[04093]:01:01.09/[69.1]:cfg_hal_setup_eeprom: error opening /proc/sys/dev/ath/avm_ath_extensions/ eeprom_count (No such file or directory)
WLAND:[04093]:01:01.09/[69.1]:lib_hal_hardware_init:380: failed to create EEPROM device nodes
WLAND:[04093]:01:01.09/[69.1]:lib_hal_hardware_init: failed with status 0x80000001 (0x80000001)
WLAND:[04093]:01:01.09/[69.1]:cfg_mgr_event_handler_cb:1744: Hardware initialization failed with status 0x80000001
WLAND:[04093]:01:01.09/[69.27]:cfg_hal_handle_target_crash:3368: /proc/sys/dev/ath/avm_ath_extensions/tgt_crashed: failed
WLAND:[04093]:01:01.09/[69.27]:cfg_hal_handle_target_crash:3439: aborting with error: No such file or directory
WLAND:[04093]:01:01.09/[69.45]:cfg_hal_setup_eeprom: error opening /proc/sys/dev/ath/avm_ath_extensions/ eeprom_count (No such file or directory)

Code:
WLAND:[04093]:01:01.10/[70.63]:lib_hal_hardware_init:380: failed to create EEPROM device nodes
WLAND:[04093]:01:01.10/[70.63]:lib_hal_hardware_init: failed with status 0x80000001 (0x80000001)
WLAND:[04093]:01:01.10/[70.64]:cfg_mgr_event_handler_cb:1744: Hardware initialization failed with status 0x80000001
WLAND:[04093]:01:01.10/[70.66]:config_mgr_prepare_recovery:1598, WARNING: Explicit wland shutdown, reason: Maximum number of consecutive recoveries exceeded!
WLAND:[04093]:01:01.11/[71.42]:cfg_hal_handle_target_crash:3368: /proc/sys/dev/ath/avm_ath_extensions/tgt_crashed: failed
WLAND:[04093]:01:01.11/[71.42]:cfg_hal_handle_target_crash:3439: aborting with error: No such file or directory
WLAND:[04093]:01:01.11/[71.66]:cfg_hal_handle_target_crash:3368: /proc/sys/dev/ath/avm_ath_extensions/tgt_crashed: failed
WLAND:[04093]:01:01.11/[71.66]:cfg_hal_handle_target_crash:3439: aborting with error: No such file or directory
WLAND:[04093]:01:01.11/[71.66]:__event_mgr_unregister_ext_event_handler:540: Invalid event_fd '-2'
WLAND:[04093]:01:01.11/[71.66]:cfg_hal_get_ap_boot_mode:2648: invalid AP_BOOT_MODE mode 0x0
WLAND:[04093]:01:01.11/[71.78]:Unload 'libwlanrext'((nil))
WLAND:[04093]:01:01.11/[71.80]:util_deinit:28: ENTER

Code:
root@fritz:/var/mod/root# ls -la /proc/sys/dev/
dr-xr-xr-x    1 root     root             0 Jan  1 01:00 .
dr-xr-xr-x    1 root     root             0 Jan  1 01:00 ..
dr-xr-xr-x    1 root     root             0 Jan  1 01:06 scsi

sieht also ziemlich so aus wie dein im anderen Thread beschriebenes Verhalten bzgl. WLAN Problemen.

Starte doch mal bitte "sh -x /usr/bin/modload 2>&1 | tee /var/tmp/modload.debug" und poste den Teil der Ausgabe ab dem "echo -n 'Loading modules ... '" [...] Ich gehe allerdings davon aus, daß Du da keine Module getauscht hast (das gibt die Toolchain an der Stelle ja eigentlich nicht her) und daher die Module unterhalb von /lib/modules/3.10.73/kernel/fs/fat im "original"- und im "modified"-Zweig identisch sind, sonst braucht man gar nicht erst zu suchen. Ich weiß nicht, welche Pakete Freetz enthalten könnte, die eigene fat/vfat-Module brauchen - ist nicht mein Tisch.

Module habe ich tatsächlich nicht getauscht - aber die Ausgabe dürfte relativ sparsam sein:

Code:
root@fritz:/var/mod/root# sh -x /usr/bin/modload 2>&1 | tee /var/tmp/modload.debug
+ TMPFILE=/tmp/.load.tmp.5082
+ MODFILE=/var/flash/freetz
+ trap rm -f /tmp/.load.tmp.5082 EXIT
+ [ -d /tmp/flash -a  != force ]
+ exit 0
+ rm -f /tmp/.load.tmp.5082

mit force:

Code:
+ echo -n Loading modules ...
Loading modules ... + [ -e /lib/modules/3.10.73+/kernel/fs/fat/fat.ko /lib/modules/3.10.73/kernel/fs/fat/fat.ko ]
sh: /lib/modules/3.10.73/kernel/fs/fat/fat.ko: unknown operand
+ [ -e /lib/modules/3.10.73+/kernel/fs/fat/vfat.ko /lib/modules/3.10.73/kernel/fs/fat/vfat.ko ]
sh: /lib/modules/3.10.73/kernel/fs/fat/vfat.ko: unknown operand
+ [ -e /lib/modules/*/kernel/*/*/mbcache.ko ]
+ [ -e /lib/modules/*/kernel/*/*/ext2.ko ]
+ [ -e /lib/modules/*/kernel/*/*/jbd.ko ]
+ [ -e /lib/modules/*/kernel/*/*/ext3.ko ]
+ [ -e /lib/modules/*/kernel/*/*/crc16.ko ]
+ [ -e /lib/modules/*/kernel/*/*/jbd2.ko ]
+ [ -e /lib/modules/*/kernel/*/*/ext4.ko ]
+ [ -e /lib/modules/*/kernel/*/*/reiserfs.ko ]
+ [ -e /lib/modules/*/kernel/*/*/nls_utf8.ko ]
+ [ -e /lib/modules/*/kernel/*/*/hfsplus.ko ]
+ [ -e /lib/modules/*/kernel/*/*/ipv6.ko ]
+ [ -r /tmp/flash/mod/modules ]
+ echo done.
done.

Das dürfte an der wildcard und dem link in /lib/modules liegen

Code:
root@fritz:/var/mod/root# ls -la /lib/modules/
drwxr-xr-x    4 root     root           433 Dec 23  2015 .
drwxr-xr-x    5 root     root          9821 Dec 23  2015 ..
drwxr-xr-x    5 root     root           422 Dec 23  2015 3.10.73
lrwxrwxrwx    1 root     root             7 Dec 23  2015 3.10.73+ -> 3.10.73

Mehrfaches Laden eines Kernel-Modules stört eigentlich nicht, wird eben beim zweiten Mal einfach nicht geladen, "modprobe" liefert nicht einmal eine Fehlermeldung dabei. Ansonsten gibt es in der Busybox zwei Varianten beim Bau des "modprobe"-Applets - ich gehe mal davon aus, daß bei Dir "FREETZ_BUSYBOX_MODPROBE_SMALL" nicht gesetzt ist?

Code:
# FREETZ_BUSYBOX_MODPROBE_SMALL is not set

Was passiert denn nach einem Neustart, wenn Du von Hand "modprobe fat" und "modprobe vfat" (das würde eigentlich anhand der modules.dep fat.ko ebenfalls laden, wenn es direkt als erstes aufgerufen wird) noch einmal aufrufst?

Das laden der Module funktioniert - und anschließend funktioniert auch das mounten von /dev/sda1 ohne Probleme.

Wie sieht eigentlich die Ausgabe von "lsmod" aus? Vielleicht sind die notwendigen Module ja doch geladen und das Problem liegt am Ende an einer anderen Stelle?

Nach einem frischen reboot:
Code:
root@fritz:/var/mod/root# lsmod
Module                  Size  Used by    Tainted: P
userman_mod            86568  4
krtp                  150302  0
kdsldmod             1756448  9 userman_mod
ifxmips_ppa_datapath_vr9_e5   153187  0
dsl_vr9               309431  2
mei_vr9               183235  4 ifxmips_ppa_datapath_vr9_e5,dsl_vr9
usb_storage            51405  0
sd_mod                 41955  0
scsi_mod              139880  2 usb_storage,sd_mod
xhci_hcd              103848  0
usbcore               209264  2 usb_storage,xhci_hcd
usb_common              1678  1 usbcore
dect_io                12937  0
avm_dect              301928  1 dect_io
capi_codec            423837  0
isdn_fbox_fon5        826856  6 krtp
pcmlink               420223  4 avm_dect,capi_codec,isdn_fbox_fon5
Piglet_noemif          52760  0
rtc_avm                 5814  1 pcmlink
led_modul_Fritz_Box_HW185   106189  6

Nach dem laden der Module:
Code:
root@fritz:/var/mod/root# lsmod
Module                  Size  Used by    Tainted: P
vfat                   12211  0
fat                    68000  1 vfat
userman_mod            86568  4
krtp                  150302  0
kdsldmod             1756448  9 userman_mod
ifxmips_ppa_datapath_vr9_e5   153187  0
dsl_vr9               309431  2
mei_vr9               183235  4 ifxmips_ppa_datapath_vr9_e5,dsl_vr9
usb_storage            51405  0
sd_mod                 41955  0
scsi_mod              139880  2 usb_storage,sd_mod
xhci_hcd              103848  0
usbcore               209264  2 usb_storage,xhci_hcd
usb_common              1678  1 usbcore
dect_io                12937  0
avm_dect              301928  1 dect_io
capi_codec            423837  0
isdn_fbox_fon5        826856  6 krtp
pcmlink               420223  4 avm_dect,capi_codec,isdn_fbox_fon5
Piglet_noemif          52760  0
rtc_avm                 5814  1 pcmlink
led_modul_Fritz_Box_HW185   106189  6

Das mounten funktioniert wie gesagt nach dem manuellen laden der Module anschließend.
 
Zuletzt bearbeitet:
Dann stimmte ja wenigstens die Vermutung bzgl. des falschen Formats, auch wenn es schon bei der "exist"-Abfrage erfolgt.

Vielleicht sollte man in Freetz das Konstrukt "/lib/modules/*/kernel ..." durch "/lib/modules/$(uname -r)/kernel ..." ersetzen, dann ist das auch weg.

Das WLAN-Problem bei mir war offensichtlich tatsächlich identisch, wobei es bei mir eben auch mit dem originalen AVM-Image ohne jegliche Modifikation auftrat (irgendwann im Verlauf von 06.36 + bei 06.50) und dafür mit einer modifizierten 06.30 überhaupt nicht. Wenn das bei Dir jetzt bei identischen Kernel-Modulen (06.50 mit Freetz vs. 06.50 von AVM) ebenfalls auftritt, kann ich meine eingebildete Erklärung (daß das EEPROM anders genutzt/angesprochen wird bei unterschiedlichem Treiber wegen unterschiedlicher Kernel-Version) ja getrost auch vergessen - ich bin mal gespannt, wie Du das wegkriegst.
 
@er13/@vice_pres:
Im Prinzip kann dieses Laden von fat und vfat ohnehin ersatzlos entfallen, eigentlich für jedes Dateisystem, das mit "fs-name" in der modules.alias aufgeführt ist:
Code:
# grep "fs-" /lib/modules/$(uname -r)/modules.alias
alias fs-vfat vfat
alias fs-msdos msdos
alias fs-jffs2 jffs2

Der Kernel selbst kümmert sich beim Versuch, ein bis dato unbekanntes Dateisystem zu mounten, um das Laden der notwendigen Module:
Code:
struct file_system_type *get_fs_type(const char *name)
{
        struct file_system_type *fs;
        const char *dot = strchr(name, '.');
        int len = dot ? dot - name : strlen(name);

        fs = __get_fs_type(name, len);
        if (!fs && ([COLOR="#FF0000"]request_module("fs-%.*s", len, name)[/COLOR] == 0))
                fs = __get_fs_type(name, len);

        if (dot && fs && !(fs->fs_flags & FS_HAS_SUBTYPE)) {
                put_filesystem(fs);
                fs = NULL;
        }
        return fs;
}
(aus fs/filesystem.c)

Aus dem "request_module" wird irgendwann ein "call_modprobe" in kernel/kmod.c ... das war m.W. auch schon von Beginn an so bei 2.6, da war nur der "Umweg" über den "fs-irgendwas"-Alias noch nicht vorgesehen:
Code:
        if (!fs && (request_module("[COLOR="#FF0000"]%.*s[/COLOR]", len, name) == 0))
                fs = __get_fs_type(name, len);
AVM selbst hat das m.W. auch schon über Jahre so gehandhabt, daß da gar kein "modprobe" mehr vor einem Mount-Versuch stattfand - die laden auch nur die Device-Driver für sd_mod und storage.

Ich würde (als Vorschlag) hier in Freetz hingehen und die Liste der zu ladenden Module von allen Dateisystem-Treibern befreien (dann brauchen die auch keinen Platz im Hauptspeicher, solange sie nicht benötigt werden), wenn die Kernel-Version (uname -r) irgendwas ab 2.6 ist (wenn da noch Kernel < 2.6.28 dabei sind, kann man ja noch mal kontrollieren, ob ich mit > 2.6 recht habe).

Dann müßte man allerdings auch noch die notwendigen Alias-Einträge in der modules.alias für alle zusätzlichen Dateisystem-Typen erstellen, wenn Freetz solche hinzufügt (EDIT: bei 06.50 bzw. Kernel-Mainline 3, sonst braucht es den Alias ja nicht, dann muß der Name des Treibers dem Dateisystemtyp entsprechen).

Aber das wäre wohl die sauberste Lösung, da die Rückwärtskompatibilität auch zu 2.4 ja m.E. nicht "geschlachtet" werden soll (wenn das nicht auch da schon so war, so alte Quellen müßte ich erst suchen) - andererseits verstehe ich die Notwendigkeit, auch ungenutzte Dateisystem-Treiber schon mal im Voraus zu laden, nicht so richtig ... außer daß die dann schon in /proc/filesystems aufgeführt werden. Aber braucht das Freetz tatsächlich irgendwo?
 
Zuletzt bearbeitet:
Vielleicht sollte man in Freetz das Konstrukt "/lib/modules/*/kernel ..." durch "/lib/modules/$(uname -r)/kernel ..." ersetzen, dann ist das auch weg.
@alle: Könnte bitte jemand mit Zugriff auf eine AR7- bzw. eine OHIO-Box testen, was denn uname -r auf diesen liefert und inwieweit es mit den Zeilen 292 bzw. 293 aus config/avm/kernel.in korreliert? Danke!

@Peter: warum da so viele FS-Module gemodprobe't werden, kann ich nicht sagen - kannte die Stelle selbst bisher nicht. Im Allgemeinen finde ich es auch unsinnig (FS-)Module zu laden, ohne dass irgendein Datenträger mit dem entsprechenden Dateisystem-Typ angeschlossen wurde. Ich kann mir aber vorstellen, dass es "früher" nicht anders ging und diese Zeilen deswegen eingebaut wurden. Was an der Stelle "früher" genau bedeutet, kann ich selbst nicht sagen. Freetz unterstützt eigentlich nur Firmwares, die auf Kernel >= 2.6.x basieren. DS-Mod hat mal 2.4.x basierte unterstützt. Es ist durchaus möglich, dass diese Zeilen noch aus den Zeiten stammen (habe es noch nicht geprüft).
 
Ich habe gerade mal zum Spaß (parallel zur NFL) mit Freetz eine uClibc gebaut und nur mal die Symbole der libuClibc mit der originalen Lib von AVM verglichen ... da fehlen einige Funktionen in der Freetz-Variante
Danke Peter für Deine Analyse! Aus dieser sind r13516, r13517 und dieser Comment im Freetz-Trac entstanden (ich hoffe es wird möglich sein, die Trac-Tickets und damit auch die Comments zu migrieren).
 
@alle: Könnte bitte jemand mit Zugriff auf eine AR7- bzw. eine OHIO-Box testen, was denn uname -r auf diesen liefert und inwieweit es mit den Zeilen 292 bzw. 293 aus config/avm/kernel.in korreliert?

Stimmt zu 100% überein (7170 @04.88):
Code:
root@fritz:/var/mod/root# uname -r
2.6.13.1-ohio

Ich hätte auch noch irgendwo eine 7050 mit AR7 Sangam herumliegen aber warum sollte dort mit der aktuellsten Firmware (04.33) was anderes als "2.6.13.1-ar7" herauskommen?
 
Genau die beiden hatte ich auch aus dem Fundus geholt und wollte die mal updaten ... nun hat sich das erst mal wieder erledigt und sie werden wieder für die nächsten fünf Jahre eingemottet. Dabei habe ich sogar noch eine "NetXXL" gefunden ... gibt's für die schon die 06.50? :mrgreen:
 
Vielleicht wird ja auch im Rahmen der Freetz-Modifikationen irgendwann mal die Notwendigkeit abgeschafft, da überhaupt erst das ext2-Dateisystem durch das Entfernen der ersten 256 Byte aus filesystem.image herauszupuhlen.
...
bei Freetz könnte man mit leichten Umarbeitungen des Ablaufs in /var/install die Notwendigkeit des "dd"-Kommandos (und damit den zumindest kurzzeitig doppelten Platzbedarf im tmpfs, während altes und neues File gleichzeitig existieren) abschaffen.

Habe mal diese Idee von Dir aufgegriffen und in r13522 und in r13524 umgesetzt. Es ist allerdings nicht so tiefgreifend bzw. radikal wie Du es beschrieben hast. Ich bin bei der Umsetzung von dem Gedanken getrieben gewesen, ob es wirklich ein Freetz-eigenes .image-Format geben sollte oder doch lieber die Kompatibilität zu dem AVM-.image-Format beibehalten werden sollte. Freetz-eigenes Format würde einige Fallunterscheidungen in fwmod, fwdu und 090-var_install_fixes.sh nach sich ziehen (=> Entwicklungs-/Pflegeaufwand). Daher habe ich mich vorerst für die Kompatibilität entschieden und für das Memory-Footprint-Problem (welches bei einem bis auf Anschlag vollen Freetz-Image durchaus zu einem echten Problem werden kann) die in r13522 committete Lösung gefunden. Diese greift zwar nicht immer, sondern nur dann, wenn ein Freetz-Busybox auf der Box ist, dies sehe aber nicht als Problem, für die meisten Boxen gilt sowieso schon jetzt die (inoffizielle) Regel - zunächst ein Minimal-Image auf die Box bringen und erst danach ein bis auf Anschlag volles.

Edit:
Ansonsten habe ich "nur gute Erfahrungen" gemacht in Bezug auf die Kompatibilität
Ich gehe mal an der Stelle davon aus, dass Du damit ausschließlich statisch gelinkte Binaries meinst. Denn nach meinem Verständnis dürften sich die dynamisch gegen UCLIBC_HAS_XLOCALE=n-uClibc gelinkten Binaries (das wären die uClibc-Versionen, die in den kernel-2.6.x basierten Firmwares enthalten sind) unter einer UCLIBC_HAS_XLOCALE=y-uClibc (kernel-3.10.x basierte Firmwares) gar nicht ausführen lassen. Oder täusche ich mich diesbezüglich?
 
Zuletzt bearbeitet:
Hi, frohes Fest ...

Das hatte ich schon im Trac gesehen und war zugegebenermaßen sogar etwas erstaunt, daß Du da tatsächlich die Busybox extra gepatcht hast. Wenn Du an dieser Stelle einfach darauf baust, daß es ein losetup-Applet in der Freetz-Busybox geben muß/soll (den grundlegenden Unterschied zu der eigenen mount-Erweiterung sehe ich nicht), geht das mit den "Standard-Applets" der Busybox und Du hast einen Patch weniger, der Freetz-spezifisch ist. Ich vermute wegen dieser losetup-Möglichkeit nämlich, daß dieser Patch "upstream" eher auf wenig Gegenliebe stoßen wird - aber ich lasse mich überraschen.
 
Zuletzt bearbeitet:
er13 schrieb:
dass Du damit ausschließlich statisch gelinkte Binaries meinst
Ja, statisch gelinkte oder eben auch Binaries, die keine "locale"-Unterstützung brauchen. Eine Busybox funktionierte bei mir (im Rahmen dessen, was ich an Applets getestet habe) genauso problemlos, auch wenn sie dynamisch gelinkt war - offensichtlich waren ihr die locale-Funktionen egal.

Ansonsten funktioniert z.B. auch das "mksquashfs3" (bzw. "unsquashfs3") aus "modfs" (schon länger) problemlos in der dynamisch gelinkten Form unter 06.50 (bzw. den Laborversionen) - auch hier spielen die Abweichungen beim Namen der locale-Funktionen offensichtlich keine Rolle. Die V4-Versionen habe ich nur deshalb (komplett) statisch gelinkt, weil die liblzma ansonsten ohnehin gesondert beigelegt werden müßte. Wenn ich mich recht erinnere (ist schon etwas her), kam auch eine dynamische Variante der V4-Versionen (egal ob nur die liblzma statisch gelinkt war oder ob sogar alle Libs dynamisch geladen wurden) mit der Labor-Version klar.

Mein Fazit: Programme ohne locale-Unterstützung (da gehörte meine "bash" offensichtlich nicht dazu ;)) funktionieren wohl auch dynamisch, die zwei fehlenden Funktionen in der "normalen" uClibc von Freetz (rpmatch + mkostemp) machten wohl nur den Austausch der AVM-Version gegen die von Freetz zu einem Problem. Ich verstehe auch Deinen Ansatz, die Importe der anderen Binaries dahingehend zu untersuchen, ob sie (zur Link-Time) die anderen AVM-Funktionen (execvpe/posix_madvise) benötigen oder nicht ... bei diesen konkreten Funktionen ist das dynamische Nachladen über die libdl sicherlich eher unwahrscheinlich. Ansonsten bräuchte das m.E. zumindest noch die Suche über die gesamte Firmware nach dem Namen der Funktion, falls die eben doch irgendwo dynamisch nachgeladen werden soll. Wie weit Du das gemacht hast, weiß ich natürlich nicht ... aber auch der "Zusammenbau" von Namen zur Laufzeit ist ja nicht ganz von der Hand zu weisen. Ich mache das an einigen Stellen selbst so, wenn ich verschleiern will, welches Programm da auf welche Library angewiesen ist. Insofern "glaube" ich also - angesichts der besonderen Umstände bei der uClibc - auch daran, daß die Funktionen nicht genutzt werden - für eine "silent detection" irgendwelcher Änderungen wäre das aber immer noch ein mögliches Merkmal (auch wenn bei Freetz da natürlich noch wesentlich offensichtlichere Änderungen erkennbar sind, da gehen die Pferde manchmal mit mir durch).

BTW: Mir ist gerade aufgefallen, daß die Freetz-Toolchain für die 06.50 die Auswahl von davfs2 nicht zuläßt, weil das an "REPLACE_MODULES" gekoppelt ist. Hat sich das nicht ebenfalls überlebt, seitdem AVM selbst schon "fuse" in den Kernel einbaut? Welche anderen Module bräuchte denn davfs2 sonst noch? Meines Wissens keine ...
 
Der Kernel selbst kümmert sich beim Versuch, ein bis dato unbekanntes Dateisystem zu mounten, um das Laden der notwendigen Module:

Ok - verstanden habe ich es, wundert mich aber bei meinem Fehlerbild etwas: Wenn sich der Kernel darum kümmern sollte, warum kann ich dann händisch nicht mounten ohne vorher selber modprobe zu machen? Da das modprobe durch freetz ja gescheitert ist waren die module fat und vfat ja nicht da, manuelles mounten ging auch nicht ehe ich selber modprobe gemacht habe. Oder hat das vorgehen von Freetz die Automatik des Kernels da blockiert?
 
Oder hat das vorgehen von Freetz die Automatik des Kernels da blockiert?
Kann ich Dir nicht sagen, sind denn in Deiner "modules.alias" die von mir erwähnten Einträge für "fs-modulename" vorhanden? Die oben gezeigte "filesystem.c" beim 3er-Kernel verwendet ja eine andere Maske für die Module-Namen. Ob Freetz da selbst an der "modules.alias" dreht, weiß ich wieder mal nicht.

Das Problem des nicht funktionierenden WLANs habe ich inzwischen auf den Austausch der AVM-Busybox gegen eine eigene Version herunterbrechen können (zumindest bei mir liegt es daran).

Welches Applet dafür konkret zuständig ist (ich habe halt jede Menge zusätzliche Applets in der Busybox) oder ob es eine generelle Einstellung ist (z.B. "exec prefers applets" o.ä.), versuche ich noch zu ermitteln. Das ist allerdings ziemlich nervig, weil die BB in einem laufenden System nicht einfach ausgetauscht werden kann (auch nicht mit bind-Mounts) und da jeder neue Test ein neues SquashFS-Image inkl. Neustart braucht. Ich bin schon etwas genervt, aber im Moment geht es wenigstens noch in kleinen Schritten vorwärts - ansonsten könnte es schon helfen, wenn man dafür sorgt, daß beim Start des WLAN-Krams die originale Busybox verwendet wird und erst nachträglich auf eine eigene (vor der AVM-Version im Suchpfad) umgeschaltet wird. Das ist zwar nur die zweitbeste Lösung, aber als Workaround vielleicht eine Weile zu ertragen. Wenn ich das richtig gelesen habe, hat die 7390 mit Labor-Version ein ähnliches WLAN-Problem, wenn man ein Freetz-Image verwendet.
 
Zuletzt bearbeitet:
Das Problem des nicht funktionierenden WLANs habe ich inzwischen auf den Austausch der AVM-Busybox gegen eine eigene Version herunterbrechen können (zumindest bei mir liegt es daran).

Welches Applet dafür konkret zuständig ist (ich habe halt jede Menge zusätzliche Applets in der Busybox) oder ob es eine generelle Einstellung ist (z.B. "exec prefers applets" o.ä.), versuche ich noch zu ermitteln.
Ich weiß nicht, welchen Ansatz Du dafür verwendest. Ich habe mal für r13512 dieses einfache Skript verwendet. Mit dem kann man sich für jedes Applet die usage-Meldung ausgeben lassen und dann mittels eines einfachen Diffs feststellen, ob ein Applet gänzlich fehlt oder vielleicht nur ein paar Fancy-Parameter nicht unterstützt werden - zumindest diese zwei Ursachen lassen sich damit recht einfach ausschließen und zwar ohne dass man dabei drüber mounten oder neu starten muss.

Edit: wenn ich aber jetzt die busybox aus 7390.06.30 mit der aus 7390.06.36 vergleiche, dann sehe ich, was die Menge der Applets und die Menge derer Parameter angeht, keine Unterschiede zwischen den beiden.

Edit2: es wird vermutlich vconfig sein, wird aus /lib/libacfg.so aufgerufen.
Edit3: Edit2 ist Quatsch. vconfig ist mandatory in Freetz.
 
Zuletzt bearbeitet:
Ja, ich habe natürlich auch erst einmal mit dem Vergleich der beiden Busyboxen (allerdings bei der modifizierten eben auf der Basis meiner .config und nicht auf der von Freetz) begonnen und dabei festgestellt, daß die folgenden bisher von mir in der Busybox verbauten Applets auch in der AVM-Firmware (mit abweichenden Programmen) vorhanden sind:
Code:
base64
blkid
ftpd
ipcs
lsusb
nanddump
Das ist an vielen Stellen auch kein Problem, weil AVM-Skripte inzwischen schon "gelernt" haben und meistens direkt mit vollem Pfad solche Utilities aufrufen (dann kann da niemand über eine geänderte PATH-Variable andere Binaries oder Skripte ausführen lassen).

Was bei mir in der Busybox fehlte, aber bei AVM vorhanden war, waren das "fstrim"- und das "xz"-Applet ... alles andere war "zuviel" in meiner Version.

Ich weiß inzwischen auch schon, daß es "lsusb" nicht ist.

"base64" in der AVM-Version hat keine "usage"-Funktion (auch nicht in der "strings"-Ausgabe ;)), kennt aber sowohl das Kodieren ohne weitere Parameter als auch das Dekodieren mit "-d" - habe ich einfach mal probeweise rausgelassen aus der Busybox.

Der "ftpd" sollte hier keine Rolle spielen.

Die Anzeige von "ipcs" sieht beim Applet und bei der gesonderten Version von AVM zunächst mal identisch aus, ob da intern noch ein Aufruf mit anderen Parametern erfolgt:
Code:
# ipcs -h
ipcs provides information on ipc facilities for which you have read access.
Resource Specification:
        -m : shared_mem
        -q : messages
        -s : semaphores
        -a : all (default)
Output Format:
        -t : time
        -p : pid
        -c : creator
        -l : limits
        -u : summary
-i id [-s -q -m] : details on resource identified by id
usage : ipcs -asmq -tclup
        ipcs [-s -m -q] -i id
        ipcs -h for help.
weiß ich nicht ... habe ich einfach ebenso rausgeworfen wie "lsusb" aus der Busybox, weil AVM ja da auch ein anderes (Ausgabe-)Format erwartet.

Hat bis hier alles nicht geholfen, meine Busybox hat noch die folgenden Applets "mehr" als die von AVM:
Code:
# ./busybox_mod | sed -e "1,/^Current/d" | sed -e "s/,/\n/g" | sed -e "/^$/d" | sed -e "s/[ \t]*\(.*\)/\1/" >applets.mod
# ./busybox_org | sed -e "1,/^Current/d" | sed -e "s/,/\n/g" | sed -e "/^$/d" | sed -e "s/[ \t]*\(.*\)/\1/" >applets.org
# ./busybox_mod diff -Naur applets.org applets.mod | sed -n -e "s/^+\([^+].*\)/\1/p"
addgroup
adduser
awk
base64
bash
bbconfig
blockdev
chat
chattr
chpst
cksum
clear
comm
conspy
cpio
crond
crontab
cryptpw
cttyhack
dc
delgroup
deluser
depmod
devmem
dhcprelay
diff
dnsd
dos2unix
dpkg
dpkg-deb
dumpleases
envdir
envuidgid
expand
fatattr
fdisk
findfs
flash_eraseall
flash_lock
flash_unlock
flashcp
fold
fsck
fsync
ftpd
fuser
hd
hdparm
head
hexdump
hostid
httpd
ifenslave
inotifyd
install
ipcalc
klogd
last
less
logger
logread
losetup
lsattr
lspci
lzcat
lzma
makedevs
makemime
microcom
mkpasswd
mktemp
modinfo
mountpoint
nandwrite
nc
nmeter
ntpd
od
openvt
patch
pgrep
pipe_progress
pkill
pscan
rdate
rdev
reformime
rev
rfkill
rpm
rpm2cpio
run-parts
runsv
runsvdir
rx
sendmail
setlogcons
setsid
setuidgid
sha1sum
sha256sum
sha512sum
shuf
slattach
softlimit
split
start-stop-daemon
strings
stun-ip
sv
svlogd
syslogd
tac
taskset
tcpsvd
telnet
tftpd
timeout
traceroute6
tunctl
tune2fs
udhcpc
udhcpc6
udhcpd
udpsvd
unexpand
unix2dos
unlink
unlzma
users
usleep
uudecode
uuencode
watch
watchdog
which
who
yes
zcip
Mein Hauptproblem ist die Entscheidung, wie ich vorgehen will ... entweder von der AVM-Version aus nach und nach Applets hinzufügen oder aus meiner Stück für Stück weitere Applets entfernen.

Wobei ich gerade sehe, daß das "base64" immer noch drin ist. Da bin ich ggf. durcheinander geraten, weil ich verschiedene Buildroot-Umgebungen (mit unterschiedlichen Einstellungen für's Suchen beim dynamischen Laden) habe, damit die fertigen Binaries auch ohne irgendwelche "LD_*"-Environment-Settings funktionieren, wenn die zusätzlichen Bibliotheken z.B. unter meinem Standardpfad "/var/custom/lib" zu finden sind.

Ich will am Ende auf so wenige Zusätze wie möglich verzichten ... eigentlich hätte ich gerne ein einzelnes "schuldiges" Applet, das dann in der Busybox einen anderen Namen kriegt und trotzdem drin bleibt. :mrgreen:

Da ich eigentlich nichts ausgelassen habe (alle Applets auch mit "long options"), kann ich mir irgendwie nicht vorstellen, daß AVM da irgendetwas verwenden will, was meine Busybox an Optionen nicht hergibt bzw. wo die Optionen abweichen. Zuerst dachte ich eben auch an ein Applet, was anstelle eines gesonderten Programms aufgerufen wird, weil die Busybox ja die Option kennt, zuerst nach Applets zu schauen, bevor externe Programme gesucht werden.

Aber alle o.a. Programme sind "unknown commands", wie man leicht feststellen kann:
Code:
# ./busybox_mod diff -Naur applets.org applets.mod | sed -n -e "s/^+\([^+].*\)/\1/p" | wc -l
139
# ./busybox_mod diff -Naur applets.org applets.mod | sed -n -e "s/^+\([^+].*\)/\1/p" | while read cmd; do cmd 2>/dev/null; [ $? -eq 127 ] && echo "unknown" || echo "found"; done | grep unknown | wc -l
139
Das mit dem "Zählen" ist nur für hier zur Demo (die Liste ist eher länglich), ich habe schon auch auf stderr jeweils geprüft, daß es wirklich "unknown command" ist, was die Ursache für rc=127 angeht.

Da ich auch keine Symlinks auf die Busybox neu setzen lasse (was dann ja auch noch zum Aufruf eines Applets anstelle einer Angabe des Programms mit vollem Pfad führen könnte), kann das auch nicht die Ursache sein.

Wenn ich nichts finde, werde ich auch mal die "usage"-Screens vergleichen ... der nächste Schritt wird es wohl sein, daß ich mich dem Problem "von beiden Seiten" nähere. Also erst einmal eine Busybox mit genau denselben Applets wie bei AVM bauen und wenn schon die nicht arbeiten will, ist es eine der Optionen, die sich nicht in Form zusätzlicher Applets niederschlagen. Ich habe also erst einmal mit den wahrscheinlichsten Ursachen begonnen (falsches Programm wird aufgerufen), wenn es das nun offenbar nicht ist, dann stutze ich es als nächstes auf AVM zurecht und entscheide anhand des Ergebnisses, wo ich weiter suchen will. Wenn jemand das mal mit seiner Busybox-Konfiguration vergleichen will, ich hänge die meine mal hier an (für die oben verwendete "busybox_mod", die "busybox_org" ist das AVM-Original aus der 06.50 der 7490).

Meine "Erklärung" der Schwierigkeiten bezog sich also auch mehr auf das, was zu erwarten wäre als auf bisherige Versuche, wobei ich am Beginn noch so blauäugig war und wirklich jedes der nach meiner Ansicht wahrscheinlichsten Applets (lsusb, blkid, nanddump (hier war schon wieder unklar, wo das benutzt würde), base64) immer schön einzeln entfernt habe ... immer in der Hoffnung, es könnte in der nächsten Runde schon funktionieren.

Ob das bei der 7390 (wo Du ja verglichen hast) jetzt wirklich dasselbe Problem ist, weiß ich auch nicht ... nicht, daß das jetzt falsch verstanden wird. Aber die beschriebenen Symptome passen zu denen bei meiner 7490 und da das bei mir dann auch wieder auftrat, als ich die Box komplett angepaßt hatte, mußte ich halt erst einmal diverse andere Ursachen ausschließen und habe mit Libraries begonnen - auf die Busybox bin ich erst am Ende gekommen, weil ich eben in der neuen WLAN-Konfiguration (das frühere /etc/ath ist ja verschwunden, wenn auch schon etwas früher auf libacfg.so umgestellt wurde, aber bei der 06.50 ist es nun wirklich "weg") nicht darauf gekommen wäre, daß da externe Programme aufgerufen werden - jedenfalls nicht in nennenswertem Umfang.

Auch schlägt nach meiner Interpretation meiner Fehlermeldungen in der wland_support.log schon das Laden der Kernel-Module fehl (woher sollte sonst der passende Eintrag im procfs kommen, wenn nicht aus einem Treiber), daher suchte ich als erstes in der Richtung "insmod"/"modprobe" und da fand ich bei der ersten Prüfung der Busybox keinen nennenswerten Unterschied. Das Suchen über diverse Libs nach irgendwelchen Strings ist auch nicht so richtig prickelnd, weil einfach zu viele Fundstellen existieren, wenn man nach den doch eher gebräuchlichen Namen irgendwelcher Applets sucht ... einfach weil Symbole für Funktionen das meist auch im Namen haben.

Ich mache einfach Stück für Stück weiter und beobachte diesen Thread, falls jemand anderes das schuldige Applet vor mir findet. Wobei ich schon mal daran interessiert wäre, ob andere das Problem mit dem Ersetzen der Busybox genau so auch bestätigen können ... man braucht ja nur die Busybox aus build/original in fwmod_custom noch einmal vor dem Packen nach build/modified zu kopieren und ggf. die neue irgendwie umbenennen, wenn der Platz für beide reicht (bei der 7490 ja kein Problem).
 
Moins

Gedankenspiel: Geht auch eine zusätzliche busybox, die kein App der AVM busybox enthält :gruebel:
...dann dürften die von AVM benutzten Apps auch immer aus deren busybox geladen werden.
 
Ja und nein ... das hängt etwas damit zusammen, wie die Busybox intern arbeitet. In einem bestimmten Modus (den ich benutze) wird erst nach einem Applet gesucht, bevor nach einem externen Programm gefahndet wird. Dann braucht es in einer Busybox-Shell auch nicht für jedes Applet den passenden Link im Dateisystem ... d.h. man kann dann aus einer solchen Shell heraus z.B. auch das "less"-Kommando aufrufen, wenn es keinen Symlink dafür gibt. Das klappt aber eben nur innerhalb der Busybox mit der Shell (das wäre dann sicherlich die AVM-Version), für die Applets in einer weiteren Busybox (die könnte denselben Namen haben, solange sie woanders liegt) bräuchte man aus einer Shell der AVM-Version heraus aber trotzdem die Links. Da mache ich mir lieber die Arbeit und suche "den Schuldigen".

PS: Ich hatte schon die Hoffnung, mit der "verbose"-Option von AVM beim "dd"-Applet etwas gefunden zu haben, aber die gibt es in der busybox_org auch nicht.
 
Zuletzt bearbeitet:
OK, eine Abweichung die mir aufgefallen ist...
Die AVM busybox, bzw. der Interpreter sh/ash kennt: help
...das Kommando kennt meine BB (sh/ash) 1.21 nicht.
 

Statistik des Forums

Themen
246,347
Beiträge
2,250,583
Mitglieder
374,001
Neuestes Mitglied
curious2315
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.