Download-Toolchain mit GCC 4.2.1 im Selbstbau

Status
Für weitere Antworten geschlossen.

dileks

Neuer User
Mitglied seit
7 Apr 2006
Beiträge
180
Punkte für Reaktionen
0
Punkte
0
A propos Toolchain:
Advanced Options -> Compiler Options -> Toolchains -> Build toolchain (requires 4GB diskspace)

Welche Konstellation einer...

Toolchain == (binutils + cross-compiler + cross-libc)

...wird hierbei erstellt bzw. ist es möglich diese zu beinflussen?
Aufwand sollte den Nutzen lohnen ;-)
 
kriegaex schrieb:
Mußt halt schon vorher von der Download-Toolchain auf die Build-TC wechseln. ;-)

----- Meine Lösung -----

[1] Änderungen in "toolchain/make/target/gcc/gcc.mk"
---> GCC_VERSION:=4.2.1

[2] Änderungen in "toolchain/make/target/binutils/binutils.mk"
---> BINUTILS_VERSION:=2.17.50.0.17

[3] Statistik
Build-Time: 1h 3min (inkl. Download-Time)
Disk-Space: 3,3 GByte

[4] Disk-Space Target-Toolchain
164M build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc

[5] Fazit
---> Feedback ans dsmod-Core-Team: Ja, es hat geklappt.

Frage:
Wie binde ich meine neue erzeugte Target-Toolchain für zukünftige dsmod-Builds ein (ohne das diese immer wieder neu übersetzt werden muss)?
 

Anhänge

  • dot-config_w701v_0426_ds26-15.2_tcom_dropbear_syslogd_target_gcc421-uClibc0928.txt
    8.6 KB · Aufrufe: 2
target-toolchain-dsmod v0.5 mit gcc-4.2.1-uClibc-0.9.28

Ich habe eine neue Target-Toolchain basierend auf "gcc-4.2.1-uClibc-0.9.28" gebaut und das Ganze in ein tar.7z gepackt.

Bei Interesse würde ich diese neue "target-toolchain-dsmod v0.5" an eine geeignete Stelle hochladen.

sd@elivebox[~/src/ds26-15.2/toolchain/build]$ tar -cf target-toolchain-dsmod-0.5.tar gcc-4.2.1-uClibc-0.9.28

sd@elivebox[~/src/ds26-15.2/toolchain/build]$ 7z a -mx=9 target-toolchain-dsmod-0.5.tar.7z target-toolchain-dsmod-0.5.tar

sd@elivebox[~/src/ds26-15.2/toolchain/build]$ du -s -h target-toolchain-dsmod-0.5.tar*
158M target-toolchain-dsmod-0.5.tar
21M target-toolchain-dsmod-0.5.tar.7z
 
Zuletzt bearbeitet:
kriegaex schrieb:
@dileks: Wieso so umständlich? Du kannst es doch in make menuconfig auswählen. :confused: Und Du editierst Makefiles?

Als ich meinen Beitrag schrieb, lief bereits der Build-Prozess.
Später hab ich gesehen, dass es "einfacher" gegangen wäre.
Als alter Unix-Hase findet man immer Wege für einen noch dirty-eren Hack ;-).
 
Ja, aber ich hatte doch in meiner ersten Antwort bereits gesagt, daß es über die Menükonfiguration geht. Egal, hat mich ja nur gewundert, weil ich Dich ja eben als Linux-Experten kenne, der viel mehr über dieses Betriebssystem weiß als ich.
 
Gibt es Interesse an meiner neuen "inoffiziellen" v0.5 des Target-Toolchains.
Mit lzma gepackt ist es noch mal ein paar KByte kleiner.
21 MByte sollte man in einer absehbaren Zeit hochladen können.

Edit:
kriegaex schrieb:
Advanced options -> Compiler options -> Target compiler

Nach dem die neue Target-Toolchain gebaut wurde, kann ich bei erneutem Aufruf von 'make menuconfig' meinen 'Target compiler [noparse](gcc-4.2.1-uClibc-0.9.28)[/noparse]' auswählen.
 
Zuletzt bearbeitet von einem Moderator:
Konntest Du vorher auch schon.

Grundsätzlich wäre es kein Problem, Deine Eigenbau-Toolchain hochzuladen, aber dann müßte erstens wieder jeder was an seiner Konfiguration patchen, damit das auch automatisch heruntergeladen, entpackt und benutzt wird. Zweitens gibt es keine mit bekannten Vorteile der 4.2.1 gegenüber der 4.2.0, die für uns wichtig wären. Wir machen das am besten gemeinsam mit dem nächsten Mod-Release, dann hat es jeder, der es will, automatisch.

Ein paar Stunden nach dem Release kam auch Dropbear 0.50 heraus, und es läuft auch schon bei mir, aber man kann ja nicht immer das Release herauszögern, nur weil es irgendwann mal eine neue Version von Tool x oder y geben könnte. Auch da muß dann eben wieder gewartet werden. Und auch hier gilt: 0.49 läuft gut, die 0.50 ist im Grunde hauptsächlich Versionspflege, nicht Notwendigkeit, ähnlich wie bei GCC.
 
Zuletzt bearbeitet:
Meine Target-Toolchain (TTC) kann/darf gerne in die nächste Release reingenommen werden.

Ich hab jetzt gerade einen 'make clean' gemacht.
Wie unterbinde ich es, dass die TTC neu gebaut wird?
 
dileks schrieb:
Ich hab jetzt gerade einen 'make clean' gemacht.
Wie unterbinde ich es, dass die TTC neu gebaut wird?
Gar nicht, wenn Du sie selbst gebaut hast. Du müßtest dann wieder auf Download-TC in Menuconfig umstellen, aber alles so patchen, daß Deine Version entsprechend als "Download-FW" erkannt wird. Wie das geht, weiß ich nicht auswendig, schau mal in die Makefiles, wenn Dir das wichtig ist.
 
Als dirty Hack würde mir spontan einfallen meine TTC in 'target-toolchain-dsmod-0.4.tar.lzma' umzubennen und ins dl-Verzeichnis zu legen.
Was dann passiert bleibt graue Theorie, denn ich baue den ds26 i.M. von Grunde neu.
 
Wozu denn, die TC war doch fertig? Wieso hast Du wieder clean gemacht und fängst von vorne an? Aber wir sind sowas von OT, ich verschiebe die Beiträge zu dem Thema mal in einen eigenen Thread.
 
[OT] OK zum Verschieben in einen neuen Thread. [\OT]

Aber ich wollte ein von mir noch nicht benutztes Feature ausprobieren "Replace kernel".
Das hat auch funktioniert.

/var/mod/root $ cat /proc/version
Linux version 2.6.13.1-ohio (sd@elivebox) (gcc version 3.4.5) #1 Thu Aug 9 02:43:04 CEST 2007


Gegenfrage:
Was hätte ich tun sollen als 'make clean'?
 
Um was zu erreichen? Am besten nach dem precompile alles so lassen, dann kannst Du bei Bedarf nochmal nachbauen, z.B. nur ccache oder nur binutils. Ansonsten ist ja klar, daß er wieder neu baut beim precompiled, wenn Du ihm die Prerequisites unterm Hintern wegziehst. Das ist es schließlich, wofür Make erfunden wurde. :D Oder, wie geschrieben, Menuconfig auf DL-Toolchain einstellen, dann wird nichts gebaut. Aber da wir eine funktionierende DL-TC haben und Du Dir eine zum Privatvergnügen baust, schaue ich da jetzt nicht rein, um genau zu beschreiben, wie Du die DL-TC durch Deine eigene so ersetzt, daß er nicht meckert. Schau Dich einfach unter toolchain/make um.
 
kriegaex schrieb:
Um was zu erreichen?

Z.B. eine Firmware-/Kernel-Image mit Addon-Features auszustatten oder wie in meinem Fall den Kernel gegen einen anderen auszutauschen.

kriegaex schrieb:
Am besten nach dem precompile alles so lassen, dann kannst Du bei Bedarf nochmal nachbauen, z.B. nur ccache oder nur binutils. Ansonsten ist ja klar, daß er wieder neu baut beim precompiled, wenn Du ihm die Prerequisites unterm Hintern wegziehst.

Gehört 'make precompiled' nicht der Vergangenheit an?

kriegaex schrieb:
Das ist es schließlich, wofür Make erfunden wurde. :D Oder, wie geschrieben, Menuconfig auf DL-Toolchain einstellen, dann wird nichts gebaut. Aber da wir eine funktionierende DL-TC haben und Du Dir eine zum Privatvergnügen baust, schaue ich da jetzt nicht rein, um genau zu beschreiben, wie Du die DL-TC durch Deine eigene so ersetzt, daß er nicht meckert. Schau Dich einfach unter toolchain/make um.

Es ist eine Privatsache, ich erwarte auch keinen Support und die Sache läuft bei mir nicht auf High-Pri.
Wichtige Erkenntnis ist - ausserhalb des Mainstream-Gebrauchs - das der dsmod auch von Grunde auf (build-from-scratch) gebaut werden kann. Sprich mit eigener TTC ist der Build möglich. Für das Core-Team soll es ein Feedback sein, der Build ist OK.

Vielleicht wäre es eine Anregung ins Menu-Config die Option aufzunehmen eigene (lokale) Target-Toolchains zu verwenden bzw. wenn ein fertiggestelltes target-toolchain-version.tar.lzma vorliegt zu berücksichtigen ähnlich der Möglichkeit die DL-Quellen manuell zu setzen.
 
- Kernel-Austausch geht auch mit der Download Toolchain
- "make precompiled" wird automatisch ausgeführt, kann aber auch einzeln aufgerufen werden, wenn nur das gewünscht ist.
- Ich vermute mal, daß die Download-Toolchain auf diese Art erstellt wurde, daher war ich davon ausgegangen, daß das Erstellen der Toolchain funktioniert.
- Eine eigene Toolchain konnte man dort früher auswählen. Es gab eine Umfrage von kriegaex zu dem Thema, wer dies braucht, und als sich nicht viele gemeldet haben, wurde diese Option entfernt.
 
RalfFriedl schrieb:
- Kernel-Austausch geht auch mit der Download Toolchain
- "make precompiled" wird automatisch ausgeführt, kann aber auch einzeln aufgerufen werden, wenn nur das gewünscht ist.

Sorry, wenn ich da streng nachhake.
Die neue TTC ist erstellt, der dsmod-Build läuft sauber durch, Firmware-/Kernel-Image sind erstellt.

Jetzt möchte ich aber eine neue Firmware-/Kernel-Image erstellen, z.B. neue Addons, Packages etc. mitaufnehmen.

Was ist jetzt konkret zu tun?
Neues Package: 'make precompiled pkgname'?

RalfFriedl schrieb:
- Ich vermute mal, daß die Download-Toolchain auf diese Art erstellt wurde, daher war ich davon ausgegangen, daß das Erstellen der Toolchain funktioniert.
- Eine eigene Toolchain konnte man dort früher auswählen. Es gab eine Umfrage von kriegaex zu dem Thema, wer dies braucht, und als sich nicht viele gemeldet haben, wurde diese Option entfernt.

In der Informatik wollen wir das schon genau wissen ;-).
Ich habe nur Eure gute Arbeit bestätigt.
Schade, dass die Option "Eigene TTC verwenden" entfernt wurde.

Letzte Hoffnung wäre eine neue offizielle TTC basierend auf 'gcc-4.2.1-uClibc-0.9.28'.
Das kann alles ins nächste dsmod-Release.

Ich selber baue meine Linux Kernel Images und erstelle Pakages aus Debian GNU/Linux sid als Backports für etch mittels eines gcc-4.2.1-build-from-scratch.

Meine Erfahrungen: Der gcc-4.2.1 läuft deutlich stabiler und macht weniger Ärger.
 
dileks schrieb:
Als dirty Hack würde mir spontan einfallen meine TTC in 'target-toolchain-dsmod-0.4.tar.lzma' umzubennen und ins dl-Verzeichnis zu legen.

cd ~/src/ds26-15.2/dl
cp -v my-target-toolchain.tar.lzma target-toolchain-dsmod-0.4.tar.lzma

---> LZMA-Archiv wird im Build-Prozess brav entpackt.

Folgenden Fehler abwarten:
...
touch: kann „toolchain/target/.installed“ nicht berühren: Datei oder Verzeichnis nicht gefunden
make: *** [toolchain/target/.installed] Fehler 1

cd ~/src/ds26-15.2/toolchain/build
ln -sf gcc-4.2.1-uClibc-0.9.28 gcc-4.2.0-uClibc-0.9.28

Weiter mit 'make'.

Re-Builds laufen mit dem "untergejubelten" TTC normal durch.
 
Zuletzt bearbeitet:
Sedat, wir reden hier irgendwie aneinander vorbei, also mit Screenshots:
  • Wenn man die Download-TC auswählt (Standard), wir automatisch eine fest voreingestellte vom Download-Mirror geholt - momentan eben GCC 4.2.0 mit uClibc 0.9.28 - vgl. Abb. 1.
  • Wenn man hingegen die TC selbst baut (einfach nur Option oben ändern), wird weiter unten (rot markiert) eine weitere Option sichtbar, über die man mehrere GCC-Versionen, z.B. GCC 4.2.1, auswählen kann. Dabei wird alles from scratch gebaut, man braucht nicht, wie Du es gemacht hast, in irgendwelchen Makefiles herumzueditieren.
Welche Variante der TC Du verwendest, um einen Kernel bzw. eine Firmware mit irgendwelchen fremden oder eigenen Paketen zu bauen, ist völlig irrelevant. Das wurde ja auch oben schon gesagt, ich bestätige es nochmals. Alles geht mit beiden Toolchains, nur ist die Download-TC schneller einsatzbereit: herunterladen, entpacken - fertig. Die Selbstbau-TC muß eben, wie der Name sagt, erst selbst komplett gebaut werden, die Download-TC ist vorkompiliert.

Ist es jetzt klarer?

P.S.: Wir reden ja nur von einer Hälfte der Toolchains: Die andere Hälfte ist GCC 3.4.5 mit glibc 2.3.6 - in Abb. 2 grün markiert. Damit wird der Kernel gebaut, und diese Version ist auch identisch für Download- und Build-TC.
 

Anhänge

  • download_toolchain.gif
    download_toolchain.gif
    5.6 KB · Aufrufe: 10
  • build_toolchain.gif
    build_toolchain.gif
    13 KB · Aufrufe: 17
Zuletzt bearbeitet:
- UPDATE -

Erläuterungen zu Begrifflichkeiten.
-dileks

kriegaex schrieb:
Sedat, wir reden hier irgendwie aneinander vorbei.

Nein, wir reden nicht aneinander vorbei.

Die TTC (target-toolchain-dsmod) als auch die KTC (kernel-toolchain-dsmod) habe ich gemäß menu-config gebaut - ohne in irgendwelchen Makefile etc. rumzufrimmeln.
Der Build lief schon vor zwei Tagen so durch.

Ihr redet ständig von einer "Download-Toolchain (DTC)" - wobei Ihr selber nicht zwischen TTC und KTC unterschieden habt.
Die von Euch für den Mainstram bereitgestellte Archive:
1. Official-TTC: target-toolchain-dsmod-0.4.tar.lzma
2. Official-KTC: kernel-toolchain-dsmod-0.1.tar.lzma

Erläuterung für die Mitlesenden:
Mit Hilfe der KTC wird der Kernel der FBox (hier: v2.6.13.1) gebaut.
Mit Hilfe der TTC werden u.a. die Packages (z.B. dropbear, syslogd, dnsmasq, etc.) übersetzt.
Beides natürlich für die MIPS(EL)-Architektur ("target" plattform).
Das Übersetzen aus/auf einem x86-Linux-System für eine andere Ziel-Architektur/-Plattform (engl.: "target") wird als cross-compilen bezeichnet.

Mir ging es darum "Eigene TTC" in späteren dsmod-Releases weiter zu verwenden.
RalfFriedl hat inzwischen berichtet, dass diese Option entfernt wurde.

Inzwischen habe ich auch meine KTC weggesichert!

Wo wir aneinander vorbeireden bzw. mir nicht klar ist:
Der erste Build (Ur-Build) läuft sauber durch.
Jetzt möchte ich eine neue dsmod-Firmware-/Kernel-Image mit neuen Addon/Packages bauen, z.B. Package dnsmasq hinzunehmen.

Was ist jetzt konkret zu tun, um nicht ganz von vorne anzufangen?
cd dsmod-UrBuildDir ;; make clean
 
Zuletzt bearbeitet:
Package auswählen in Menuconfig bzw. Add-On installieren. Dann einfach
Code:
make
 
Status
Für weitere Antworten geschlossen.
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.