2013-03-09 37 views
6

Tôi cần chạy chương trình sử dụng ftd2xx trên BeagleBoard xM rev C chạy Ubuntu 12.04. Tôi đang cố gắng sử dụng thư viện ARM libftd2xx.so cung cấp . libFTDI không phải là một lựa chọn.Thư viện chia sẻ ARM v5 (ftd2xx) trên nền tảng ARM v7 - hard hard float issue

Sự khác biệt mà tôi nhận thấy xuất phát từ việc chạy readelf -hA trên libftd2xx.so so với các thư viện khác trên BeagleBoard hoạt động. Phần vòm cụ thể cung cấp tên hệ điều hành là "ARM926EF-S" cho ftd2xx thay vì "7-A" cho các thư viện khác và CPU_arch là "v5TEJ" thay vì "v7".

Tôi giả định điều này có nghĩa là thư viện dành cho tập lệnh ARM v5 và BeagleBoard đang chạy ARM v7. Có một số cách để có được ftd2xx để làm việc?

Chỉnh sửa: Tôi đã nói ARM7 tương thích ngược với ARM5, nhưng điều đó không giải quyết được sự cố của tôi.

Một điều cần lưu ý là chạy ldd libftd2xx.so trên BeagleBoard không liệt kê các phụ thuộc, nhưng in ra not a dynamic executable, trong khi nó hoạt động trên các thư viện khác.

CHỈNH SỬA 2:

Vấn đề có vẻ là với ABI mềm và cứng. Tôi có một hình ảnh gnueabihf trên BeagleBoard xM. Khi tôi cố gắng biên soạn một chương trình ví dụ với libftd2xx.a tĩnh, tôi nhận được rất nhiều những:

/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)

Nếu tôi cố gắng biên dịch với mfloat-abi=soft hoặc mfloatabi=softfp, tôi nhận được

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

Tôi cũng đã cố gắng để biên dịch với arm-linux-gnueabi thay vì arm-linux-gnueabihf, nhưng chương trình kết quả không thực thi trên BeagleBoard. Có điều gì tôi có thể làm hay không?

--------- GIẢI PHÁP ----------------

Sau khi gặp sự cố, FTDI đã cung cấp cho tôi phiên bản phao cứng của thư viện công trinh. Tôi đang cung cấp nó ở đây sau khi nhiều người đã từng yêu cầu nó:

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

+0

Điều gì không hoạt động chính xác? nơi nào bạn chạy 'ldd', trên máy chủ? thử 'readelf | grep Shared'. Bạn có thể cần một ldd với hỗ trợ cánh tay hoặc một cái gì đó. (http://stackoverflow.com/questions/6150000/cross-compiler-ldd) Bạn nên cố gắng tìm hiểu thêm thông tin như sử dụng strac, kiểm tra nhật ký, vv Bạn đã đọc README từ trang web ftdi chưa? – auselen

+0

Tôi chạy 'ldd' trên BeagleBoard, do đó, nó nên đã có một phiên bản ARM (nó hoạt động trên các thư viện ARM trong/usr/lib). Tôi đọc readme và liên lạc với FTDI vô ích. Tôi đã nhìn vào strace, nhưng tôi không biết làm thế nào để giải thích nó. –

+0

dán strace đến một nơi nào đó sau đó ... – auselen

Trả lời

3

v5TEJ là một tập hợp con của A v7 tập lệnh.

Mã có thể chạy chậm hơn một chút và có thể lớn hơn một chút so với yêu cầu, nhưng dù sao nó cũng hoạt động mà không bị lỗi do hướng dẫn bất hợp pháp hoặc như vậy. Với rất ít ngoại lệ, mã ARM tương thích ngược với các tập lệnh trước đó.

Nếu mã không hoạt động trên nền tảng của bạn, nó rất có thể là một cái gì đó khác như thiếu quyền truy cập vào hệ thống con USB hoặc như vậy.

+0

Chạy ldd trên trả về nhị phân w/không có đầu ra. strace cho thấy rằng nó đang tìm kiếm thư viện mà cuối cùng nó tìm thấy. Sau đó, nó có một vài cuộc gọi để lseek và cuối cùng thoát với mã 1. Nếu nó giúp, tôi có thể cập nhật câu trả lời của tôi với đầu ra đầy đủ. –

+0

Tôi đã chỉnh sửa câu hỏi của mình để bao gồm thực tế là 'ldd libftd2xx.so' không in ra các phụ thuộc, mà trong tâm trí của tôi quy định các vấn đề về quyền. –

2

Vui lòng xem sản phẩm pastebin của mình cho straceldd trên bộ xử lý ARM926. Các tệp nhị phân bên trong libftd2xx1.1.12 có nhiều bộ xử lý. Đảm bảo bạn đang sử dụng release/build/arm926. Tôi có thể chạy nhị phân statictest trên CPU ARM926, với eglibc và Linux 2.6.36.

Từ đầu ra ldd, các thư viện sau là bắt buộc.

  • libdl.so.2 - tải động.
  • librt.so.1 - real-time thư viện
  • libpthread.so.0 - pthreads
  • libgcc_s.so.1 - người giúp đỡ gcc.
  • libc.so.6 - thư viện eglibc
  • ld-linux.so.3 - trình tải thư viện được chia sẻ của Linux.

Một chức năng ldd là không cần thiết và các lệnh sau đây sẽ hiển thị các thư viện,

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 

Xác minh rằng các công việc nhị phân statictest. Nếu vậy, hãy thử đặt LD_LIBRARY_PATH thành vị trí release/build/arm926/libftd2xx.so.1.1.12. Từ đầu ra strace, các đường dẫn /lib/tls/v5l/lib/tls được ưu tiên hơn /lib. Tất cả các thư viện được liệt kê ở trên phải ở trong /lib. Bạn có thể thử ln (liên kết cứng) chúng đến vị trí đó. Ngoài ra, từ đầu ra strace, hệ thống tệp /proc/bus/usb phải được gắn kết. Đây là tùy chọn cấu hình hạt nhân. /sys/bus/usb/devices được sử dụng rộng rãi để tìm thiết bị; nó không chắc rằng điều này là mất tích trên Ubuntu 12.04 ARM Linux của bạn. Ngoài ra còn có một libd2xx_table.so có nhiều khả năng được sử dụng để tìm các bộ mô tả USB không chuẩn.

Cuối cùng, sẽ hữu ích khi mô tả vấn đề hơn. Bạn cố gắng chạy một số chương trình và không có đầu ra? Hoặc bạn chạy chương trình và nó có một ngoại lệ? Nếu mã hóa statictestARM không chạy được, thì giả thiết ban đầu của bạn có thể đúng. Có thể hạt nhân 2.6.32 cũ hơn (hoặc ld-linux.so) tìm thấy tương thích ARM926EJ-S nhưng Ubuntu 12.04 mới hơn của bạn không tìm thấy nó tương thích. Trong trường hợp này, hãy sử dụng man ld-linux trên máy chủ PC để xem các biến môi trường ld-linux.so. Cụ thể, LD_DEBUGLD_ASSUME_KERNEL có thể hữu ích để thu hút trình tải để tải các tệp nhị phân.

+0

Cảm ơn sự giúp đỡ - kiểm tra tĩnh không chạy, xem chỉnh sửa của tôi 2. Nó trông giống như một vấn đề nổi cứng vs mềm - bất cứ điều gì tôi có thể làm gì? –

+0

Bạn có thể liên kết tĩnh mọi thứ với các công cụ 'softfp' và' arm-linux-gnueabi'. Ngoài ra, bạn có thể cài đặt các thư viện chia sẻ khác (liệt kê ở trên trong một cái gì đó như '/ opt/lib/softfp') từ các công cụ' arm-linux-gnueabi' và đặt 'LD_LIBRARY_PATH' để trỏ đến chúng. 'hard-float' so với' soft' có ý nghĩa hoàn hảo. –

+0

Xin lỗi, tôi không chắc tôi hiểu, bạn có thể làm rõ những gì tôi nên thử không?Nếu tôi cross-compile statictest với 'arm-linux-gnueabi', chương trình không thực hiện trên BeagleBoard. –