Kompilieren des ds-mod unter Mac OS X

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
687
Punkte für Reaktionen
4
Punkte
18
EDIT: abgetrennt vom danisahne-mod Thread von danisahne. Bitte bei Problemen einen eigenen Thread öffnen.

Hallo zusammen,

[edit]Um das Ergebnis vorwegzunehmen: Es geht (s. Posting 15) Ich brauche aber noch etwas Zeit, bis ich eine benutzerfreundliche Lösung vorstellen kann.[/edit]
[edit2]getestet mit 0.2.5 und 0.2.6[/edit2]

Nachdem es gestern unter Suse geklappt hatte, wollte ich heute mal versuchen, ob man den ds-mod auch unter Mac OS X kompilieren kann. Auch hier hatte ich zunächst ein paar kleinere Probleme, die ich selbst lösen konnte.
Aktueller Stand ist der, dass 'make menuconfig' trotz etlicher warnings ("warning: pointer targets in passing argument 1 of 'xyz' differ in signedness") erfolgreich durchläuft.
'make' läuft dann ne ganze Weile und bricht schließlich mit folgendem Fehler ab (ich hab mal hervorgehoben, was mir wichtig erscheint).
Code:
make CC="gcc" \
        -C source/squashfs2.2/squashfs-tools mksquashfs
gcc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -O2   -c -o mksquashfs.o mksquashfs.c
[b]mksquashfs.c:37:20: error: endian.h: No such file or directory[/b][color=grey]
mksquashfs.c: In function 'mangle':
mksquashfs.c:270: warning: pointer targets in passing argument 1 of 'compress2' differ in signedness
mksquashfs.c:270: warning: pointer targets in passing argument 3 of 'compress2' differ in signedness
mksquashfs.c: In function 'init_dir':
mksquashfs.c:635: warning: pointer targets in assignment differ in signedness
mksquashfs.c: In function 'add_dir':
mksquashfs.c:669: warning: pointer targets in assignment differ in signedness
mksquashfs.c:671: warning: pointer targets in assignment differ in signedness
mksquashfs.c:672: warning: pointer targets in assignment differ in signedness
mksquashfs.c:673: warning: pointer targets in assignment differ in signedness
mksquashfs.c: In function 'get_fragment':
mksquashfs.c:842: warning: pointer targets in passing argument 1 of 'uncompress' differ in signedness
mksquashfs.c:842: warning: pointer targets in passing argument 2 of 'uncompress' differ in signedness
mksquashfs.c:842: warning: pointer targets in passing argument 3 of 'uncompress' differ in signedness
mksquashfs.c: In function 'write_fragment':
mksquashfs.c:868: warning: pointer targets in passing argument 1 of 'mangle' differ in signedness
mksquashfs.c:871: warning: pointer targets in passing argument 4 of 'write_bytes' differ in signedness
mksquashfs.c: In function 'read_from_file':
mksquashfs.c:967: warning: pointer targets in return differ in signedness
mksquashfs.c: In function 'duplicate':
mksquashfs.c:1029: warning: pointer targets in initialization differ in signedness
mksquashfs.c:1044: warning: pointer targets in passing argument 4 of 'read_bytes' differ in signedness
mksquashfs.c: In function 'write_file':
mksquashfs.c:1160: warning: pointer targets in assignment differ in signedness
mksquashfs.c:1161: warning: pointer targets in passing argument 5 of 'duplicate' differ in signedness
mksquashfs.c:1169: warning: pointer targets in passing argument 5 of 'duplicate' differ in signedness
mksquashfs.c: In function 'main':
mksquashfs.c:2038: warning: pointer targets in passing argument 4 of 'write_bytes' differ in signedness[/color]
[b]make[1]: *** [mksquashfs.o] Error 1
make: *** [source/squashfs2.2/squashfs-tools/mksquashfs] Error 2[/b]
An dieser Stelle weiss ich nicht weiter. Es scheint eine Datei zu fehlen (endian.h), aber wo muss die sein?
Ich habe die Datei mehrmals auf meinem System gefunden (/usr/include/{i386,ppc,machine}/endian.h), aber ich vermute stark, dass ich eine für mipsel brauche.[/LIST]

Kann mir da evtl. jemand weiterhelfen?
Danke im voraus.
 
Zuletzt bearbeitet:
maceis schrieb:
Ich habe die Datei mehrmals auf meinem System gefunden (/usr/include/{i386,ppc,machine}/endian.h), aber ich vermute stark, dass ich eine für mipsel brauche.
Nein, es handelt sich hier um die Host Variante der endian.h
Was dir auf Mac OS X noch passieren kann ist, dass er das squashfs mit dem falschen Endian erstellt, das wird sich zeigen.
 
Hallo,

bitte ändere doch mal deine Überschrift in einen aussagekräftigen Titel ab. Der Titel soll immer eine kurzzusammenfassung dessen sein, was sich inhaltlich hinter dem Thread verbrigt.

Danke
 
Den Titel hab ich dem Thread beim Abtrennen gegeben, weil mir nichts besseres eingefallen ist. Glaube auch, dass er es garnicht so schlecht trifft, da bis jetzt noch niemand den ds-mod mit Mac OS X getestet hat und dies nicht das einzige Problem ist.

EDIT: Titel geändert

Mfg,
danisahne
 
Zuletzt bearbeitet:
danisahne schrieb:
Nein, es handelt sich hier um die Host Variante der endian.h
...
Danke, diese Info macht die Lösung einfach. Ich hab' einfach einen Symlink erstellt.
danisahne schrieb:
...
Was dir auf Mac OS X noch passieren kann ist, dass er das squashfs mit dem falschen Endian erstellt, das wird sich zeigen.
Wie würde sich das äußern?
Nach zwei kleineren Modifikationen im Skript "fwmod" erhalte ich jedenfalls jetzt folgendes Ergebnis:
Code:
STEP 1: UNPACK
unpacking firmware image
splitting kernel image
ERROR: kernel splitting failed
make: *** [firmware] Error 1
Es scheint also, dass weder "build/original/kernel/kernel.raw" noch "build/original/kernel/kernelsquashfs.raw" gefunden wird.
Woher müssen diese Dateien kommen?
Vermutlich aus der Original Firmware.
Kann ich die manuell hinzufügen?
Ich nehem an, man kann, aber dass sie nicht da sind deutet doch darauf hin, das an einer bestimmten Stelle etwas fehlgeschlagen ist, aber wo?

---
@der_Gersthofer
Schuld an der Situation bin ich selbst, da ich eigentlich gleich einen eigenen Thread hätte aufmachen sollen. Den hätte ich dann wohl "Kompilieren des ds-mod unter Mac OS X" o.ä. genannt ;). Ändern kann ich den Titel aber jetzt nicht mehr; vermutlich weil schon Antworten da sind.
 
maceis schrieb:
Code:
STEP 1: UNPACK
unpacking firmware image
splitting kernel image
ERROR: kernel splitting failed
make: *** [firmware] Error 1
Es scheint also, dass weder "build/original/kernel/kernel.raw" noch "build/original/kernel/kernelsquashfs.raw" gefunden wird.
Woher müssen diese Dateien kommen?
Vermutlich aus der Original Firmware.
Kann ich die manuell hinzufügen?
Es ist offensichtlich das Aufteilen des kernel.image fehlgeschlagen. Die beiden Dateien sollten eigentlich das Ergebnis des Aufrufs find-squashfs sein, d.h. die kannst du nicht manuell hinzufügen. Versuch mal das Programm find-squashfs mit dem kernel.image als Parameter aufzurufen und poste die Fehlermeldung.
 
Code:
% ./tools/find-squashfs ./build/original/firmware/var/tmp/kernel.image
The size of <./build/original/firmware/var/tmp/kernel.image> is 4186112
Strange, no squashfs signature found...

Schlägt hier das zu, was Du oben mit "dass er das squashfs mit dem falschen Endian erstellt" gemeint hast?
 
Nein, find-squashfs sucht mit dem falschen endian. Das Programm sucht nach dem squashfs magic kann es aber nicht finden, da es vom Mac in der anderen Reihenfolge geladen wird. Ich werde das versuchen in der nächsten Version zu patchen.
 
danisahne schrieb:
Nein, find-squashfs sucht mit dem falschen endian. Das Programm sucht nach dem squashfs magic kann es aber nicht finden, da es vom Mac in der anderen Reihenfolge geladen wird. Ich werde das versuchen in der nächsten Version zu patchen.
Das wäre sehr erfreulich.

Nur mal so aus Interesse.
Ich vermute, die Änderung/Ergänzungen sind in den Zeilen 56-81 der Datei ./source/find-squashfs/find-squashfs.c erforderlich, oder liege ich da jetzt völlig falsch?
Wenn meine Kenntnisse in C etwas besser wären, würde ich versuchen, Dir die Arbeit abzunehmen.

Wenn ich sonst irgendwie behilflich sein kann (und sei es nur zum Testen), lass es mich bitte wissen.
 
Du könntest mal versuchen, die Zeile
Code:
uint32_t search = 'sqsh';
durch
Code:
uint32_t search = 0x73717368;
zu ersetzen.
 
Okay, gerne.

Code:
% cd ./source/find-squashfs
% make clean
rm -f find-squashfs find-squashfs.o
[Ersetzung durchführen]
% make
gcc -W -Wall -O2   -c -o find-squashfs.o find-squashfs.c
gcc -o find-squashfs find-squashfs.o
% diff find-squashfs ../../tools/find-squashfs
%
Das ändert also offensichtlich nichts am resultierenden find-squashfs.
 
ok, dann sollte es bei dir aber mit
Code:
uint32_t search = 0x68737173;
gehen. Dann muss ich da einen Endian Check in find-squashfs einbauen. Für den Vergleich von Binärdateien ist denke ich cmp besser geeignet als diff.

Mfg,
danisahne
 
Ah - Klasse! Vielen Dank.

"STEP 1: UNPACK" läuft jetzt durch.

Bei "STEP 2: MODIFY" gibts wieder Fehler.
Mal sehen, wie weit ich da selbst komme - Ansonsten melde ich mich wieder.

(Mit dem cmp hast Du natürlich Recht)
 
So, nachdem ich einige Hürden zu überwinden hatte, läuft jetzt auch "STEP 2: MODIFY" durch.

Bei "STEP 3: PACK" passiert folgendes:
Code:
packing var.tar
creating filesystem image
./fwmod: line 1196:  7378 Bus error
"${TOOLS_DIR}/${MKSQUASHFS_TOOL}" * "${ABS_BASE_DIR}/${FILESYSTEM_MOD}" -noappend -all-root -b "$FILESYSTEM_BLOCKSIZE" -info >../filesystemsquashfs.log 2>&1
ERROR: creation of filesystem failed
make: *** [firmware] Error 1
Ich vermute ein Problem mit "mksquashfs-lzma".
Kann man da was machen?

(Warum da "./fwmod: line 1196" ausgegeben wird ist mir schleierhaft. Das entsprechende Kommando steht bei mir in Zeile 1076 des fwmod Skripts.)
 
Code:
STEP 1: UNPACK
unpacking firmware image
splitting kernel image
unpacking filesystem image
unpacking var.tar
done.

STEP 2: MODIFY
applying patches
installing mod base
replacing busybox
replacing kernel
installing packages
invoking custom script
done.

STEP 3: PACK
packing var.tar
creating filesystem image
merging kernel image
packing firmware_fon_wlan_7170.de.image
done.

FINISHED
:wow:

Zuerst mal meinen herzlichen Dank an Daniel für seine seine Unterstützung und seine Geduld; ohne ihn hätte ich schon das find-squashfs-Problem nicht lösen können.

Das Kompilieren des ds-mod unter Mac OS X ist nicht ganz trivial und lässt sich auch nicht ausschließlich durch Patches ermöglichen. Ich brauche also etwas Zeit (und noch ein/zwei kleine Infos von danisahne), um das in eine benutzerfreundliche Form zu bringen. Ich denke da an zwei Skripte, die Mac OS X Benutzer ausführen, bevor sie loslegen.

Sind hier überhaupt Mac OS X Benutzer, die daran Interesse haben? *g*
 
Zuletzt bearbeitet:
Den endian-check hat danisahne in 0.2.6 bereits eingebaut. Vielen Dank dafür.

Ich habe leider das Problem, dass einige der Dateien, die modifiziert werden müssen, erst während de 'make' entpackt/erstellt werden. Das erschwert eine "easy-to-use" Lösung.

Ich hab in den Archiven im dl Verzeichnis gesucht und auch rekursiv im ds-0.2.x Verzeichnis, aber leider nichts gefunden.

Es handelt sich (bei meiner letzten Paketauswahl) um die Dateien
source/find-squashfs/find-squashfs.c
source/squashfs2.2/squashfs-tools/mksquashfs.c
source/squashfs2.2/squashfs-tools/read_fs.c

Es wäre sehr hilfreich, wenn ich wüsste, wo die Dateien herkommen :D.
 
source/find-squashfs/find-squashfs.c
=> ist in ds-0.2.6/tools/source/find-squashfs.tar.bz2 enthalten

source/squashfs2.2/squashfs-tools/mksquashfs.c
source/squashfs2.2/squashfs-tools/read_fs.c
=> wird über ds-0.2.6/tools/make/mksquashfs.mk runtergeladen

die dateien sind unabhängig von der paketauswahl
 
Hi.
@maceis
Die find-squashfs.c müsstest du so hinbekommen, dass sie auf allen Plattformen läuft, dann könnte Daniel sie ersetzen. Das wäre wohl am Einfachsten. Oder es gibt dann 2 Source-Versionen und die richtige wird dann während dem make ausgewählt.

Für das mksquashfs kannst du einen Patch mit diff machen. Der muss dann nach ds-0.2.6/tools/make/patches. Und muss auf "mksquashfs.patch" enden.

MfG Oliver
 
Danke für Eure Unterstützung.
Das hilft mit micht nur beim Lösen meines Problems sondern auch beim generellen Verständnis.

Ich versuche möglichst eine Lösung zu finden, bei der möglichst geringe (oder gar keine) Veränderungen am mod selbst erforderlich sind. Mal seh'n, ob mir das gelingt.
 
Ich bin gut dabei, ein Skript zu entwickeln, welches von Mac OS X Benutzern vor der Verwendung des ds-mod ausgeführt werden muss, damit anschließend Firmware Images mit dem ds-mod erstellt werden können.
Ich denke, dass ich in den nächsten Tagen damit fertig werde.

Es wäre sehr hilfreich, wenn jemand bereit wäre, das Skript zu testen. Bei mir funktioniert das Konzept, aber das heisst natürlich nicht, dass es fehlerfrei ist und auf allen Systemen und mit allen Boxen funktioniert.

Falls also jemand bereit ist, das Skript auf seinem Mac OS X zu testen, bitte ich um eine kurze PN an mich zwecks Absprache.

[EDIT:] Kaputt gehen kann natürlich nichts dabei. Soviel habe ich schon selbst gestest [/EDIT]
 
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.