[erledigt] wie wird die libc gebaut?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

[erledigt] wie wird die libc gebaut?

Beitrag von cosmac » 10.10.2014 14:26:43

hi,

und zwar speziell die aus dem Paket Debianlibnewlib-arm-none-eabi? Kennt jemand zufällig ein Howto für Dummies?

Oder andersrum gefragt: mit welchen Compiler-Schaltern hat Debian die gebaut? Die lässt sich zwar völlig problemlos installieren und benutzen, aber der erzeugte Code ist, nun ja, ein wenig sperrig. Ich hab' mal genau nur strcmp() benutzt, einmal aus dem Paket und einmal, indem ich die strcmp.c-Quelle aus der newlib lokal übersetzt und dazu gelinkt habe. 568 Byte rein für strcmp() kann ja wohl nicht wahr sein:

Code: Alles auswählen

Debian-libc: 568 Byte
Quelle, -O0: 142 Byte
Quelle, -O2: 112 Byte
Quelle, -Os:  26 Byte
Oder liefert Debian mehrere Varianten und ich müsste nur die richtige auswählen (aber wie)?

Oder wäre eine andere (uclibc, musl, dietlibc, ...) empfehlenswerter?
Zuletzt geändert von cosmac am 11.10.2014 20:13:17, insgesamt 1-mal geändert.
Beware of programmers who carry screwdrivers.

Benutzeravatar
king-crash
Beiträge: 740
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: wie wird die libc gebaut?

Beitrag von king-crash » 10.10.2014 14:40:53

Öh was genau willst du jetzt tun oder wissen? Was ist dein Target? Cross Compile?

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: wie wird die libc gebaut?

Beitrag von cosmac » 10.10.2014 15:51:31

Danke für das Interesse! Hier gibt's einen Eigenbau mit STM32F205RC (Cortex-M3, 256K Flash, 96K RAM) und der braucht natürlich ein Programm. Dafür hab' ich Debianbinutils-arm-none-eabi, Debiangcc-arm-none-eabi und Debianlibnewlib-arm-none-eabi aus jessie auf wheezy installiert. Das funktioniert alles wunderbar, die LED blinkt und die Hupe hupt :)

Jetzt steht die Entscheidung an, welche libc ich verwenden soll. Die newlib bietet sich an, weil gcc und libc ja eng verzahnt sind und es dafür fertige Debian-Pakete gibt. Aber wenn die newlib astronomische Code-Größen liefert, muss eine andere her oder ich muss die newlib selbst neu bauen. Beides kein Spaß, eher linke ich die paar nützlichen Funktionen direkt dazu.

Also:
Kann ich dem gcc bzw. ld irgendwie sagen, welche Variante der newlib verwendet werden soll?
(anscheinend nicht)
Kann ich das Paket libnewlib-arm-none-eabi mit anderen Optionen selbst bauen?
(wahrscheinlich viel zu schwierig)
Welche andere libc wäre empfehlenswert?
Und, zwecks der Neugier: wie baut Debian die newlib, dass die so riesig wird?
Beware of programmers who carry screwdrivers.

OppaErich
Beiträge: 323
Registriert: 13.04.2005 16:10:16
Wohnort: Essen

Re: wie wird die libc gebaut?

Beitrag von OppaErich » 10.10.2014 17:08:06

Was hast denn Du vor, 256kB Flash und die libc ist Dir zu dick ? Egal, Deine Baustelle. Wenn Englisch kein größeres Problem ist: http://www.cs.indiana.edu/~geobrown/book.pdf STM32 Tutorial in dem auch die Neukompillierung der newlib beschrieben wird.

Benutzeravatar
king-crash
Beiträge: 740
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: wie wird die libc gebaut?

Beitrag von king-crash » 11.10.2014 15:20:01

Also ich hab bei meinen Mikrocontrollern mit crosstool http://crosstool-ng.org den compiler gebaut. Da kann man auch direkt eine libc auswählen und du musst nichts von Hand machen. Sehr empfehlenswert!!!
Allerdings verwende ich bei allen Prozessoren ohne OS generell keine libc. Wozu auch, für die 3 Aufrufe kopiere ich die gewünschten Funktionen. So werden diese ganz nebenbei auch je nach Bedarf automatisch mit -Os oder -O3 kompiliert

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: wie wird die libc gebaut?

Beitrag von cosmac » 11.10.2014 20:12:47

OppaErich hat geschrieben:Was hast denn Du vor, 256kB Flash und die libc ist Dir zu dick ?
mir geht es um die 500 Byte für ein simples strcmp(), vor allem, weil es ohne die lib auch mit 26 Byte geht! Dann will ich ein Programm von einem 8-Bit Rechner auf den STM32 bringen, das waren 40K Assembler und ich hab' so das Gefühl, das C für Cortex-M nicht gerade Byte-sparend ist.
Wenn Englisch kein größeres Problem ist: http://www.cs.indiana.edu/~geobrown/book.pdf STM32 Tutorial in dem auch die Neukompillierung der newlib beschrieben wird.
danke, aber da wird ja auch nur die Kompilierung beschrieben. Es wäre halt nett, wenn die newlib dann wieder mit dem gcc integriert wäre, so wie bei den Debian-Paketen.
king-crash hat geschrieben:Also ich hab bei meinen Mikrocontrollern mit crosstool http://crosstool-ng.org den compiler gebaut. Da kann man auch direkt eine libc auswählen und du musst nichts von Hand machen.
Genau so geht's auch mit den Debian-Paketen, einfach installieren und loslegen. Bis auf die paar Bytes zuviel...

Aber mit einem Update hat sich die Frage erledigt, wenn auch nicht beantwortet. Seit dem 5. September ist im Debianlibnewlib-arm-none-eabi die newlib-nano dabei. Damit braucht strcmp() noch ganze 20(!) Byte. Jetzt fehlt nur noch der Auswahl-Mechanismus per /etc/alternatives.
Allerdings verwende ich bei allen Prozessoren ohne OS generell keine libc. Wozu auch, für die 3 Aufrufe kopiere ich die gewünschten Funktionen. So werden diese ganz nebenbei auch je nach Bedarf automatisch mit -Os oder -O3 kompiliert
Bei meinem Programm kannst du eine Münze werfen, Zahl = mit libc. Ich brauche u.a. 2 Tasks mit einer mehrsprachigen Mini-Shell und Zeitzonen muss das Teil auch kennen. Als "OS" gibt's ChibiOS, das braucht übrigens (ohne Treiber) nicht einmal 2K.
Beware of programmers who carry screwdrivers.

Antworten