Strona 1 z 1

[+] od czego zacząć kompilację skrośną?

: 25 listopada 2008, 15:03
autor: lis6502
Zależy mi na zbudowaniu Linuksa dla jornady 680 (procesor sh7709a). Skądinąd wiem, że metoda to sh3. Potrzebne mi jądro, ale do kompilacji potrzebuję odpowiedniej wersji gcc i g++, więc na samym dole łańcucha troficznego jest binutils. Problem polega na tym, że jakich opcji nie podałbym przy konfiguracji, po zapytaniu

Kod: Zaznacz cały

debian:/home/lis6502/Desktop/sh3/tulczajn/bin# file sh3-elf-as
dostaję

Kod: Zaznacz cały

sh3-elf-as: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
A wydaje mi się, że powinno być elf 32bit, by późniejsze kompilacje generowały kod zjadliwy dla docelowego procesora.

Zaznaczam, że w temacie takich kompilacji jestem kompletnie zielony, informacje na ten temat zbieram tu i ówdzie, ale brakuje mi jakiegoś porządnego podręcznika systemowego dotyczącego tego tematu, dlatego tak chaotycznie to wszystko wygląda.

Ps. Próbowałem przy poleceniu configure podać --disable-multilib, efekt bez zmian.

A może tak to ma być, że as dla docelowej architektury ma być 64bit (jak moja architektura - gospodarza) by as uruchomił się i wygenerował odpowiedni, docelowy kod?

[Dodano: 2008-11-25, 17:24]
Wychodzi na to, że wszystko w porządku. Mam gcc i g++, faktycznie generują 32bitowy kod dla Renesans SuperH, czyli tak jak powinno być.
Teraz mam inny problem, używam jądra (to podstawa, jak mi wyjdzie to będę wiedział, że robię dobrze). Wyeksportowałem łatkę na taki:

Kod: Zaznacz cały

lis6502@debian:~/Desktop/sh3/linux-source-2.6.26$ export PATH=$tulczajn/bin:$PATH
przy czym:

Kod: Zaznacz cały

lis6502@debian:~/Desktop/sh3/linux-source-2.6.26$ echo $tulczajn
/home/lis6502/Desktop/sh3/tulczajn/
Czyli tam, gdzie wcześniej miałem --prefix dla binutils i gcc.
Kontynuuję kompilację poprzez:

Kod: Zaznacz cały

lis6502@debian:~/Desktop/sh3/linux-source-2.6.26$ make ARCH=sh CROSS_COMPILE=sh-elf-linux-
i jest dobrze, póki nie dojdzie do:

Kod: Zaznacz cały

 CC      arch/sh/mm/hugetlbpage.o
Wtedy wywala coś takiego:

Kod: Zaznacz cały

In file included from include/linux/hugetlb.h:11,
                 from arch/sh/mm/hugetlbpage.c:14:
include/asm/hugetlb.h: In function ‘prepare_hugepage_range’:
include/asm/hugetlb.h:19: error: ‘HPAGE_SHIFT’ undeclared (first use in this function)
include/asm/hugetlb.h:19: error: (Each undeclared identifier is reported only once
include/asm/hugetlb.h:19: error: for each function it appears in.)
make[1]: *** [arch/sh/mm/hugetlbpage.o] Błąd 1
make: *** [arch/sh/mm] Błąd 2
A kompilacja zatrzymuje się.
Moje pytanie brzmi: błąd w źródłach, czy może ja coś pominąłem? Dodam, że $tulczajn/include jest puste może o to chodzi?

[Dodano: 2008-11-25, 17:50]
Przyjrzawszy się bliżej konfiguracji jądra okazuje się, że docelowy procesor po prostu nie obsługuje hugetlb.

[Dodano: 2008-11-26, 11:56]
Okazuje się także, że same kompilatory nie wystarczą. Problem przy kompilacji pakietu gcc pojawiał się, gdy dochodziło do libgcc. Wywalało brak stdio.h i innych podstawowych plików nagłówkowych, a ja nie wiem gdzie tego szukać. Poszedłem na łatwiznę i przy gcc zrobiłem

Kod: Zaznacz cały

make all-gcc && make install-gcc
Kompilując ten sam pakiet w ten sam sposób, za to bez parametru target przechodzi gładko i idzie godzinami.

Gdzie mogę znaleźć te przeklęte podstawowe pliki nagłówkowe?


Edycja:

Dla wszystkich poszukujących, rozwiązaniem jest crosstool, okazuje się, że pakiety, które ściągałem są albo zbyt nowe, albo niekompatybilne ze sobą. Crosstool wygenerował mi niezbędny toolchain, nieśmiertelne ,,hello world'' ruszyło na docelowej maszynie.
Pragnę zaznaczyć, że jądro 2.6.26 nie działa.