उद्देश्य: यह है कि हम देखो करने के लिए कैसे एक प्रतीक नाम (समारोह या एक चर) यह कर्नेल dmesg लॉग और ठीक इसके विपरीत में outputted उस पते से देखेंगे जिसमें एक छोटी पोस्ट है.

नोट: यह एक उफ़ या कर्नेल पैनिक करता है जब लिनक्स कर्नेल डिबग करने पर एक विधिपत्र नहीं है कि कृपया ध्यान दें. मैं कुछ बाद की तारीख में उन विषयों को कवर किया जाएगा हो सकता है.

आप अपने कर्नेल उन्नयन और आप अपने सिस्टम पर कम से कम नग्न आंखों को ठीक बूट करने के लिए प्रकट होता है, भले ही अपने dmesg लॉग में निम्नलिखित विसंगति नोटिस हम कहते हैं:

[ 24.155180] irq 17: nobody cared (try booting with the "irqpoll" option)
[ 24.155284] Pid: 0, comm: swapper Not tainted 2.6.32-bpo.5-686 #1
[ 24.155373] Call Trace:
[ 24.155463] [<c106cf75>] ? __report_bad_irq+0x24/0x69
[ 24.155554] [<c106cf7c>] ? __report_bad_irq+0x2b/0x69
[ 24.155644] [<c106d0a1>] ? note_interrupt+0xe7/0x13e
[ 24.155734] [<c106d5cf>] ? handle_fasteoi_irq+0x7a/0x97
[ 24.155827] [<c1004dd7>] ? handle_irq+0x17/0x1b
[ 24.155915] [<c1004659>] ? do_IRQ+0x38/0x89
[ 24.156002] [<c10037f0>] ? common_interrupt+0x30/0x38
[ 24.156096] [<c10400d8>] ? ftrace_raw_output_workqueue_insertion+0x80/0x8c
[ 24.156192] [<c104f06e>] ? tick_nohz_stop_sched_tick+0x34a/0x36e
[ 24.156285] [<c1002367>] ? cpu_idle+0x67/0xa4
[ 24.156375] [<c13bf7fc>] ? start_kernel+0x318/0x31d
[ 24.156461] handlers:
[ 24.156539] [<f7cc3855>] (usb_hcd_irq+0x0/0x71 [usbcore])
[ 24.156755] Disabling IRQ #17

अब हम आप के ऊपर उच्च तकनीकी उत्पादन का मतलब क्या करता है समझने के लिए कहना चाहते हैं. चलो पिक ऊपर से एक लाइन से बाहर लाल रंग में एक कहते हैं और हम यह मामला नहीं हो सकता है, हालांकि इस लाइन ओह, यह आम तौर पर सबसे पहले है या क्योंकि एक वास्तविक में, हमारे ऊपर विसंगति के बारे में उपयोगी जानकारी दे सकता है ग्रहण सबसे उपयोगी डिबगिंग जानकारी उपलब्ध कराई है कि नामों में अंतिम पंक्ति. के निम्न पंक्ति में क्या उन स्तंभों में से प्रत्येक का अर्थ है एक के बाद एक को समझें:

? handle_irq + 0x17 / 0x1b [24.155827] [<c1004dd7>]? Handle_irq + 0x17 / 0x1b

[24.155827] लिनक्स कर्नेल द्वारा मुद्रित timestamps जानकारी है. यह बस लिनक्स कर्नेल बूटिंग शुरू होने के बाद इस लाइन उत्पादन 24 सेकंड बाद लगभग था कि इसका मतलब है.

, in the System Map table. [<C1004dd7>] में समारोह, handle_irq का पता (चलो बस अब के लिए कहते हैं) है, सिस्टम नक्शा मेज.

handle_irq लिनक्स कर्नेल कोड में "अपमानजनक" समारोह का नाम है.

0x17 ऑफसेट है (और नहीं पंक्ति संख्या) मूल रूप से ऊपर कार्रवाई में शामिल किया गया है कि समारोह में कोड का टुकड़ा को बताते हैं जो.

. 0x1b समारोह, handle_irq के आकार है. ). ऑफसेट (0x17) हमेशा समारोह (0x1b) के आकार से कम होना चाहिए.

अब देखते हैं कि कैसे आप अपने लिनक्स कर्नेल स्थापित करने पर उत्पन्न होता है कि सिस्टम नक्शा तालिका फ़ाइल से संबंधित इस जानकारी.

निम्न आदेश दे:

# cat /boot/System.map-2.6.32-bpo.5-686 | grep handle_irq

आप उसके अनुसार अपनी कर्नेल सिस्टम नक्शा तालिका फ़ाइल का नाम स्थानापन्न करने की आवश्यकता होगी.

आउटपुट:

c1004dc0 T handle_irq
c100cffc t intel_pmu_handle_irq
c100d2a4 t p6_pmu_handle_irq
c100d3bd t amd_pmu_handle_irq

कि हम अपने हमलावर समारोह लगता है कि क्या है के बाद से हम पहली पंक्ति में रुचि रखते हैं. that we found in the output above. हालांकि, पता c1004dc0 हम ऊपर उत्पादन में पाया कि पता (c1004dd7) के साथ मैच नहीं करता है. तो कैसे हम इन नंबरों में सामंजस्य है?

ie के c1004dd7 यानी से हेक्स संख्या c1004dc0 घटाना करने की कोशिश करते हैं

c1004dd7 - c1004dc0 = 17

बिंगो! संख्या हम विसंगति में मिल गया है कि उत्पादन, 0x17, साथ 17 मैचों. तो संक्षेप में प्रस्तुत करने के लिए:

. c1004dc0 समारोह handle_irq के शुरू पता है.

c1004dd7 समारोह में कोड का टुकड़ा का (ऊपर प्रारंभिक पते पर 17 को जोड़ने के बाद) पता है.

इसी प्रकार, यदि आप उपरोक्त dmesg उत्पादन से cpu_idle और start_kernel जैसे अन्य कार्यों के लिए इन अभ्यास कर सकते हैं.

यह बात है!

मिलनसार होना, शेयर!