Die Firmware-Versionen für NOR- und NAND-Flash-Modelle (7390 ist NOR, 7362SL ist NAND) benutzen bis zur 06.35 unter anderem auch unterschiedlich effiziente Komprimierungsverfahren (ZIP vs. LZMA), daher kommt eine 7390 (bei praktisch identischem Funktions-Umfang, die Unterschiede dort sind fast zu vernachlässigen) auf ein kleineres komprimiertes Firmware-Image (wir reden hier vom SquashFS-Image für das rootFS, der Kernel ist davon unbeeinflußt).
Den "Ausbau" des nmbd mit Speichermangel zu begründen, ist und bleibt absolut nicht nachvollziehbar, ich habe das schon einige Male vorgerechnet und es gibt ja auch Erfahrungsberichte von Leuten, die den nmbd aus einer älteren Version (bis inkl. 06.20 ist er drin) in eine spätere Version einfach wieder eingebaut haben. Der Platz im Flash ist definitiv nicht das Problem, das zur "Entfernung" des nmbd führte bzw. deren Beibehaltung rechtfertigen sollte.
Ansonsten wüßte ich tatsächlich gerne, welchen funktionellen Unterschied (die ~80KB des nmbd drücken wir in den Skat) es geben soll ... dabei meine ich natürlich, welche Funktionen eine 7390 heute nicht hat (aus Speichermangel, nicht wegen technischer Unmöglichkeit, sie kann z.B. kein LTE benutzen ohne Stick, das kann die 7362SL aber auch nicht), die einer 7362SL zur Verfügung stehen. Das wird sich sicherlich künftig ändern, aber Stand heute ist das m.W. noch nicht eingetreten (bei der deutschen Firmware jedenfalls, bei der internationalen trickst AVM da mit den Sprachpaketen und dem "PLUGINS2"-Mechanismus bei der 7390 etwas).
Bei den NOR-Modellen ist m.W. überall max. 16 MB Flash vorhanden, da wird der Bootloader (0x20000 = 128KB), 2x TFFS für die Settings (je 0x80000 = 512 KB), 1x Kernel und 1x root-Filesystem (mit dynamischer Anpassung an die tatsächliche Größe des Kernels) abgelegt. Für Kernel+FS bleiben da also max. 0xEE0000 = 14,875 MB übrig, davon belegt der Kernel der 06.23 bei der 7390 (mit Padding) 0x152100 ~ 1,32 MB. Ein entpacktes Filesystem einer 7390 bringt es auf rund 75 MB, die (auch wegen der Eliminierung doppelter Files über Hash-Vergleiche) sich auf rund 13,4 MB "eindampfen" lassen, trotz der zwei zusätzlichen Brandings (otwo, ewetel), die aber eben wegen fast identischer Dateien über alle Brandings in der komprimierten Datei praktisch nur einmal enthalten sind.
Bei der 7490 mit Firmware 06.24 ist das root-Filesystem im ausgepackten Zustand sogar kleiner als bei der 7390 (ca. 63 MB, es fehlen eben zwei Brandings), wegen der ineffizienteren ZIP-Komprimierung (und noch anderer Faktoren, wie wir gleich sehen werden) wird das aber auch nur auf ca. 20,4 MB zusammengeschrumpft.
Dafür wird bei den NAND-Boxen der Flash-Speicher gleich anders partitioniert. Bootloader (0x40000 = 256 KB) und Settings (2x je 0x60000 = 384 KB) liegen dort in einem kleineren Serial-Flash (1 MB bei der 7490) und sowohl der Kernel als auch das Dateisystem (mit noch einem Loop mehr, der hier jetzt mal außer acht bleiben soll, um das nicht noch undurchsichtiger zu machen, der braucht ca. 1 MB zusätzlich) liegen jeweils in doppelter Ausführung in Partitionen mit festen Größen vor. Beim Kernel sind das je 0x400000 = 4MB und für das Filesystem sind das pro Partition sogar 48 MB. Dann kommt noch eine "config"-Partition von 0x200000 = 2 MB Größe dazu, die wird bei diesen Modellen unter /var/flash gemountet und enthält eigentlich nur die char-Device-Nodes für das TFFS. Das macht in der Summe dann für das System im NAND-Flash (2x 48 + 2x 4 + 2) 106 MB an Platzbedarf, je nach Speicherausbau des Gerätes bleibt dann ein kleiner (7362SL hat 128 MB NAND-Flash - 106 MB System = 22 MB) oder größerer Teil (7490 hat 512 MB - 106 MB = 406 MB) übrig, den das System unter dem Pfad /var/media/ftp als "internen Speicher" zur Verfügung stellt für das Speichern von Dateien des Benutzers.
Wenn man die "echten" Inhalte der Dateisysteme vergleichen will, muß man erst einmal die Duplikate eliminieren, denn diese spielen eben - wie oben erläutert - beim Umfang des resultierenden SquashFS-Images keine Rolle - sie zählen aber bei einem simplen "du" nach dem Entpacken trotzdem. Daher müßte man entweder die zusätzlichen Brandings der 7390 entfernen und/oder man rechnet einfach nur den realen Platzbedarf aller Dateien mit unterschiedlichen Hash-Werten zu einem "Gesamtverbrauch" zusammen.
Das ginge z.B. so, mit "doppelt gemoppeltem" Ausschluß von Dateien, einerseits alles mit "1und1", "otwo" oder "ewetel" als Pfad-Bestandteil und andererseits noch einmal alle Dateien mit demselben SHA1-Hash:
Code:
find . -type f -exec sha1sum '{}' \; | grep -v "/\(otwo\|ewetel\|1und1\)/" | sort | sed -e '$!N;/^\([0-9a-f]*\) \(.*\)\n\1 .*$/!P;D' | sed -e 's#[0-9a-f]* *\./\(.*\)#size=$(( $size+$(stat -c %s "\1") ))#' -e '1isize=0' -e '$aecho $size' | sh
Braucht ein wenig, für eine 7490 (06.23) ergibt das 49113809 Byte und für eine 7390 (auch 06.23) nur noch 41422440 Byte.
Da sind also bei der 7490 rd. 7,34 MB (49113809 - 41422440) mehr in der unkomprimierten Struktur vorhanden ... wo "verstecken" die sich denn nun?
Fangen wir erst einmal mit einer Zählung an:
Code:
7390$ find . -type f -exec sha1sum '{}' \; | grep -v "/\(otwo\|ewetel\|1und1\)/" | sort | sed -e '$!N;/^\([0-9a-f]*\) \(.*\)\n\1 .*$/!P;D' | sed -e 's#[0-9a-f]* *\./\(.*\)#\1#' | sort >~/7390.files
7490$ find . -type f -exec sha1sum '{}' \; | grep -v "/\(otwo\|ewetel\|1und1\)/" | sort | sed -e '$!N;/^\([0-9a-f]*\) \(.*\)\n\1 .*$/!P;D' | sed -e 's#[0-9a-f]* *\./\(.*\)#\1#' | sort >~/7490.files
wc -l ~/7390.files ~/7490.files
1782 7390.files
1826 7490.files
Die 7490 hat also 1826 - 1782 = 44 (einzigartige!) Dateien mehr im Image. Welche sind das? Wir haben ja schon eine sortierte Liste und die können wir jetzt vergleichen. Das einzige Problem ist es noch, daß dort die Kernel-Versionen und die Verzeichnisse mit den Standard-Einstellungen unterschiedliche Pfade haben, die ein "diff"-Kommando nicht ausgleichen kann. Also passen wir die Listen noch etwas an:
Code:
~$ sed -e 's/2.6.32.61/kernelversion/' -e 's/Fritz_Box_HW185/CONFIGPROD/' ~/7490.files >~/7490.diff_in
~$ sed -e 's/2.6.28.10/kernelversion/' -e 's/Fritz_Box_7390/CONFIGPROD/' ~/7390.files >~/7390.diff_in
~$ diff -u ~/7390.diff_in ~/7490.diff_in | grep "^\(\+\|\-\).*"
--- 7390.diff_in
+++ 7490.diff_in
+bin/bntest
+bin/findmnt
+bin/lsblk
+bin/lsof
+bin/more
+bin/mountpoint
-bin/set_modulemem
+bin/supportdata.avmnet
+bin/wdctl
-etc/adslonly.annexa.conf
-etc/adslonly.annexb.conf
+etc/ath/hal_run_wlanscript
-etc/ewetel_ca.pem
-etc/ewetel_multibox_ssl_cert.pem
-etc/ewetel_multibox_ssl_key.pem
+etc/dsl/diagnostics/DIAG_VR9_ADSL.txt
+etc/dsl/diagnostics/DIAG_VR9_VDSL.txt
+etc/dsl/diagnostics/dsl_echotest.sh
+etc/dsl/helping/get_xtse_bytes.sh
+etc/dsl/notify/dsl_notify.sh
-etc/init.d/E05-basemodules
-etc/init.d/e17-isdn
+etc/init.d/e40-dsl
-etc/init.d/rc.iksdsl.sh
+etc/init.d/S11-piglet
-etc/init.d/S17-isdn
+etc/init.d/S17-capi
-etc/init.d/S40-swap.sh
+etc/.target_info
+etc/udev/rules.d/60-persistent-input.rules
+etc/udev/rules.d/60-persistent-serial.rules
+etc/udev/rules.d/75-persistent-net-generator.rules
+etc/udev/rules.d/79-fstab_import.rules
-etc/vdsl2only.annexa.conf
-etc/vdsl2only.annexb.conf
-etc/vdsl.annexa.conf
-etc/vdsl.annexb.conf
+lib/firmware/ath_tgt_fw1.fw
+lib/firmware/ath_tgt_fw2.fw
+lib/firmware/xhcifw.mem
+lib/libacfg.so
+lib/libceltcodec.so.1.0.0
+lib/libdslfwsymread.so.1.0.0
+lib/libFLAC.so.8.2.0
+lib/libmount.so.1.1.0
+lib/libnotify_avmnet.so.0.1
+lib/liboamapi.so
+lib/libogg.so.1.3.1
+lib/libvorbisidec.so.1.2.1
-lib/modules/kernelversion/kernel/drivers/atm/atmdriver_lkm.ko
-lib/modules/kernelversion/kernel/drivers/bmedriver/bmedrv.ko
+lib/modules/kernelversion/kernel/drivers/dsl/dsl_vr9.ko
-lib/modules/kernelversion/kernel/drivers/net/dummy.ko
-lib/modules/kernelversion/kernel/drivers/net/mii.ko
+lib/modules/kernelversion/kernel/drivers/mei/mei_vr9.ko
+lib/modules/kernelversion/kernel/drivers/mtd/devices/mtdram.ko
+lib/modules/kernelversion/kernel/drivers/net/avm_cpmac/switch/ifx/common/ifx_ppa_mini_qos.ko
+lib/modules/kernelversion/kernel/drivers/net/avm_cpmac/switch/ifx/common/ifx_ppa_mini_sessions.ko
+lib/modules/kernelversion/kernel/drivers/net/avm_cpmac/switch/ifx/vr9/ifxmips_ppa_datapath_vr9_a5.ko
+lib/modules/kernelversion/kernel/drivers/net/avm_cpmac/switch/ifx/vr9/ifxmips_ppa_datapath_vr9_e5.ko
+lib/modules/kernelversion/kernel/drivers/net/avm_cpmac/switch/ifx/vr9/ifxmips_ppa_hal_vr9_a5.ko
+lib/modules/kernelversion/kernel/drivers/net/avm_cpmac/switch/ifx/vr9/ifxmips_ppa_hal_vr9_e5.ko
-lib/modules/kernelversion/kernel/drivers/rtc/rtc-core.ko
+lib/modules/kernelversion/kernel/drivers/scsi/scsi_wait_scan.ko
-lib/modules/kernelversion/kernel/drivers/usb/host/ehci-hcd.ko
-lib/modules/kernelversion/kernel/drivers/usb/host/ohci-hcd.ko
+lib/modules/kernelversion/kernel/drivers/usb/host/xhci.ko
+lib/modules/kernelversion/kernel/drivers/usb/serial/cp210x.ko
-lib/modules/kernelversion/kernel/drivers/vdsldriver/vdsldriver_lkm.ko
-lib/modules/kernelversion/kernel/fs/nls/nls_utf8.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/ap_code/lib/fusivlib_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/acl_ap/aclap_driver_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/ap2ap/ap2ap_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/bm/bmdriver_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/ethdriver/ethdriver_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/ethdriver/sysKCode_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/opensrc/opensrc_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/peri_ap/periap_driver_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/spi/spi_driver_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/switch/icplus/ip175c_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/switch/icplus/ip175d_lkm.ko
-lib/modules/kernelversion/kernel/fusiv_src/kernel/drivers/timerlib/timers_lkm.ko
+lib/modules/kernelversion/kernel/lib/crc-ccitt.ko
+lib/modules/kernelversion/kernel/lib/crc-itu-t.ko
+lib/modules/kernelversion/kernel/lib/libcrc32c.ko
-lib/modules/kernelversion/kernel/net/avm_pa/avm_pa_fusiv.ko
-lib/modules/kernelversion/kernel/net/sched/sch_atm.ko
-lib/modules/kernelversion/net/asf.ko
-lib/modules/kernelversion/net/ath_dev.ko
-lib/modules/kernelversion/net/ath_dfs.ko
-lib/modules/kernelversion/net/ath_hal.ko
-lib/modules/kernelversion/net/ath_pktlog.ko
-lib/modules/kernelversion/net/ath_rate_atheros.ko
-lib/modules/kernelversion/net/ath_spectral.ko
-lib/modules/kernelversion/net/umac.ko
+lib/modules/kernelversion/offload/atd.ko
+lib/modules/kernelversion/offload/athlogger.ko
+lib/modules/kernelversion/offload/fwd.ko
+lib/modules/kernelversion/offload/hif_gmac.ko
+lib/modules/kernelversion/offload/hif_type
-lib/modules/adsp1_firmware.bin
-lib/modules/bitfile.bit
-lib/modules/dectfw_firstlevel_488.hex
-lib/modules/dectfw_secondlevel_488.hex
+lib/modules/bitfile_isdn.bit
+lib/modules/bitfile_pots.bit
+lib/modules/dectfw_firstlevel_441.hex
+lib/modules/dectfw_secondlevel_441.hex
+lib/modules/dsp_vr9/release-vr9-A-dsl.bin.bsdiff
+lib/modules/dsp_vr9/release-vr9-A-dsl.bin.md5sum
+lib/modules/dsp_vr9/release-vr9-B-dsl.bin.bsdiff
+lib/modules/dsp_vr9/release-vr9-B-dsl.bin.md5sum
+lib/modules/dsp_vr9/vr9-A-adsl.api.syms
+lib/modules/dsp_vr9/vr9-A-dsl.bin.bsdiff
+lib/modules/dsp_vr9/vr9-A-dsl.bin.md5sum
+lib/modules/dsp_vr9/vr9-B-adsl.api.syms
+lib/modules/dsp_vr9/vr9-B-calibrate.bin
+lib/modules/dsp_vr9/vr9-B-dsl.bin
+lib/modules/dsp_vr9/vr9-vdsl.api.syms
-lib/modules/release-Vx180Code.bin.bsdiff
-lib/modules/release-Vx180Code.bin.md5sum
-lib/modules/Vx180Code.bin.gz
-lib/modules/Vx180Code-calibrate.bin
+lib/udev/collect
+lib/udev/firmware
+lib/udev/fstab_import
+lib/udev/path_id
+lib/udev/rule_generator.functions
+lib/udev/scsi_id
+lib/udev/write_net_rules
+sbin/byp_cli
+sbin/chcpu
+sbin/ethtool
+sbin/losetup
+sbin/mkfs
+sbin/mkswap
+sbin/nmbd
+sbin/notify_avmnet
-sbin/sysutil
+sbin/swapoff
+sbin/swapon
+sbin/update_kernel
+usr/bin/dhrystone
+usr/bin/ncurses5-config
-usr/bin/profile
+usr/bin/renice
+usr/bin/strace-log-merge
-usr/bin/vdsl
-usr/bin/vdsld
+usr/sbin/dsl_control
+usr/sbin/dsl_fw_sym_reader
+usr/sbin/dsl_pipe
+usr/sbin/oamctl
+usr/sbin/oamd
+usr/www/avm/css/default/images/dect_avm_bob_hg_icon.png
+usr/www/avm/css/default/images/dect_avm_c3_icon.png
+usr/www/avm/css/default/images/dect_avm_c4_icon.png
+usr/www/avm/css/default/images/dect_avm_cati_hg_icon.png
+usr/www/avm/css/default/images/dect_avm_hg_icon.png
+usr/www/avm/css/default/images/dect_avm_m2_hg_icon.png
-usr/www/avm/css/default/images/dect_other_hg_icon_small.png
+usr/www/avm/css/default/images/dect_other_hg_icon.png
Im Prinzip befinden sich in der o.a. diff-Liste nur Dateien, die auf dem Unterschied zwischen den Architekturen der Boxen basieren. Ein paar wenige (eher unbedeutende) Utilities und viele unterschiedliche Treiber ... aber am Ende von der Funktion her eigentlich nur einige zusätzliche Codecs und ein paar Bilder von DECT-Geräten mehr in der 7490, nichts wirklich Weltbewegendes. Ich nehme jedenfalls an, daß OAM (ATM-Management) bei der 7390 auch vorhanden ist und sich irgendwo in einem anderen Treiber versteckt - das ist noch ein augenfälliger Unterschied zwischen den Modellen.
Die Differenz im Speicherbedarf ergibt sich auch nicht einfach so an einer bestimmten Stelle oder Funktion, das läppert sich so zusammen ... z.B. ist die /usr/share/ctlmgr/libwlan.so der 7490 112 KB größer als die der 7390. Auch der Standardinhalt des NAND-Flashs (/etc/internal_memory_default_de) ist bei der 7490 750 KB größer als bei der 7390 ... das sind aber am Ende alles keine richtigen funktionellen Unterschiede als "bewußte Abstriche", was die 7390 da in Kauf nehmen muß.
Das wirklich Witzige (bis Unschöne) an der 7490 ist, daß selbst beim Eliminieren aller Duplikate der resultierende Inhalt des root-FS nicht einfach unkomprimiert in die vorhandenen 48 MB für das Dateisystem passen würde, denn da kommt bei der realen Speicherung einer Datei natürlich noch entsprechender Overhead aus der Differenz zwischen der Größe einer Datei und der Blockgröße (zumindest im letzten Block der Datei) zusammen und damit benötigt eine Datei i.d.R. mehr Platz als aus der Nettogröße der Datei abzuleiten wäre. Das verhindert die direkte Speicherung des root-FS in der Partition und da kommt dann die weiter vorne angesprochene zusätzliche Ebene ins Spiel.
Aber den NAND-Flash könnte AVM wohl tatsächlich besser nutzen ... der große Vorteil ist es eben, daß dort ziemlich problemlos geschrieben werden kann. Ich habe das mal genutzt, um Teile des root-FS, die einem relativ häufigen Wandel unterliegen (z.B. die sicherheitsrelevanten SSL-Libraries, deren "Fluktuation" definitiv höher ist als die anderer "Pakete"), dort abzulegen und vom "normalen root-FS" dann dorthin zu verlinken. Das yaffs2-FS ist zur Laufzeit des Systems über den Pfad /wrapper problemlos zu erreichen, wenn man also in einem SquashFS-Image einige Dateien zwecks problemloser Änderung nicht unterbringen will, kann man die ohne weiteres im yaffs2-FS ablegen, wo sie sich problemlos beschreiben lassen (nach remount). Das ist immer noch eine andere Stelle als /var/media/ftp, wo relativ unbesorgt bei einem Mount-Fehler auch mal neu formatiert wird und - das ist für mich entscheidend - das funktioniert "pro System" im Flash, während /var/media/ftp ja zwischen den Systemen geshared wird.
Das hat zwar am Schluß nur noch wenig mit der Eingangsfrage zu tun, aber es verdeutlicht vielleicht, daß eine NAND-Box erheblich mehr Potential für eigene Modifikationen bietet und - meine Hoffnung - irgendwann wird AVM das sicherlich auch mal effektiver nutzen und mit schnelleren Sicherheitsupdates (z.B. nach dem o.a. Vorschlag, das geht auf Wunsch auch automatisch, wenn man es richtig implementiert) bei den NAND-Modellen um die Ecke kommen. Da das bei den NOR-Modellen eher schwierig (bis unwahrscheinlich) ist, würde ich jederzeit ein NAND-Modell (selbst mit kleinerem Flash) einem NOR-Modell vorziehen.
Über den Leistungsunterschied der Prozessoren (7390 - single core, 7362SL (m.W.) dual core) hat auch noch niemand geschrieben ... Ok, das ist inzwischen schon aufgetaucht ...