Thursday 15 May 2014

android - Reading Cycle Count register on ARM cortex-a8 -


मैं एक एआरएम कॉर्टेक्स-ए 8 सीपीयू पर एंबुलर पर एंड्रॉइड देशी लाइब्रेरी से चक्र गिनती रजिस्टर को पढ़ने की कोशिश कर रहा हूं।

यहां दो रजिस्टरों के बारे में लिंक्स हैं जो मुझे पढ़ने और लिखने की कोशिश कर रहे हैं:

यहां मैंने जो किया है:

  1. मॉड्यूल लोडिंग को सक्षम करने के लिए .config फ़ाइल में पंक्ति CONFIG_MODULES = y के साथ एक संशोधित सुनहरी कर्नेल के साथ शुरू किया गया।

  2. निम्न सी से एक मॉड्यूल बनाया फ़ाइल: android_module.c <पूर्व> #include & lt; linux / module.h & gt; #include & lt; linux / kernel.h & gt; MODULE_LICENSE ("जीपीएल"); Int init_module (शून्य) {/ * कार्यक्षमता काउंटर * / asm volatile ("एमसीआर पी 15, 0,% 0, सी 9, सी 14, 0 \ n":: "आर" (1)) के लिए उपयोगकर्ता-मोड पहुंच सक्षम करें; / * काउंटर ओवरफ़्लो इंटरप्ट (केवल मामले में) * / एएसएम वाष्पशील ("एमसीआर पी 15, 0,% 0, सी 9, सी 14, 2 \ n \ t" :: "आर" (0x8000000 एफ)) अक्षम करें; Printk (KERN_INFO "सीसीआर तक उपयोगकर्ता-स्तर की पहुंच चालू हो गई है। \ N"); वापसी 0; } शून्य क्लीनअप_मॉड्यूल (शून्य) {प्रिंटक (केर्एन_जॉफो "अलविदा मॉड्यूल \ n"); }

  3. लाइब्रेरी में निम्नलिखित पंक्तियां हैं जो चक्र काउंटर को पढ़ने का प्रयास करती हैं:

      अहस्ताक्षरित पूर्ण परिणाम; Asm volatile ("MRC p15, 0,% 0, c9, c13, 0 \ n \ t": "= r" (परिणाम): :);   
  4. मैं मॉड्यूल को फिर से इम्यूलेटर में डालता हूं:

      $ adb  
      & lt; 6> उपयोगकर्ता- सीसीआर के लिए स्तर का उपयोग चालू कर दिया गया है।   

    इसलिए मुझे पता है कि मॉड्यूल स्थापित किया गया है। हालांकि जब मैं लाइब्रेरी का उपयोग करने वाला ऐप चलाता हूं, तो मुझे लैककैट में निम्न संदेश मिलता है और ऐप समाप्त होता है।

      06-20 19: 16: 03.860: ए / लिबसी (806): घातक 0x4e 9c31b8 (कोड = 1) में 4 संकेत (SIGILL), धागा 826 (थ्रेड -75)   

    क्या किसी को भी पता है कि मुझे अभी भी यह त्रुटि क्यों मिल रही है? यह तब चला जाता है जब मैं चक्र की गणना रजिस्टर में प्रवेश करने की कोशिश कर रहा लाइन को हटा देता हूं, तो कुछ मुझे कैसे पढ़ने की इजाजत नहीं देनी चाहिए, भले ही मुझे लगता है कि मैंने पढ़ने की इजाजत नहीं दी।

    मुझे लगता है कि आप इस समस्या को देख रहे हैं क्योंकि आपको सभी कोर के लिए उपयोगकर्ता-मोड पहुंच सक्षम करना है On_each_cpu का उपयोग करके देखें, और देखें कि यह काम करता है।

No comments:

Post a Comment