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

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

मान लीजिए कि आप अपने कर्नेल उन्नयन हम कहते हैं और आप अपने सिस्टम पर कम से कम नग्न आंखों को ठीक बूट करने के लिए प्रकट होता है, भले ही अपने 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 + 0×17 / 0x1b [24.155827] [<c1004dd7>]? Handle_irq + 0 × 17 / 0x1b

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

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

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

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

. 0x1b समारोह, handle_irq का आकार है. ). (0 × 17) हमेशा समारोह के आकार से कम होना चाहिए ऑफसेट (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

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

. c1004dc0 समारोह handle_irq का मूल्य उस पते है.

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

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

यह बात है!

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