[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