Busybox Minimalkonfiguration

danisahne

Aktives Mitglied
Mitglied seit
30 Jul 2005
Beiträge
1,493
Punkte für Reaktionen
0
Punkte
0
Habe mir nun die Sourcen von Busybox 1.00 heruntergeladen und möchte mir eine eigene Busybox für die Fritz!box fon WLAN 7050 compilieren. Was sind denn die Minimalanforderungen an die Busybox, damit ich die Busybox von Firmware 14.03.71 mit meiner eigenen ersetzen kann?

Alternativ hab ich auch schon versucht, die Busybox in Enrik's buildroot unter build_mipsel/busybox-1.00/ mit 'make menuconfig' um Features zu erweitern und zu compilieren. Hätte gerne auch sha1, aber der Compiler bricht dann mit folgender Fehlermeldung ab:

applets.a(applets.o)(.data+0x334): undefined reference to `sha1sum_main'

Bin mir auch nicht sicher, ob ich die Busybox in Enrik's buildroot (so wie sie jetzt konfiguriert ist) überhaupt ohne weitere Kernelmodule sinnvoll nutzen kann (NFS bräuchte ich z.B. nicht).

Den Kernel würde ich nur ungern anfassen. Meine Idee ist folgende (die ja nicht neu ist):
Die Firmware soll minimal modifiziert werden und dann von einem Webserver nachladen. Um das ganze abzusichern, würde ich gerne die "Echtheit" der heruntergeladenen Packete mit md5 und sha1 Hashes überprüfen.

Ich brauche also lediglich zusätzlich zu den aktuellen Firmwarefunktionen md5sum, sha1sum, uuencode und uudecode (letztere um Konfigurationsdateien in der debug.cfg zu speichern). Außer der Busybox und ein paar zusätzlichen Skripten soll die Firmware original bleiben.

Weiß jemand einen schönen Ausgangspunkt für meine Busybox?
 
Hi.
Hast du "make clean" nach dem ändern der Konfiguration gemacht?

MfG Oliver
 
Ach danke, klar. Dachte, dass er mir die .o Dateien nach der Änderung der Konfiguration neu erzeugt. Ist die Konfiguration mit den oben genannten zusätzlichen Optionen und ohne "Support mounting NFS file systems" auf der Fritzbox jetzt lauffähig?

Zusammen mit 'libgcc_s.so.1' hab ich sie schon erfolgreich in /var/tmp/ getestet.

Ich hab halt immer die Bedenken, dass ich vielleicht eine essentielle Funktion vergessen hab, so dass meine Fritz!box danach nicht mehr bootet.

edit: das ist in meiner busybox:

Code:
Currently defined functions:
        [, arping, ash, awk, basename, busybox, cat, chmod, clear, cmp,
        cp, cut, date, dd, df, dmesg, du, echo, egrep, env, expr, false,
        fgrep, find, free, getcons, grep, gunzip, gzip, head, hostname,
        id, ifconfig, init, insmod, kill, killall, klogd, ln, logger,
        login, logread, ls, lsmod, md5sum, mkdir, mkfifo, mknod, modprobe,
        more, mount, mv, netstat, od, pidof, ping, ping6, ps, pwd, realpath,
        reboot, reset, rm, rmdir, rmmod, route, sed, sh, sha1sum, sleep,
        sort, strings, stty, syslogd, tail, tar, tee, telnetd, test, tftp,
        time, touch, tr, traceroute, true, umount, uname, uniq, uptime,
        usleep, uudecode, uuencode, vi, wc, wget, which, xargs, yes, zcat

edit2: Mir ist aufgefallen, dass zumindest ip, nslookup und sync nicht drinnen sind, aber auf der Fritz!box schon. Hängt das vielleicht auch damit zusammen, dass ich beim erstellen des buildroot alle packages bis auf busybox deaktiviert habe? Wollte primär nur den Compiler aus dem buildroot.
 
Hi.
Kannst ja mal mit meiner Konfiguration probieren.
Dann brauchst du auch die libgcc_s.so.1 nicht...

MfG Oliver
 

Anhänge

Kann es leider erst nächstes Wochenende ausprobieren, aber ich nehme an, dass du die libgcc_s.so.1 statisch gelinkt hast. Ich werd sie dynamisch linken, da ich noch andere Programme kompilieren werde, die den Code dann teilen können. Werde also libgcc_s.so.1 einfach nach /lib/libgcc_s.so.1 in die Firmware reinpacken.

Danke für deine Config. Diese läuft bei dir auf der Box? Dann werd ich da nur noch meine gewünschten Features reinpacken.

Ist eigentlich jemand an meinem Firmwaremod interessiert, wenn er denn fertig sein sollte?

Folgendes ist geplant (weil ich es in der Kombination noch nicht gesehen hab):

* Alle orginalen Firmewarefunktionen bleiben erhalten (kein WLAN entfernt oder so)
* Nachladen von einem Webserver
* Rudimentäres selbstgebasteltes Packetmanagement System, das mittels md5 und sha1 die "Echtheit" der nachgeladenen Packete überprüft (ich halte es für ein arges Sicherheitsrisiko auf eine Firewall,etc Code von nicht vertrauenswürdiger Stelle unverschlüsselt nachzuladen; dass mir niemand anders Code unterschiebt, sollte zumindest überprüfen werden, ob der nachgeladene Code nicht verändert wurde)
* Minimale Änderung an der Firmware: Neue Busybox, libgcc und Packetmanagement-Skripte
* An alle, die sich mit den Lizenzen auskennen: Den Firmwaremod darf ich ja nicht als Binary veröffentlichen, aber die Packete, die nachgeladen werden darf ich doch schon ohne Probleme unter der GPL mit Source und Binary zum Download anbieten, oder? Das macht es für Leute einfacher, die nicht so viel Erfahrung mit der Materie haben, da sie nur einmal die Firmware modden müssen.

Der Grundgedanke ist, alle Funktionen der Orginalfirmware von AVM zu erhalten und nicht jedesmal bei einer Änderung am Mod flashen zu müssen. Wie ist die Resonanz? Ansonsten programmier ich es halt für mich alleine ;)
 
Wo finde ich denn das etherwake Patch für busybox-1.00 von haveaniceday?

getcons habe ich mit dem Patch 100-busybox-getcons.patch aus Enriks buildroot eingefügt. Mit der oben geposteten Konfiguration bekomme ich nach dem getcons Patch noch folgende Warnung:

Code:
> make menuconfig
#
# using defaults found in .config
#
.config:310: trying to assign nonexistent symbol CONFIG_ETHERWAKE

edit:
Habe für ether-wake nun aus dem daily snapshot selbst einen Patch erstellt, der ether-wake in busybox-1.00 reinpatched. Soweit auch alles klar. Wenn ich die neue Busybox per tftp nach /var/tmp lade, dann läßt sie sich auch schon ausführen (dynamisch gegen /bin/libgcc_s.so.1 gelinkt, das ich schon mal testweise in meine Firmware reinkopiert habe).

Das Problem: Natürlich ist sie zu groß für filesystem.image. Bis jetzt habe ich aus dem orginal Firmware noch nichts herausgeschmissen und möchte auch an Funktionalität nichts wegnehmen. Was kann man einsparen? Und viel eher, was kann ich bei meiner busybox weglassen:

Code:
Currently defined functions:
        [, arping, ash, awk, basename, bunzip2, busybox, bzcat, cat, chmod,
        chroot, clear, cmp, cp, crond, crontab, cut, date, dd, df, dirname,
        dmesg, du, echo, egrep, env, ether-wake, expr, false, fgrep, find,
        free, ftpget, ftpput, getcons, getopt, grep, gunzip, gzip, head,
        hexdump, hostid, hostname, httpd, id, ifconfig, init, insmod,
        install, ip, kill, killall, klogd, ln, logger, login, logname,
        logread, ls, lsmod, md5sum, mkdir, mkfifo, mknod, modprobe, more,
        mount, mv, nc, netstat, nslookup, od, passwd, pidof, ping, pivot_root,
        printf, ps, pwd, rdate, realpath, reboot, reset, rm, rmdir, rmmod,
        route, sed, sh, sha1sum, sleep, sort, strings, stty, sysctl, syslogd,
        tail, tar, tee, telnetd, test, tftp, time, top, touch, tr, traceroute,
        true, umount, uname, uniq, unzip, uptime, usleep, uudecode, uuencode,
        vconfig, vi, wc, wget, which, xargs, yes, zcat

Welches Applet braucht denn viel Platz?

Unbedingt behalten möchte ich wget, md5sum, sha1sum, httpd, uudecode, uuencode und ether-wake.

Gehört ftpget und ftpput zu tftp?

Ist denn pivot_root nicht der Mechanismus um root umzumounten? Da ich kein nfs mit drinnen hab, kann ich pivot_root doch auch weglassen, oder?

Der Standardkernel von AVM kann doch kein VLAN oder? Also ist in dem Fall vconfig doch überflüssig?

Was ist eigentlich hostid?

install kann ich mir doch auch sparen, oder?

Der Rest sieht alles sehr sinnvoll aus, finde ich. Danke schon mal im Vorraus, wenn noch bis hier gelesen hast ;) Meinungen?
 
Wenn ich die erwähnten Applets weglasse, dann ändert sich die Größe der busybox nur unwesentlich. Ich bleib bei ca 752 KB stecken, die busybox in haveaniceday's mod-0.57 ist aber nur 624 KB groß und das obwohl ich keinen nennenswerten Unterschied finden kann. Weiß jemand warum mein Binary so groß ist?
 
bringt ein "strip busybox" etwas? [entfernt debug-code]
 
Leider nicht, das hab ich heute noch versucht. Aber danke für den Hinweis.
 
Hi.
Die größe hängt vom verwendeten gcc ab. Grob: Je neuer, desto kleiner...
Wobei sich das wieder relativiert, da die kleineren Binaries schlechter komprimierbar sind.
Der Befehl zum strippen wäre: mipsel-linux-strip
Ob das Strippen geklappt hat, siehst du mit: file binary

MfG Oliver
 
Busybox binary

hi, kann mir mal jemand ein busybox binary uppen was uudecode und uuencode enthält.
habe derzeit ein image von the construct welches busybox nachlädt. darin ist aber keine uu funktion enthalten.
 
Kostenlos!

Statistik des Forums

Themen
248,212
Beiträge
2,284,319
Mitglieder
377,463
Neuestes Mitglied
mehlm