2013-01-04 30 views
14

मैं लक्ष्य मशीन के रूप में ARMv7 का उपयोग कर रहा हूं। मैंने लक्ष्य के लिए लिनक्स स्रोत 2.6.34.13 संकलित किया है।एआरएम पर kgdb का उपयोग कैसे करें ??

लक्ष्य मिनीकॉम का उपयोग कर धारावाहिक बंदरगाह के माध्यम से होस्ट (लिनक्स विकास मशीन) से जुड़ा हुआ है।

लक्ष्य नए कर्नेल के साथ लोड किया गया है और कमांड प्रॉम्प्ट में केजीडीबी सक्षम है।

$ echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc 
$ echo g > /proc/sysrq-trigger 

केजीडीबी दर्ज करना ... संदेश प्रदर्शित होता है और आदेशों के लिए प्रतीक्षा करता है।

होस्ट पक्ष में,

$arm-none-linux-gnueabi-gdb vmlinux 

    gdb > set remotebaud 115200 
    gdb > set debug remote 1 
    gdb > target remote /dev/ttyS0 

इस के बाद, कुछ आदेश संचार डिफ़ॉल्ट रूप से जगह लेता है।

  1. qSupported होस्ट से लक्ष्य में भेजा जाता है। लेकिन qSuppoted लक्ष्य द्वारा समर्थित नहीं है इसलिए $ # 00 वापस आ गया है। इसी तरह ?, HC-1 आदेश भेजे गए थे लेकिन उचित प्रतिक्रिया प्राप्त हुई।

  2. लेकिन qOffsets कमांड से कोई प्रतिक्रिया प्राप्त नहीं हुई है।

मुझे vmlinux पर संदेह है। अगर मैं gdb में list देते हैं, अपने कोड के 10 लाइनों दिखाई नहीं दे रहा क्योंकि बजाय इसे

arch/arm/kernel/head.S : No such file or directory. 

नोट :: कर्नेल संकलन सर्वर में किया कहते हैं। इसलिए विकास मशीन में कोई स्रोत उपलब्ध नहीं है। लेकिन आर्म-जीडीबी सिर की तलाश में है। ऐसा लगता है।

मुझे यकीन नहीं है कि मैं क्या गलती कर रहा हूं। मुझे पूरे कर्नेल के लिए लोड होने के लिए प्रतीकों की आवश्यकता है। इस संबंध में मुझे गाइड करें।

+0

मुझे यकीन नहीं है, लेकिन क्या आपके पास डिबगिंग के लिए "होस्ट" पर संकलित कर्नेल है? और आपने कहीं और कोड नहीं ले जाया है? – anishsane

+1

यही कारण है कि यह स्रोत खोजने में असमर्थ है? – anishsane

+0

क्या 'kgdb' को स्रोत कोड उपलब्ध होने की आवश्यकता है? शायद कोड की तलाश न करने के लिए 'kgdb' बताने के लिए एक कमांड लाइन विकल्प है। – BenjiWiebe

उत्तर

1

अंततः लाइन विलंब के बसों की स्थापना के लिए लक्षित संचार के लिए होस्ट करें। विकास मशीन और टाइम-आउट मुद्दों में कर्नेल स्रोत के बीच कोई संबंध नहीं है।

कुछ आदेशों के लिए टाइम-आउट प्रकार के मुद्दे के लिए qOffset और qSupported को सीरियल पोर्ट संचार उपकरण के रूप में मिनीकॉम के बजाय जीटीकेटीएम का उपयोग करके हल किया जाता है। अंतर GtkTerm में "लाइन विलंब" विकल्प है। इसलिए जब यह ~ 250 पर कॉन्फ़िगर किया गया है, उसके बाद कोई टाइमआउट संदेश नहीं है। बस कनेक्शन स्थापित और डिफ़ॉल्ट ब्रेक पॉइंट पर इंतजार कर रहा है। यदि कोई जानता है कि यह "line delay" मिनीिकॉम में कैसे सभी को और अधिक सहायक होगा।

हां, हमें निष्पादित करने के लिए list कमांड के लिए स्रोत कोड की आवश्यकता है। लेकिन उन स्रोतों के बिना, हम si, bt को डीबग कर सकते हैं vmlinux और system.map की सहायता से निष्पादित किया जा सकता है।

नोट :: सेट डीबग रिमोट 1 आवश्यक नहीं है। यह कमांड संचार के लिए होस्ट का विस्तृत प्रदर्शन देता है। अधिक विस्तृत दृश्य के लिए, set debug serial 1

+0

क्या यह एक उत्तर है? – unwind

+0

इसका एक अवलोकन। – Jeyaram

1

कि kgdb सिर की तलाश में है। कोई त्रुटि नहीं है। यदि आप here देखते हैं तो आप देखेंगे कि एक सिर है। स्रोत पेड़ में फ़ाइल। यह एक असेंबलर फ़ाइल है जो सब कुछ है। इस मंच के लिए असेंबलर में लिखी कई स्रोत फाइलें हैं।

यह सामान्य है, क्योंकि कुछ निर्देश विशेष रूप से बूट अनुक्रम और अन्य "निम्न-स्तरीय" कार्यक्षमताओं को असेंबलर में लिखा जाता है क्योंकि यह आसान है।

जैसा कि पहले से ही टिप्पणियों में लिखा गया है, डीडीबीबी को डीबगिंग के दौरान ब्राउज़ करने के लिए स्रोतों की आवश्यकता है। डीबग-सेक्शन में, जिसमें डीबग-प्रतीकों होते हैं और -g के साथ जीसीसी चलाते समय जेनरेट होते हैं, स्रोत-फ़ाइल और लाइन और कॉलम के साथ "केवल" संदर्भ होते हैं। जीसी के साथ डीबग-प्रतीकों के बारे में अधिक जानकारी और आगे के लिंक के लिए here देखें।

कि kgdb head.S की तलाश में है एक अच्छा संकेत है कि आप सही काम कर रहे हैं। यदि आपके पास स्रोत उपलब्ध हैं (और यह सही संस्करण की टैरबॉल को अनदेखा करने के समान सरल हो सकता है) बस इस स्रोत-पेड़ के अंदर किलोडब चलाएं या -d तर्क का उपयोग करें, स्रोत-खोज-पथ जोड़ने के लिए, पाठ्यक्रम की अपनी विकास मशीन पर ।

+0

जानकारीपूर्ण है। धन्यवाद। – Jeyaram