Kompilieren des ds-mod unter Mac OS X

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
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:

danisahne

Aktives Mitglied
Mitglied seit
30 Jul 2005
Beiträge
1,493
Punkte für Reaktionen
0
Punkte
0
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.
 

der_Gersthofer

Admin-Team
Mitglied seit
17 Apr 2004
Beiträge
3,585
Punkte für Reaktionen
0
Punkte
36
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
 

danisahne

Aktives Mitglied
Mitglied seit
30 Jul 2005
Beiträge
1,493
Punkte für Reaktionen
0
Punkte
0
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:

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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.
 

danisahne

Aktives Mitglied
Mitglied seit
30 Jul 2005
Beiträge
1,493
Punkte für Reaktionen
0
Punkte
0
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.
 

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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?
 

danisahne

Aktives Mitglied
Mitglied seit
30 Jul 2005
Beiträge
1,493
Punkte für Reaktionen
0
Punkte
0
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.
 

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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.
 

danisahne

Aktives Mitglied
Mitglied seit
30 Jul 2005
Beiträge
1,493
Punkte für Reaktionen
0
Punkte
0
Du könntest mal versuchen, die Zeile
Code:
uint32_t search = 'sqsh';
durch
Code:
uint32_t search = 0x73717368;
zu ersetzen.
 

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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.
 

danisahne

Aktives Mitglied
Mitglied seit
30 Jul 2005
Beiträge
1,493
Punkte für Reaktionen
0
Punkte
0
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
 

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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)
 

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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.)
 

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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:

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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.
 

supamicha

Mitglied
Mitglied seit
3 Dez 2004
Beiträge
585
Punkte für Reaktionen
4
Punkte
18
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
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
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
 

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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.
 

maceis

Mitglied
Mitglied seit
9 Apr 2006
Beiträge
644
Punkte für Reaktionen
3
Punkte
18
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]
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,367
Beiträge
2,021,619
Mitglieder
349,944
Neuestes Mitglied
TT83