[OSy] osy toolchain problem

Martin Decky decky at d3s.mff.cuni.cz
Mon Oct 28 12:49:51 CET 2013


Vazeny pane Luxi,

odpovidam na Vas dotaz do mailing listu, protoze s podobnym problemem se 
mohlo setkat vice lidi. Prosim vsechny, abyste i pro dalsi podobne 
dotazy primarne pouzivali mailing list.

> nainstaloval som si toolchain a myslel som, ze je v poriadku az do
> chvile kym som nechcel kompilovat:
>
> mipsel-linux-gnu-gcc -v -I ~/Dokumente/osy/repo/osy1314-anlusk/kernel/
> proc/thread.h proc/thread.c
>
> /usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.8.1/../../../../mipsel-linux-gnu/bin/ld:
> cannot find crt1.o: Data or Symbol not found
> /usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.8.1/../../../../mipsel-linux-gnu/bin/ld:
> cannot find crti.o: / Data or Symbol not found
> /usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.8.1/../../../../mipsel-linux-gnu/bin/ld:
> cannot find crtbegin.o: / Data or Symbol not found
> /usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.8.1/../../../../mipsel-linux-gnu/bin/ld:
> cannot find -lgcc
> /usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.8.1/../../../../mipsel-linux-gnu/bin/ld:
> cannot find -lc
> /usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.8.1/../../../../mipsel-linux-gnu/bin/ld:
> cannot find -lgcc
> /usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.8.1/../../../../mipsel-linux-gnu/bin/ld:
> cannot find crtend.o: / Data or Symbol not found
> /usr/local/cross/mips32/lib/gcc/mipsel-linux-gnu/4.8.1/../../../../mipsel-linux-gnu/bin/ld:
> cannot find crtn.o: Data or Symbol not found

Problem je v tom, ze nepouzivate prekladac pro prelozeni zdrojoveho 
souboru do objektoveho souboru (k tomu potrebujete argument -c), ale 
snazite se vyrobit primo vyslednou spustitelnou binarku (pro Linux na 
MIPSu), navic s implicitnim linker scriptem.

Je pochopitelne, ze to se Vam muze jen tezko podarit, uz jenom proto, ze 
nemate ani knihovnu libgcc pro MIPS, ani standardni ceckovou libc pro 
MIPS (jejichz soucasti jsou ty chybejici crt1.o, crti.o atd.). Navic by 
Vam takova binarka byla pravdepodobne zcela k nicemu, urcite totiz 
nechcete mit binarku pro Linux, ale chcete prelozit vlastni kernel.

Konecne, prilis nerozumim tomu, proc uvadite jako jeden z argumentu 
hlavickovy soubor, ale na podstatu problemu to nema vliv.

Prosim, zkuste si projit Makefile z Kalista nebo podrobneji jednotlive 
prikazy, ktere utilita make vykonava pri prekladu Kalista (vcetne 
argumentu/prepinacu). Jiste si vsimnete, ze jednotlive zdrojove soubory 
se prekladaji jen do objektovych souboru (argument -c) a ty se nakonec 
manualne linkuji za pouziti specialniho linker skriptu.

Dalsi zajimave prepinace pri prekladu jsou napriklad -ffreestanding, 
-nostdlib a -nostdinc, ktere prekladac jeste lepe nastavi pro situaci, 
kdy nemate zadnou systemovou libc a standardni hlavickove soubory. 
Podrobnejsi komentar k temto prepinacum najdete opet ve strome Kalista, 
napr. kernel/Makefile

> Som sa snazil pridat missing subory, tj crt.o zo system do spravneho
> PATH pre prekladac, ale po tom, ako som ich pridal, mi to hlasi, ak
> spravne rozumiem zly format object suborov.

Kdyz se nad tim zamyslite, tak to je naprosto pochopitelne. V systemu 
mate soubory crt1.o a dalsi nejspis pro platformu x86 nebo x86-64, 
zatimco tady se snazite generovat binarni soubory pro MIPS.

> Som mal pochybnosti ohladom Toolchain scriptu, ci vsetko som nemal
> nieco naviac konfigurovat, ale ten mi dobehol successfully installed.

Myslim si, ze toolchain mate nainstalovany v poradku, jen jej pouzivate 
nevhodnym zpusobem. Vyzkousejte to nejprve na Kalistu, s tim by to melo 
urcite fungovat a na zaklade toho zkuste zjistit, jak konkretne byste 
mel toolchain sam pouzit.


M.D.




More information about the NSWI004 mailing list