2013-03-09 10 views
6

Potrzebuję uruchomić program, który używa ftd2xx na moim BeagleBoard xM rev C z systemem Ubuntu 12.04. Próbuję użyć biblioteki ARM libftd2xx.so pod warunkiem . libFTDI nie jest opcją.Wspólna biblioteka ARM v5 (ftd2xx) na platformie ARM v7 - dysk twardy vs miękki numer

Różnica, którą zauważyłem, pochodzi z działającego readelf -hA na libftd2xx.so w porównaniu z innymi bibliotekami BeagleBoard, które działają. Sekcja specyficzna dla archa daje nazwę OS jako "ARM926EF-S" dla ftd2xx zamiast "7-A" dla innych bibliotek i CPU_arch jako "v5TEJ" zamiast "v7".

Zakładam, że oznacza to, że biblioteka jest przeznaczona dla zestawu instrukcji ARM v5, a BeagleBoard działa z ARM v7. Czy jest jakiś sposób, aby uruchomić ftd2xx?

Edycja: Powiedziano mi, że ARM7 jest wstecznie zgodny z ARM5, ale to nie rozwiązuje mojego problemu.

Inną rzeczą, na którą trzeba zwrócić uwagę, jest to, że uruchomienie ldd libftd2xx.so na BeagleBoard nie wyświetla zależności, ale wypisuje not a dynamic executable, podczas gdy działa na innych bibliotekach.

EDIT 2:

Problem wydaje się być miękką vs ciężko pływaka ABI. Mam obraz gnueabihf na BeagleBoard xM. Kiedy próbuję skompilować przykładowy program ze statycznym libftd2xx.a, mam wiele z nich:

/usr/bin/ld: error: static_link_uses VFP register arguments, libftd2xx.a(file.o) does not
/usr/bin/ld: failed to merge target specific data of file libftd2xx.a(file.o)

Gdy próbuję skompilować z mfloat-abi=soft lub mfloatabi=softfp, mam

In file included from /usr/include/stdio.h:28:0,
from main.c:12:
/usr/include/features.h:324:26 fatal error: bits/predef.h: No such file or directory
compilation terminated

Próbowałem również przejść kompilację z arm-linux-gnueabi zamiast arm-linux-gnueabihf, ale wynikowy program nie jest wykonywany na BeagleBoard. Czy jest coś, co mogę zrobić, czy to niemożliwe?

--------- ROZWIĄZANIE ----------------

Po pewnym kłopoty FTDI mi z twardej wersji pływaka ich biblioteki, która Prace. Przytaczam go tutaj po wielu ludzi indywidualnie zwróciła go:

https://s3.amazonaws.com/hayk-public/arm926-hf.zip

+0

Co dokładnie nie działa? gdzie uruchamiasz 'ldd', na hoście? spróbuj 'readelf | grep Shared'. Możesz potrzebować ldd z obsługą ramienia lub czymś podobnym. (http://stackoverflow.com/questions/6150000/cross-compiler-ldd) Powinieneś spróbować wykopać więcej informacji, takich jak używanie strac, sprawdzanie dzienników itp. Czy przeczytałeś README ze strony ftdi? – auselen

+0

Uruchamiam 'ldd' na BeagleBoard, więc powinien już być przez wersję ARM (działa na bibliotekach ARM w/usr/lib). Przeczytałem readme i skontaktowałem się z FTDI bez skutku. Patrzyłem na strace, ale nie wiem, jak to interpretować. –

+0

Wklej strace do czegoś, a następnie ... – auselen

Odpowiedz

3

v5TEJ jest podzbiorem V7-A zestawu instrukcji.

Kod może działać nieco wolniej i może być nieco większy niż wymagany, ale mimo to powinien działać bez awarii z powodu nielegalnych instrukcji. Z bardzo nielicznymi wyjątkami kod ARM jest wstecznie zgodny z wcześniejszymi zestawami instrukcji.

Jeśli kod nie działa na platformie, najprawdopodobniej coś innego, jak brakujące prawa dostępu do podsystemu USB.

+0

Uruchamianie LDD na binarnych zwrotach bez wyjścia. strace pokazuje, że szuka biblioteki, którą ostatecznie znajduje. Następnie ma kilka wywołań do lseek i ostatecznie wychodzi z kodem 1. Jeśli to pomoże, mogę zaktualizować swoją odpowiedź z pełnym wyjściem. –

+0

Zmieniłem moje pytanie, dodając fakt, że 'ldd libftd2xx.so' nie drukuje zależności, co moim zdaniem wyklucza problemy z uprawnieniami. –

2

Proszę zobaczyć moje dane wyjściowe pastebin dla strace i ldd na procesorze ARM926. Pliki binarne wewnątrz libftd2xx1.1.12 mają wiele procesorów. Upewnij się, że używasz release/build/arm926. Mogę uruchomić plik binarny statictest na procesorze ARM926, z eglibc i Linux 2.6.36.

Z danych wyjściowych ldd wymagane są następujące biblioteki.

  • - dynamiczne ładowanie.
  • librt.so.1 - real-time library
  • libpthread.so.0 - pthreads
  • libgcc_s.so.1 - gcc pomocników.
  • libc.so.6 - biblioteka eglibc
  • ld-linux.so.3 - ładowarka do biblioteki współużytkowanej Linux.

Funkcjonalny ldd nie jest potrzebne i następujące polecenie powinno wyświetlić bibliotek,

LD_TRACE_LOADED_OBJECTS=1 LD_WARN=yes LD_BIND_NOW=yes LD_VERBOSE=yes \ 
/lib/ld-linux.so.3 ./libftd2xx.so.1.1.12 

Sprawdź, czy statictest pracy binarnym. Jeśli tak, spróbuj ustawić LD_LIBRARY_PATH w lokalizacji release/build/arm926/libftd2xx.so.1.1.12. Z wyjścia strace ścieżki /lib/tls/v5l i /lib/tls są preferowane w stosunku do /lib. Wszystkie wymienione powyżej biblioteki powinny być w /lib. Możesz spróbować ln (twardy link) je do tej lokalizacji. Ponadto, z wyjścia strace, należy zamontować system plików /proc/bus/usb. To jest opcja konfiguracji jądra. /sys/bus/usb/devices jest szeroko stosowany do znajdowania urządzeń; jest mało prawdopodobne, aby tego nie było w systemie Ubuntu 12.04 ARM Linux. Istnieje również libd2xx_table.so, który jest najprawdopodobniej używany do znajdowania niestandardowych deskryptorów USB.

Na koniec warto opisać problem. Próbujesz uruchomić jakiś program i nie ma wyjścia? Lub uruchamiasz program i ma wyjątek? Jeśli plik binarny nie zostanie uruchomiony, twoje pierwotne założenie może być prawidłowe. Możliwe, że starsze jądro 2.6.32 (lub ld-linux.so) znajdzie kompatybilne z ARM926EJ-S, ale twój nowszy Ubuntu 12.04 nie uzna go za kompatybilny. W takim przypadku należy użyć man ld-linux na hoście komputera PC, aby zobaczyć zmienne środowiskowe ld-linux.so. W szczególności, LD_DEBUG i LD_ASSUME_KERNEL może być pomocne do nakłonienia programu ładującego do załadowania plików binarnych.

+0

Dzięki za pomoc - test statyczny nie działa, zobacz moją edycję 2. Wygląda na trudny problem z płynnym unosić - wszystko, co mogę zrobić? –

+0

Możesz statycznie powiązać wszystko za pomocą narzędzi 'softfp' i' arm-linux-gnueabi'. Alternatywnie, możesz zainstalować inne biblioteki współdzielone (wymienione powyżej w czymś takim jak '/ opt/lib/softfp') z narzędzi' arm-linux-gnueabi' i ustawić 'LD_LIBRARY_PATH' tak, aby wskazywały na nie. 'hard-float' versus' soft' ma doskonały sens. –

+0

Przepraszam, nie jestem pewien, czy rozumiem, czy możesz wyjaśnić, co powinienem spróbować?Jeśli dokonam cross-kompilacji statystyk z 'arm-linux-gnueabi', program nie zostanie wykonany na BeagleBoard. –