pld embedded - port pld dla arm9
Radosław Kintzi
radek w rakin.eu.org
Śro, 10 Sie 2005, 09:17:16 CEST
Pawel Sikora napisał(a):
>On Monday 08 of August 2005 11:40, Radosław Kintzi wrote:
>
>
>
>>Wydaje mi się, że najlepszym rozwiazaniem byłoby stworzenie miniportu
>>PLD dla ARMa. Coś takiego jak [5]. Oto oprogramowanie jakie potrzebuję
>>(chciałbym w tym widzieć):
>>(...)
>> - gcc-3.3.5
>>
>>
>
>seria 3.3.x sie nie nadaje dla ARM-a, bo ma skoszona obsluge
>__attribute__ ((interrupt ("IRQ/FIQ/etc."))) i jeszcze kilki
>innych rzeczy. jesli chcesz uzywac gcc na armie, to w wersji
>min. 3.4.latest. generalnie polecam doglebna lekture
>http://www.inf.u-szeged.hu/gcc-arm/index.php
>
>
Dziwne bo buildroot (http://buildroot.uclibc.org/) potrafi zbudować
serię 3.3.x w raz z uClibc. Ale nie chcę się kłucić i już przerzuciłem
sie na 3.4
>
>
>> - newlib lub uClibc (nie wiem czy to pierwsze się nadaje)
>>
>>
>
>to pierwsze sie nadaje, ale jest dosyc duze jak na systemy
>micro-embbeded (z 32/64kB ram-u). dla takowych najlepsze jest
>chyba dietlibc+wlasna implementacja (badz zaslepienie) syscall-i linuxa.
>jesli zas masz juz te kilka MB zewnetrznej pamieci ram podpietej
>do arm-a + flash dysk, to spokojnie uzywaj newliba.
>
>
Czy zatem taka kombinacja: crossarm-gcc.spec + crossarm-newlib.spec daje
możliwość zbudowania wxWidget i zależności + kernel, a potem
wygenerowania sobie jakiegoś rootfsa z linuksem? Próbowałem się tym
posługiwać ale brakowało crt0.o (a może crt1.o) przy łączeniu.
>
>
>>Mam teraz kilka pytań na temat cross-kompilacji i towrzenia portów
>>embedded (zaznaczam, że moje doswiadczenie w tym temacie jest raczej
>>żadne, a wiedza to kilka dni googlowania):
>>
>>1. Jak wygląda proces tworzenia cross-kompilatora?
>>
>>
>
>crossarm-gcc.spec jest do wgladu. aktualnie wspiera tyko c/c++,
>albo mozna spokojnie wlaczyc jave i wykorzystac sprzetowy
>akcelerator jazelle.
>
>
Widzę, że to jest budowane z nagłówkami uClibc. Czy to jest bootstrapowy
kompilator, czy może już finalna wersja nadająca się do generowania kodu
dla linuksa opartego o uClibc. Może niesłusznie zakładam, że jednak
bootstrapowy, bo nigdzie w systemie nie mam zainstalwanej uClibc. Może
nie musze mieć? Może wystarczy przekompilować nim uClibc.spec? Jak (są
jakieś przełączniki dla rpmbuild, czy potrzeba przygotować nowego speca)?
Może nie potrzebnie ale przygotowałem swoje spece: arm-gcc.spec i
arm-uClibc.spec. Przy ich pisaniu bazowałem na crossarm-gcc.spec,
uClibc.spec, wiedzy wyciągniętej z googla oraz na
http://buildroot.uClibc.org/ (skąd między innymi wziąłem patche na gcc).
Oba spece załączam licząc na krytyczne uwagi i podopowiedzi.
Jak dotąd nie działają poprawnie. Bootstrapowy kompilator się buduje i
raczej można z nim pracować - da się nim przekompilować arm-uClibc.spec.
Ten niestety generuje takie kwiatki:
Package: arm-uClibc-devel-0.9.27-1.1
Content:
/usr/arm-linux-uclibc/usr/bin: addr2line -> /usr/bin/addr2line,
ar -> /usr/bin/ar, as -> /usr/bin/as,
c++ -> //bin/arm-linux-uclibc-uclibc-gcc,
cc -> //bin/arm-linux-uclibc-uclibc-gcc, cpp -> /usr/bin/cpp,
g++ -> //bin/arm-linux-uclibc-uclibc-gcc,
gcc -> //bin/arm-linux-uclibc-uclibc-gcc,
ld -> //bin/arm-linux-uclibc-uclibc-ld, nm -> /usr/bin/nm,
objcopy -> /usr/bin/objcopy, objdump -> /usr/bin/objdump,
ranlib -> /usr/bin/ranlib, size -> /usr/bin/size,
strings -> /usr/bin/strings, strip -> /usr/bin/strip
Czyli odnośniki do nieistniejących plików (nie dość że mają złe ścieżki,
to jeszcze błędne nazwy - może problem w tym, że bootstrapowy kompilator
budowany jest z tagetem=arm-linux-uclibc, zamiast arm-linux ?? - wydaje
się jednak, że buildroot robi to dokładnie tak samo). Przy okazji - co
to za kompilatory które budują się razem z uClibc?
Co do kompilatora finalnego, to budowanie się wykłada przy konfiguracji
g++ (pełny log dostępny na zamówienie):
(...)
checking for float.h... (cached) yes
checking for stdint.h... (cached) yes
checking for main in -lm... configure: error: Link tests are not allowed
after GCC_NO_EXECUTABLES.
make: *** [configure-target-libstdc++-v3] Error 1
błąd: Błędny status wyjścia z /var/tmp/rpm-tmp.85910 (%build)
W config.log znalazłem taki błąd:
configure:2356:
/home/users/radek/rpm/BUILD/gcc-3.4.3/obj-arm-linux-uclibc/gcc/
xgcc -B/home/users/radek/rpm/BUILD/gcc-3.4.3/obj-arm-linux-uclibc/gcc/
-B/usr/ar
m-linux-uclibc/bin/ -B/usr/arm-linux-uclibc/lib/ -isystem
/usr/arm-linux-uclibc/
include -isystem /usr/arm-linux-uclibc/sys-include -o conftest -g -Os -g
-Os co
nftest.c >&5
/usr/arm-linux-uclibc/bin/ld: crt1.o: No such file: No such file or
directory
collect2: ld returned 1 exit status
Problem w tym, że crt1.o leżą nie w -B/usr/arm-linux-uclibc/lib/ tylko:
Package: arm-uClibc-devel-0.9.27-1.1
Content:
(...)
/usr/arm-linux-uclibc/usr/lib: crt0.o, crt1.o, crti.o, crtn.o,
libc.so -> ../../lib/libc.so.0, libcrypt.so -> ../../lib/libcrypt.so.0,
libdl.so -> ../../lib/libdl.so.0, libm.so -> ../../lib/libm.so.0,
libnsl.so -> ../../lib/libnsl.so.0,
libpthread-uclibc.so -> ../../lib/libpthread-uclibc.so.0,
libresolv.so -> ../../lib/libresolv.so.0,
librt.so -> ../../lib/librt.so.0,
libthread_db.so -> ../../lib/libthread_db.so.1,
libutil.so -> ../../lib/libutil.so.0
Teraz sobie uzymysłowiłem, że błąd jest też w -isystem/sys-include -
takiego katalogu nie ma. Zrobiłem taki link do
/usr/arm-linux-uclibc/usr/include, ale to oczywiście to brzydki i - jak
widać - mało skuteczny workaround, który tylko odroczył to co
nieuniknione - poprawne skonfigurowanie gcc. Czy ktoś wie jak to zrobić?
A może problem leży jednak nie w gcc, tylko w arm-uClibc.spec? Gdzie
powinny leżeć te pliki?
Buildroot wkłada je do .../staging_dir/lib, gdzie .../staging_dir to
odpowiednik mojego /usr/arm-linux-uclibc? Jakby kotś chciał rzucić okiem
to mogę przygotować wyciąg z Mejkfailów buildroota oraz z logów
budowania (ew. udostępnić te ostatnie w całości).
Pozdr,
Radosław Kintzi
Więcej informacji o liście dyskusyjnej pld-devel-pl