2013-03-09 5 views
6

मुझे एक प्रोग्राम चलाने की ज़रूरत है जो मेरे बीगलबॉर्ड xM rev C पर ftd2xx का उपयोग करता है उबंटू 12.04 चला रहा है। मैं एआरएम लाइब्रेरी libftd2xx.so प्रदान करने की कोशिश कर रहा हूं। libFTDI एक विकल्प नहीं है।एआरएम v5 साझा पुस्तकालय (ftd2xx) एआरएम v7 मंच पर - हार्ड बनाम मुलायम फ्लोट मुद्दा

जो अंतर मैंने देखा है वह readelf -hA पर libftd2xx.so पर चल रहा है जो बीगल बोर्ड पर अन्य पुस्तकालय बनाम काम करता है। आर्क-विशिष्ट अनुभाग ओएस नाम को अन्य पुस्तकालयों और CPU_arch के बजाय "v5TEJ" के बजाय "v -TE" के रूप में "7-ए" के बजाय ftd2xx के लिए "ARM926EF-S" के रूप में देता है।

मुझे लगता है कि इसका मतलब है कि पुस्तकालय एआरएम v5 निर्देश सेट के लिए है, और बीगल बोर्ड एआरएम v7 चला रहा है। काम करने के लिए ftd2xx पाने का कोई तरीका है?

संपादित करें: मुझे बताया गया है कि एआरएम 7 एआरएम 5 के साथ पिछड़ा संगत है, लेकिन यह मेरी समस्या का समाधान नहीं करता है।

नोट करने की एक और बात यह है कि BeagleBoard पर ldd libftd2xx.so चल रहा है निर्भरता की सूची नहीं है, लेकिन not a dynamic executable प्रिंट करता है, जबकि यह अन्य पुस्तकालयों पर काम करता है।

संपादित करें 2:

मुद्दा एक नरम बनाम मुश्किल नाव ABI साथ हो रहा है। मेरे पास BeagleBoard xM पर एक gnueabihf छवि है। जब मैं स्थिर libftd2xx.a साथ एक उदाहरण कार्यक्रम को संकलित करने का प्रयास करें, मैं इनमें से अधिकतम मिलती है:, मैं

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

अगर मैं mfloat-abi=soft या mfloatabi=softfp साथ संकलित करने के लिए कोशिश

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

मैंने arm-linux-gnueabihf के बजाय arm-linux-gnueabi के साथ संकलन पार करने का भी प्रयास किया, लेकिन परिणामी प्रोग्राम बीगल बोर्ड पर निष्पादित नहीं होता है। क्या मैं कुछ भी कर सकता हूं या यह असंभव है?

--------- समाधान ----------------

कुछ परेशानी के बाद, FTDI मुझे अपने पुस्तकालय की एक हार्ड नाव संस्करण के साथ प्रदान जो काम करता है। मैं इसे यहाँ प्रदान कर रहा हूँ के बाद कई लोगों को व्यक्तिगत रूप से यह अनुरोध किया है:

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

+0

यह क्या है जो वास्तव में काम नहीं कर रहा है? मेजबान पर आप 'ldd' कहां चलाते हैं? 'readelf | grep साझा' कोशिश करें। आपको हाथ समर्थन या कुछ के साथ एक अजीब की आवश्यकता हो सकती है। (http://stackoverflow.com/questions/6150000/cross-compiler-ldd) आपको स्ट्रैक का उपयोग करने, लॉग की जांच आदि जैसी जानकारी के लिए और अधिक खोदने का प्रयास करना चाहिए। क्या आपने ftdi साइट से README पढ़ा था? – auselen

+0

मैं बीगल बोर्ड पर 'ldd' चलाता हूं, इसलिए यह पहले से ही एक एआरएम संस्करण से होना चाहिए (यह/usr/lib में एआरएम पुस्तकालयों पर काम करता है)। मैंने रीडेम पढ़ा और एफटीडीआई से कोई फायदा नहीं हुआ। मैंने स्ट्रेस को देखा है, लेकिन मुझे नहीं पता कि इसे कैसे समझना है। –

+0

पेस्ट स्ट्रेस कहीं और ... – auselen

उत्तर

3

v5TEJ v7-ए अनुदेश सेट का एक सबसेट है।

कोड थोड़ा धीमा हो सकता है और आवश्यकतानुसार थोड़ा बड़ा हो सकता है, लेकिन फिर भी अवैध निर्देशों के कारण इसे क्रैश किए बिना काम करना चाहिए। बहुत कम अपवादों के साथ एआरएम कोड पिछले निर्देश सेट के लिए पिछड़ा संगत है।

यदि कोड आपके प्लेटफ़ॉर्म पर काम नहीं करता है तो यह यूएसबी उपप्रणाली के लिए एक्सेस अधिकारों जैसे गायब होने की संभावना है।

+0

द्विआधारी रिटर्न w/no आउटपुट पर ldd चल रहा है। स्ट्रेस दिखाता है कि यह लाइब्रेरी की तलाश में है, जिसे अंत में पाता है। फिर, इसमें कुछ कॉल करने के लिए कुछ कॉल हैं और अंततः कोड 1 से निकलती हैं। यदि यह मदद करता है, तो मैं पूर्ण उत्तर के साथ अपना उत्तर अपडेट कर सकता हूं। –

+0

मैंने इस तथ्य को शामिल करने के लिए अपना प्रश्न संपादित किया है कि 'ldd libftd2xx.so' निर्भरताओं को मुद्रित नहीं करता है, जो मेरे दिमाग में अनुमति मुद्दों का उल्लंघन करता है। –

2

कृपया एआरएम 9 26 प्रोसेसर पर strace और ldd के लिए मेरा pastebin आउटपुट देखें। libftd2xx1.1.12 के अंदर द्विआधारी में एकाधिक प्रोसेसर हैं। सुनिश्चित करें कि आप release/build/arm926 का उपयोग कर रहे हैं। मैं एआरएम 9 26 सीपीयू पर statictest बाइनरी चला सकता हूं, जिसमें एग्लिब और लिनक्स 2.6.36 है।

ldd आउटपुट से, निम्नलिखित पुस्तकालयों की आवश्यकता है।

  • libdl.so.2 - गतिशील लोडिंग।
  • librt.so.1 - वास्तविक समय पुस्तकालय
  • libpthread.so.0 - pthreads
  • libgcc_s.so.1 - जीसीसी सहायकों।
  • libc.so.6 - eglibc लाइब्रेरी
  • ld-linux.so.3 - लिनक्स साझा लाइब्रेरी लोडर।

एक कार्यात्मक ldd की जरूरत नहीं है और निम्न आदेश पुस्तकालयों प्रदर्शित करना चाहिए,

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 

सत्यापित करें कि statictest द्विआधारी काम करते हैं। यदि ऐसा है, तो LD_LIBRARY_PATH को release/build/arm926/libftd2xx.so.1.1.12 स्थान पर सेट करने का प्रयास करें। strace आउटपुट से, पथ /lib/tls/v5l और /lib/tls/lib से अधिक पसंद किए जाते हैं। ऊपर सूचीबद्ध सभी पुस्तकालय /lib में होना चाहिए। आप उस स्थान पर ln (हार्ड लिंक) को आजमा सकते हैं। इसके अलावा, strace आउटपुट से, /proc/bus/usb फाइल सिस्टम को आरोहित किया जाना चाहिए। यह एक कर्नेल विन्यास विकल्प है। /sys/bus/usb/devices उपकरणों को खोजने के लिए बड़े पैमाने पर उपयोग किया जाता है; यह असंभव है कि यह आपके उबंटू 12.04 एआरएम लिनक्स पर गायब है। libd2xx_table.so भी है जो गैर मानक यूएसबी डिस्क्रिप्टर खोजने के लिए सबसे अधिक उपयोग किया जाता है।

अंत में, समस्या की अधिक वर्णनात्मक होने में मददगार होगा। आप कुछ प्रोग्राम चलाने की कोशिश करते हैं और कोई आउटपुट नहीं है? या आप प्रोग्राम चलाते हैं और इसमें अपवाद है? यदि statictestएआरएम बाइनरी चलाने में विफल रहता है, तो आपकी मूल धारणा सही हो सकती है। यह संभव है कि पुराने 2.6.32 कर्नेल (या ld-linux.so) को ARM926EJ-S संगत मिले लेकिन आपका नया उबंटू 12.04 इसे संगत नहीं ढूंढता है। इस मामले में, ld-linux.so पर्यावरण चर देखने के लिए पीसी होस्ट पर man ld-linux का उपयोग करें। विशेष रूप से, LD_DEBUG और LD_ASSUME_KERNEL लोडर को बाइनरी लोड करने के लिए संयोजित करने में सहायक हो सकता है।

+0

सहायता के लिए धन्यवाद - स्थैतिक परीक्षण नहीं चलता है, मेरा संपादन 2 देखें। यह एक कठिन बनाम मुलायम फ्लोट मुद्दा जैसा दिखता है - मैं कुछ भी कर सकता हूं? –

+0

आप 'softfp' और' arm-linux-gnueabi 'टूल के साथ सब कुछ स्थिर रूप से लिंक कर सकते हैं। वैकल्पिक रूप से, आप 'बांह-लिनक्स-gnueabi' उपकरण से अन्य साझा पुस्तकालयों (ऊपर सूचीबद्ध/'opt/lib/softfp') में सूचीबद्ध कर सकते हैं और उन्हें इंगित करने के लिए' LD_LIBRARY_PATH' सेट कर सकते हैं। 'हार्ड-फ्लोट' बनाम 'सॉफ्ट' सही अर्थ बनाता है। –

+0

क्षमा करें, मुझे यकीन नहीं है कि मैं समझता हूं, क्या आप यह स्पष्ट कर सकते हैं कि मुझे क्या करना चाहिए?यदि मैं 'arm-linux-gnueabi' के साथ statictest पार संकलित, कार्यक्रम BeagleBoard पर निष्पादित नहीं करता है। –

संबंधित मुद्दे