2013-02-19 57 views
9

मैं विकास बोर्ड के लिए स्थापित एक टूलचैन के लिए जीसीसी विकल्प जानने की कोशिश कर रहा हूं, सबर-लाइट जो फ्रीस्केल के आईएमएक्स 6 क्वैड प्रोसेसर के आसपास आधारित है।एक फ्रीस्केल iMX6q एआरएम प्रोसेसर के लिए जीसीसी विकल्प

अब मुझे पता है कि iMX6 मूल रूप से एक कॉर्टेक्स-ए 9 प्रोसेसर है जिसमें सह-प्रोसेसर vfpv3 और नियॉन, और वेक्टर ग्राफिक्स, 2 डी और यहां तक ​​कि 3 डी इंजन भी हैं।

हालांकि, रिलीज नोट्स और उपयोग मार्गदर्शिका दस्तावेज़ इस बात पर स्पष्ट नहीं हैं कि जीसीसी में सक्षम किए जा सकने वाले किसी भी विकल्प को कैसे सक्षम किया जाए।

वास्तव में जिन विकल्पों के साथ मैं 'खेल' सकता हूं, वे निम्नलिखित हैं।

-march= armv7-a    - ok this one is pretty obvious. 
-mfpu= vfpv3/neon    - i can use only the vfpv3 co-processor, or both (respectively, depends on option) 
-mfloat-abi=softfp/soft/hard - I guess I can choose hard here, as there is hardware for fp operations 
-mcpu=cortex-a9    - is it option even necessary? it is not clear if it just an alias for -march or something else. 

क्या अन्य विकल्प मुझे सक्षम करना चाहिए? क्यों toolchain करता है के रूप में डिफ़ॉल्ट विकल्प लिनक्स कर्नेल/uboot निर्माण करने के लिए/पैकेज निम्नलिखित:

-march= armv7-a -mfpu= vfpv3 -mfloat-abi=softfp 

आपकी मदद

+4

आपका -mfloat-अबी से मेल खाना चाहिए जो भी ABI आपके सिस्टम पर प्रयोग किया जाता है। सॉफ्टफैप फ्लोटिंग पॉइंट हार्डवेयर का भी उपयोग करता है, लेकिन कॉलिंग सम्मेलन अलग-अलग होता है। आप "readelf -A/bin/ls" (उदाहरण के लिए) के साथ जांच सकते हैं। "टैग_एबीआई_वीएफपी_एआरएस: वीएफपी रजिस्ट्रार" का मतलब मुश्किल है। – unixsmurf

+0

बेहद उपयोगी, बहुत बहुत धन्यवाद! – nass

+0

(बेशक, यदि आप सिस्टम के मूल जीसीसी का उपयोग करके अपने लक्षित सिस्टम पर मूल रूप से संकलित कर रहे हैं, तो जो कुछ भी सही एबीआई संकलक में डिफ़ॉल्ट होगा, और छोड़ा जा सकता है।) – unixsmurf

उत्तर

6

उपयोग -mthumb -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mvectorize-with-neon-quad -mfloat-abi=softfp के लिए धन्यवाद। ध्यान दें कि डिफ़ॉल्ट रूप से संकलक एनईओएन का उपयोग कर फ्लोटिंग-पॉइंट ऑपरेटिंग को सदिश नहीं करेगा क्योंकि एनईओएन असामान्य संख्याओं का समर्थन नहीं करता है। यदि आप परिशुद्धता के कुछ नुकसान के साथ ठीक हैं तो आप -ffast-math स्विच जोड़कर फ्लोटिंग-पॉइंट के लिए जीएनसी उपयोग एनईओएन बना सकते हैं।

+2

अरे वहाँ, कृपया थोड़ा और विस्तृत करें। मुझे softfp का उपयोग क्यों करना चाहिए और कड़ी मेहनत नहीं करनी चाहिए? इसके अलावा -ओ 3, लिनक्स कर्नेल के लिए बहुत आक्रामक अनुकूलन है। नहीं? मेरा मतलब है कि मुझे यू-बूट, कर्नेल और पैकेज संकलित करने की कोशिश करने वाले दुःस्वप्न होने का खतरा है। नहीं? शेष विकल्पों के लिए धन्यवाद – nass

+2

सॉफ्टफैप और कड़ी के बीच का अंतर यह है कि फ़्लोटिंग-पॉइंट पैरामीटर कैसे पारित होते हैं और यह आपके द्वारा उपयोग किए जाने वाले लिनक्स वितरण पर निर्भर करता है। चूंकि आपके कंपाइलर में डिफ़ॉल्ट सॉफ्टफैप है, इसलिए यह संभव है कि आपका लिनक्स वितरण पूर्णांक रजिस्टरों में फ़्लोटिंग-पॉइंट पैरामीटर पास करता है (हालांकि, यह अभी भी एफपी ऑपरेशंस के लिए हार्डवेयर एफपीयू का उपयोग कर सकता है)। यदि आप केवल लिनक्स कर्नेल या यू-बूट संकलित करना चाहते हैं, तो कंपाइलर डिफ़ॉल्ट को न बदलें; उपरोक्त विकल्प उपयोगकर्ता स्पेस प्रोग्राम संकलित करने के लिए हैं। –

1

मैं सबकुछ का जवाब नहीं दे सकता, लेकिन '--softfp' का मतलब एफपीयू का उपयोग करना है, लेकिन कोड के साथ संगतता बनाए रखना है।

Slightly outdated ARM FP document