Platz im Flash sparen (shared libs verkleinern)

Ghost

Neuer User
Mitglied seit
27 Apr 2005
Beiträge
77
Punkte für Reaktionen
0
Punkte
6
Hi,

ich hab mal was gebastelt, was für die Boxen mit wenig Flash interessant sein könnte.

Und zwar werden die shared libraries verkleinert. Unnötige Symbole (Funktionen / Variablen) werden dabei aus den libs entfernt. Mit hilfe von mklibs.py. Außerdem kümmert sich mklibs.py auch darum, dass nur die libs im Image landen, die auch wirklich benötigt werden.

mklibs.py benötigt zum verkleinern der shared libs die sog. _pic.a files. In den meisten fällen reicht es im jeweiligen .mk file der lib beim configure das bauen von den static libs anzuschalten (.a files sind static libs) und diese dann in /toolchain/build/gcc-4.2.0-uClibc-0.9.28/mipsel-linux-uclibc/lib zu kopieren. Und ggf. einen Link zu erstellen der dann mit _pic.a endet. Oder halt umbenennen.

Denke das sollte in den jeweiligen .mk files machbar sein. Vorhanden sind diese _pic files im ds26-15.2 für die uclibc libs. Ich hab selber bei mir dann noch für die libcrypto, libssl und liblzo diese erstellt. Interessant dürfte das halt hauptsächlich für die größeren Libs sein.

Die libs, für die kein _pic.a vorhanden ist, werden sofern benötigt von mklibs.py einfach in das destdir umkopiert.

Der Nachteil des ganzen ist dann allerdings, das man nicht mal eben dann noch irgendwelche Tools per ftp .. oder wget nachladen kann... weil ggf. mklibs die Funktionen aus den shared libs entfernt hat, die das jeweilige tool evtl braucht. Aber für die Boxen mit wenig Flash denke ich ist das allemal interessant.

Ich hab das ganze gemacht, weil ich mir mit dem aktuellen sp-to-fritz script für meinen T-Sinus W500V ein Image mit aktuellen Kernel gebaut hab. (aus dem letzten 7150 Image)

Da ich aber zusätzlich iptables und openvpn brauche hab ich das entstandene Image dann als Basis für den dsmod genommen. Da beim T-Sinus W500V aber 3MB vom Flash für den Anrufbeantworter abgezwackt werden(DS_KERNEL_MTD_SIZE=71) war das entstandene Image dann 435200 bytes zu groß.

Also der Reihe nach "Replace AVM web server by httpd", "Remove UPnP daemon", "Remove libtr069" ausgewählt.... dann war das Image aber immer noch 283648 bytes zu gross.

Naja und mit Hilfe von mklibs.py und meinem Umbau war das Image dann nur noch 4592640 bytes gross (max. 4653056). Da ist auch noch Platz für bftpd.. oder irgendwas anderes kleines. ;)

Nunja und wieder erwarten bootete die Box sogar direkt beim ersten Versuch noch und es scheint auch alles zu funktionieren.

Da ich mich allerdings mit dem dsmod nicht so dolle auskenne, ist das alles nen bissel gehackt ;) Vielleicht besteht ja Interesse von den dsmod Leuten das ordentlich einzubauen.

Ich hänge mal das diff mit nen paar Kommentaren an. Und mein etwas umgebautes mklibs.py .. wer interesse hat, kann das ja mal gegen das letzte mklibs.py diffen welches irgendwo im debian repository rumschwirrt.

Unabhängig davon scheint es aber wohl immer noch so, dass iptables mit dem 2.6.13.1er Kernel probleme macht. Ich hab nur iptable_filter iptable_contrack und iptable_SNAT geladen. Dieses brauche ich weil ich bei nen paar Paketen die ins VPN gehen die Source Adresse mit SNAT umpatchen muss. Nur rebootet die Box dann häufig einfach so neu ;(

Eventuell schaue ich mir mal die Kernel Sourcen an und schau mal, was AVM da so alles rumgepatcht hat. Eventuell hatte aber auch der Kernel 2.6.13 dieses Problem schon. Mal sehen....

cya
 

Anhänge

Hört sich interessant an, ich schaue mir das später mal an, Oliver sicher auch, könnte ich mir denken.

Was Iptables betrifft, kenne ich mich nicht aus, glaube mich aber zu erinnern, daß gerade ip_conntrack Probleme macht. Wenn hier jemand weiter wüßte und das stabilisieren könnte, wären bestimmt viele Leute erleichtert, denn von uns kennt sich keiner gut genug aus, um etwas zu finden.
 
Hi,

hab eben noch gesehen, dass in den avm sourcen ja auch die libosip sourcen dabei sind.

Wenn diese libs also alternativ auch damit gebaut werden und dann getauscht würden, dann könnte man auch diese shrinken mit mklibs.py.. weil dann _pic dateien verfügbar sind.. würde auch nochmal nen bisschen freien Speicher bringen.

Allerdings hab ich null plan, wie man das in den Mod einbaut ;) Ein .mk file ist dabei...

cya
 
Hi Ghost.

Kannst du mir sagen was da schief läuft? Ich hab keine Lust mehr...:confused:

MfG Oliver
 

Anhänge

Hi,

ich häng mal meine neue korregierte Version an.. ich hab noch nen paar Sachen kommentiert.. also es ist wichtig, dass die libs die mklibs.py bearbeiten soll nicht mehr im target path vorhanden sind.

Zusätzlich hab ich noch nach dem find was die restlichen executables sucht noch die restlichen shared libs gesucht.. also das Problem ist das mklibs.py am ende alle nötigen libs in den target path kopiert (alle in den selben.. in diesem fall jetzt /lib).

Ich gehe aber mal davon aus, wenn dort am ende auch die libs vom ctrlmgr und iptables liegen würden, dass iptables und der ctlmgr die dann auch nicht mehr finden.

Aber die sind eigentlich eh nicht so wichtig.. weil dafür haben wir eh keine sourcen (_pic files) so dass diese nicht verkleinert werden können.

Also lasse ich die von vornherein im target dir liegen.. so dass mklibs die dann als client für die restlichen libs ansieht.. und diese dann auch in den shrink Vorgang der restlichen libs einbezieht.. könnte ja sein, bzw ist sogar wahrscheinlich, dass diese libs auch aus der libc oder sonstigen libs symbole benötigen.

Hoffe es ist nun etwas klarer geworden, was mklibs tut ;)

Da du in deinem Versuch die libs nicht aus dem Target rauskopiert hast, hat mklibs einfach gar nichts gemacht.. so dass du halt alle libs komplett im Image hattest.


cu
 

Anhänge

Ich wollte halt diese unschöne Kopieraktion vermeiden. Aber wenn das nicht anders geht, dann gehts halt nicht anders. Ich geh jetzt aber erstmal eine Woche Ski fahren...

MfG Oliver
 
Kostenlos!

Statistik des Forums

Themen
247,205
Beiträge
2,263,753
Mitglieder
375,691
Neuestes Mitglied
Prozessionell