PDA

Bekijk de volledige versie : CrossCompiling



astrakid
16-09-2012, 10:45
hi,
ich suche unterstützung beim cross-compilen von sourcen.
es geht speziell um entware. eine ubuntu 11.10 umgebung habe ich bereits aufgesetzt, habe auch die fertige toolchain für x86 bereits heruntergeladen und den anweisungen entsprechend eingebunden. nun bin ich aber auf unterstützung angewiesen - ich würde doch gerne ein paar pakete kompilieren und anschließend auch der masse zur verfügung stellen (im moment besonders asterisk10).
ist hier jemand im forum mit entsprechender erfahrung?

gruß,
astrakid

!gm
16-09-2012, 19:26
Ich kompiliere meine Entware-Pakete so:

http://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL

wobei ich statt nur make dann


make .toolchain_installed
make .buildroot_installed
make .packages_prepared

damit sollte die Umgebung dann vorbereitet sein

die entsprechenden Pakete via


make -C "../openwrt_trunk" package/feeds/<feedname>/<packagename>/compile V=99
make -C "../openwrt_trunk" package/feeds/<feedname>/<packagename>/install V=99

bauen.

Ich hoffe das hilft

astrakid
17-09-2012, 07:17
das hilft defintiv in 2 punkten:
1. das make läuft schneller durch (vermute ich mal), weil nicht so viel kompiliert werden muss - das werde ich heute abend testen. bisher rödelt sich meine VM einen wolf...
2. ich habe einen ansprechpartner, der erfahrung hat. ;-)

meine nöchste frage ist nämlich, wie ich nun ein spezielles paket bauen kann.
Beispiel: ich lade mir die aktuellsten sourcen von asterisk herunter. zum kompilieren gibt es 3 aktionen:
a: ./configure
b: make
c: make install

in teil a kann ich die notwendigen module angeben, die auch davon abhängig sind, welche module installiert sind (z.b. für fax benötigt man spandsp, was widerum libtiff voraussetzt).

frage 1: wie kann ich diese sourcen manuell konfigurieren und dann mit der entware-toolchain kompilieren?
frage 2: wie binde ich notwendige libraries ein (wie z.b. libtiff) und in welcher form (für das darunter liegende ubuntu oder muss ich libtiff auch erst für entware kompilieren)?

gruß und danke,
astrakid

!gm
17-09-2012, 16:24
für eigene Pakete ist es wichtig, die Struktur zu verstehen, wie die Makefiles in OpenWrt aufgebaut sind

http://wiki.openwrt.org/doc/devel/packages

das make .packages_prepared patcht dann die Makefiles, dass aus allen /lib/blabla /opt/lib/blabla wird, weil wir unsere Pakete ja in /opt auf HDD/Stick legen und nicht in den Speicher wie bei OpenWrt (hier mal das Beispiel für curl http://code.google.com/p/wl500g-repo/source/browse/trunk/packages/curl/fix-path.patch)

also am besten mal ein makefile angucken wenn die patches drübergelaufen sind, du siehst dann schon, wie das so läuft

auch wegen den Abhängigkeiten - libtiff z.B. würde dann vorher für Entware cross-kompiliert

aktuelle firmware voll lly & theMiron benutzt ja, oder? ^die Pakete laufen nur mit den neueren uclibc versionen und dem 2.6er Kernel - soweit ich weiß


hier ist der englische thread dazu: http://wl500g.info/showthread.php?28778-Announce-New-EntWare-package-repository-for-1-9-2-7-rtn-firmware

den russischen empfehl ich nur bedingt, da google translate doch etwas hakelig ist (vor allem muss ich hier dazu die Spracheinstellung für den Kyrillischen Zeichensatz umstellen, was nervt)
http://wl500g.info/showthread.php?28036-%CF%E5%F0%E5%F5%EE%E4-%ED%E0-%ED%EE%E2%FB%E9-%F0%E5%EF%EE%E7%E8%F2%EE%F0%E8%E9-Entware-%F1-Optware

astrakid
17-09-2012, 17:55
vielen dank für die unterstützung.

hab es gerade mal stur nach anleitung probiert, hab natürlich eine fehlermeldung erhalten "no rule to make target"...
aber erst mal noch einen schritt zurück, da mir gar nicht klar ist, wie ich cross-compile.

1. ich habe nun eine toolchain installiert, die entware unterstützt => pakete, die ich mit dieser toolchain kompiliere, sind "krosskompiliert". ist das richtig?
2. wenn ich sourcen habe (z.b. asterisk), dann kann ich stinknormal mein "./configure" ausführen und anschließend das "make" der entware-toolchain auf diese Sourcen loslassen, oder?
3. wenn 2. stimmt, wie sieht der genaue befehl aus, also wie rufe ich das "toolchain-make" auf?

sorry für die häufigen nachfragen, aber mir ist das noch nicht ganz klar, hab auch bisher nur direkt auf dem router kompiliert - das habe ich so halbwegs verstanden.

gruß,
astrakid

!gm
17-09-2012, 19:46
1. ich habe nun eine toolchain installiert, die entware unterstützt => pakete, die ich mit dieser toolchain kompiliere, sind "krosskompiliert". ist das richtig?


ja, nach make .toolchain_installed im entware trunk



2. wenn ich sourcen habe (z.b. asterisk), dann kann ich stinknormal mein "./configure" ausführen und anschließend das "make" der entware-toolchain auf diese Sourcen loslassen, oder?

nein :D configure usw. braucht du alles nicht, dass passiert automatisch, wenn das OpenWrt-makefile richtig ist



3. wenn 2. stimmt, wie sieht der genaue befehl aus, also wie rufe ich das "toolchain-make" auf?


wie schon geschrieben...
make -C "../openwrt_trunk" package/feeds/<feedname>/<packagename>/compile V=99
make -C "../openwrt_trunk" package/feeds/<feedname>/<packagename>/install V=99

^der Pfad geht vom entware trunk aus

im Grunde müsstest du mal ein vorhandenes Paket kompilieren um zu sehen, wie das funktioniert... das target wird beim make .packages_prepared gesetzt, wenn ich das richtig in Erinnerung habe

V=99 bedeutet maximale verbosity <-- viiiiel Ausgabe

kein Problem - frag ruhig alles
auf dem Router selbst dauert das alles viel zu lange :D außerdem haben wir kein buildroot - ipk Paket mehr, was die Einrichtung der Umgebung extrem verkomplizieren würde

astrakid
17-09-2012, 19:58
ja, nach make .toolchain_installed im entware trunk
nein :D configure usw. braucht du alles nicht, dass passiert automatisch, wenn das OpenWrt-makefile richtig ist
[...]
im Grunde müsstest du mal ein vorhandenes Paket kompilieren um zu sehen, wie das funktioniert... das target wird beim make .packages_prepared gesetzt, wenn ich das richtig in Erinnerung habe
V=99 bedeutet maximale verbosity <-- viiiiel Ausgabe
kein Problem - frag ruhig alles
auf dem Router selbst dauert das alles viel zu lange :D außerdem haben wir kein buildroot - ipk Paket mehr, was die Einrichtung der Umgebung extrem verkomplizieren würde

hi,
prima, das hilft wieder ein stückchen.
nur das mit dem makefile passt mir nicht ganz. das Makefile ist ja genau so konfiguriert, dass dort alles definiert wird, was anschließend in kompilierten paketen landen soll.
ich habe aber das problem, dass mir etwas in asterisk fehlt und ich daher asterisk manuell cross-kompilieren möchte, ohne vorhandenes makefile. das wird doch dann mittels ./configure erstellt und make menuconfig , oder nicht? ich muss im ./configure nur die toolchain angeben (über --target? oder --build?)...?

kann jemand mein problem nachvollziehen?

gruß,
astrakid

p.s.: auf jeden fall schon mal danke für eure mühen!!!

!gm
17-09-2012, 23:12
nein, schau dir die Struktur der openwrt makefiles an, nur so geht das. Das makefile aus der asterisk source beinhaltet zwar n paar informationen, wird aber niemals mit der openwrt buildroot funktionieren.

im openwrt makefile ist ein bereich, wo du deine configure optionen festlegst

http://wiki.openwrt.org/doc/devel/packages

astrakid
18-09-2012, 07:17
ja, habs verstanden. ich habe nur das problem, das ich nciht weiß, wie das entsprechende package heißt... daher würde ich das gerne "komplett" manuell machen - aber das scheint nicht zu klappen...
gibt es die möglichkeit, dass ich asterisk sourcden runterziehe, ./configure und make menuconfig starte, die optionen wähle, um mir dann das makefile anzuschauen und die optionen für den configure-optionen zu übernehmen?

gruß und danke!!!
astrakid

!gm
18-09-2012, 09:56
wie das entsprechende package heißt...

^na du musst dir schon selbst nen treffenden Namen festlegen...

die sourcen kann der buildroot übrigends über nenn eigenen feed auch automatisch beziehen - nur eben ein MAKEFILE musst du selber schreiben. kein configure

http://wiki.openwrt.org/doc/devel/feeds

mit make menuconfig - klickst du dich tot.

deswegen

make -C "../openwrt_trunk" package/feeds/<feedname>/<packagename>/compile V=99 ... ;)

astrakid
18-09-2012, 10:11
ok, ich habe verstanden...:
- dass das package ein name für das zu erstellende paket ist - damit frei wählbar
- über das makefile definiere ich, wie das package aussieht

wie komme ich denn an die verfügbaren optionen heran, die ich im makefile angeben kann? finde ich das in der dokumentation der sourcen?

konkret:
mir fehlen aktuell 3 asterisk-funktionen:
1. function group
2. function group_count

dann müsste ich ja "nur" diese beiden funktionen in der doku finden, die entsprechenden teile im makefile angeben. allerdings habe ich danach bereits gesucht (um festzustellen, warum ausgerechnet diese beiden funktionen nicht verfügbar sind), konnte aber nicht fündig werden...

gruß,
astrakid

!gm
18-09-2012, 14:24
https://dev.openwrt.org/browser/packages/net/asterisk-1.8.x/Makefile?rev=28462

vlt muss das als Buildasterisk18ModuleTemplate angestoßen werden...? ^da du nur die beiden funktionen haben willst, würd ich an deiner stelle bei asterisk 1.8 zu suchen, denn hier haben wir ja eine version des openwrt/entware makefiles schon fertig (viel anders wird das für Asterisk10 auch nicht aussehen)

astrakid
18-09-2012, 14:27
im core, d.h. in der main-applikation? dann wundert es mich um so mehr, warum die funktion im aktuellen ipk nicht enthalten ist...?!?!

!gm
18-09-2012, 15:00
ähm nee ich hab mich korrigiert :D aber in der funktion selbst steht, dass sie bestandteil des core ist - wahrscheinlich kann man das aber trotzdem nicht mitkompilieren

astrakid
18-09-2012, 19:32
oh je, ich merke schon, das ist nicht ganz so einfach... jetzt mach ich erst mal ein paar tage pause. vllt kümmere ich mich am wochenende nochmal darum...
hab parallel auch noch probleme mit nem mysql unter entware - ich kriege die db nicht sauber installiert, weil er "hostname" nicht ausführen kann...
ich werd bekloppt...

gruß,
astrakid