मेरे Ubuntu स्थापना पर vmlinux कहाँ है?


16

मैं काम करने के लिए कोशिश कर रहा हूँ शुरू के साथ oprofile , और मैं इस कदम पर एक समस्या में चल रहा हूँ:

opcontrol --vmlinux=/path/to/vmlinux

उबंटू के पास vmlinux नाम का कोई पैकेज नहीं है, और जब मैं एक काम करता locate vmlinuxहूं, तो मुझे बहुत सारी फाइलें मिलती हैं:

/usr/src/linux-headers-2.6.28-14/arch/h8300/boot/compressed/vmlinux.lds
/usr/src/linux-headers-2.6.28-14/arch/m68k/kernel/vmlinux-std.lds
/usr/src/linux-headers-2.6.28-14/arch/m68k/kernel/vmlinux-sun3.lds
/usr/src/linux-headers-2.6.28-14/arch/mn10300/boot/compressed/vmlinux.lds
/usr/src/linux-headers-2.6.28-14/arch/sh/boot/compressed/vmlinux_64.lds
/usr/src/linux-headers-2.6.28-14/arch/x86/boot/compressed/vmlinux_32.lds
/usr/src/linux-headers-2.6.28-14/arch/x86/boot/compressed/vmlinux_64.lds
/usr/src/linux-headers-2.6.28-14/include/asm-generic/vmlinux.lds.h
/usr/src/linux-headers-2.6.28-15/arch/h8300/boot/compressed/vmlinux.lds
/usr/src/linux-headers-2.6.28-15/arch/m68k/kernel/vmlinux-std.lds
/usr/src/linux-headers-2.6.28-15/arch/m68k/kernel/vmlinux-sun3.lds
/usr/src/linux-headers-2.6.28-15/arch/mn10300/boot/compressed/vmlinux.lds
/usr/src/linux-headers-2.6.28-15/arch/sh/boot/compressed/vmlinux_64.lds
/usr/src/linux-headers-2.6.28-15/arch/x86/boot/compressed/vmlinux_32.lds
/usr/src/linux-headers-2.6.28-15/arch/x86/boot/compressed/vmlinux_64.lds
/usr/src/linux-headers-2.6.28-15/include/asm-generic/vmlinux.lds.h
/usr/src/linux-headers-2.6.28-16/arch/h8300/boot/compressed/vmlinux.lds
/usr/src/linux-headers-2.6.28-16/arch/m68k/kernel/vmlinux-std.lds
/usr/src/linux-headers-2.6.28-16/arch/m68k/kernel/vmlinux-sun3.lds
/usr/src/linux-headers-2.6.28-16/arch/mn10300/boot/compressed/vmlinux.lds
/usr/src/linux-headers-2.6.28-16/arch/sh/boot/compressed/vmlinux_64.lds
/usr/src/linux-headers-2.6.28-16/arch/x86/boot/compressed/vmlinux_32.lds
/usr/src/linux-headers-2.6.28-16/arch/x86/boot/compressed/vmlinux_64.lds
/usr/src/linux-headers-2.6.28-16/include/asm-generic/vmlinux.lds.h

इनमें से कौन सा एक है जिसकी मुझे तलाश है?

जवाबों:


2

यह आपकी /bootनिर्देशिका में होना चाहिए - म्यू उबंटू वास्तव में की तर्ज पर संकुचित संस्करण हैं vmlinuz-2.6.28-16-generic

चाहे oprofile उन लोगों के साथ काम कर सकता है जो कोई सवाल नहीं है जिसका मैं जवाब दे सकता हूं।


3
एडिट के साथ क्या है? superuser.com/posts/62576/revisions
जोनिक

5
oprofile vmlinuzइसके साथ काम नहीं कर सकता है इसके लिए असम्पीडित कर्नेल की आवश्यकता होती है।
SaveTheRbtz

9
vmlinux vmlinuz के समान नहीं है
gsingh2011

24

vmlinuxउबंटू के तहत प्राप्त करने का सबसे आसान (और नॉन-हैकी) तरीका है डेडबोज रिपॉजिटरी को जोड़ना :

echo "deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-security main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-proposed main restricted universe multiverse" | \
sudo tee -a /etc/apt/sources.list.d/ddebs.list

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 428D7C01

और कर्नेल डीबग प्रतीक स्थापित करें:

sudo apt-get update
sudo apt-get install linux-image-$(uname -r)-dbgsym

vmlinux तो यहाँ पाया जा सकता है:

/usr/lib/debug/boot/vmlinux-$(uname -r)

यह स्वीकृत उत्तर होना चाहिए।
दान

12

हम्म, सिर्फ @paxdiablo द्वारा उपरोक्त जवाब के लिए एक टिप्पणी के रूप में यह करना चाहता था, लेकिन टिप्पणी बटन नहीं मिल सकता है? वैसे भी ..

बात यह है कि vmlinuzफ़ाइल संकुचित है - और डिबगिंग उद्देश्यों के लिए, आपको एक असम्पीडित की vmlinuxआवश्यकता है (और अधिमानतः एक डिबगिंग प्रतीकों के साथ बनाया गया है - जो कि vmlinuzउबंटू के साथ आने वाले डिफ़ॉल्ट -es के पास नहीं है, क्योंकि वे प्रतीकों को छीन लिया गया है)।

अब, vmlinuzकिसी vmlinuxफ़ाइल में अनपैक करना संभव है - हालाँकि, यह तुच्छ नहीं है; सबसे पहले आपको एक बाइट ऑफसेट ढूंढनी होगी, vmlinuzजिसमें कंप्रेस्ड फ़ाइल शुरू होती है, और उसके बाद केवल आवश्यक भाग का उपयोग करें ddऔर zcatअनपैक करें। विस्तार से, इस में समझाया गया है: " [ubuntu] इस बग का पता लगाने के लिए कैसे? - Ubuntu मंच - पोस्ट # 4 "; संक्षेप में, उस पोस्ट के आधार पर मेरा उदाहरण टर्मिनल कमांड लॉग है:

$ od -A d -t x1 /boot/vmlinuz-$(uname -r) | grep '1f 8b 08 00' --colour
0013920 f3 a5 fc 5e 8d 83 70 23 3d 00 ff e0 *1f 8b 08 00*

$ wcalc 13920+12
 = 13932

$ dd if=/boot/vmlinuz-$(uname -r) bs=1 skip=13932 | zcat > vmlinux-$(uname -r)
4022132+0 records in
4022132+0 records out
4022132 bytes (4,0 MB) copied, 42,1695 s, 95,4 kB/s

gzip: stdin: decompression OK, trailing garbage ignored


$ file vmlinux-2.6.32-25-generic 
vmlinux-2.6.32-25-generic: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped

खैर, उम्मीद है कि यह मदद करता है,

चीयर्स!


3
इसके लिए कर्नेल के git में विशेष स्क्रिप्ट है extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz

बहुत धन्यवाद, @SaveTheRbtz - को पता ही नहीं चला कि .. चीयर्स!
सदाउ

इसे डिफ़ॉल्ट उत्तर के रूप में चिह्नित किया जाना चाहिए। धन्यवाद!
अमोल सेल

3

आप स्रोत डाउनलोड कर सकते हैं और निम्नलिखित कमांड का उपयोग करके अपना खुद का संकलन कर सकते हैं:

apt-get source linux-image-$(uname -r)
apt-get build-dep --no-install-recommends linux-image-$(uname -r)
cd linux-2.6.32/
fakeroot make -f debian/rules binary-generic skipdbg=false  

या आप यहां ddeb पैकेज डाउनलोड कर सकते हैं और इसे इंस्टॉल कर सकते हैंsudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb


2

यह एक पुराना प्रश्न है, और पुराने उत्तर मेरे लिए अब काम नहीं करते (ubuntu 14.04)।

  1. सबसे पहले, इसके vmlinuxलिए वैकल्पिक हैoprofile , आपको केवल यह दिखाने की आवश्यकता है कि कर्नेल के अंदर क्या हो रहा है, उपयोगकर्ता-स्थान प्रोफाइलिंग इसके बिना किया जा सकता है। डॉक में और पढ़ें

  2. यदि आपको अभी भी आवश्यकता है vmlinux, तो डीडब्स भंडार जोड़ें (बेशर्मी से उबंटू के विकी से लिया गया ):

    codename=$(lsb_release -c | awk  '{print $2}')
    sudo tee /etc/apt/sources.list.d/ddebs.list << EOF
    deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse
    deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse
    deb http://ddebs.ubuntu.com/ ${codename}-updates  main restricted universe multiverse
    deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse
    EOF
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECDCAD72428D7C01
    
  3. फिर अपने कर्नेल के लिए डिबग प्रतीक स्थापित करें । हर बार जब आप अपना कर्नेल अपग्रेड करते हैं, तो रिबूट करने के बाद ऐसा करना चाहिए ताकि unameसही कर्नेल संस्करण प्राप्त हो सके। पुरानी गुठली से जुड़े पैकेज को हटाने के लिए स्वतंत्र महसूस करें।

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. एक बार यह पैकेज स्थापित हो जाने के बाद, आपको vmlinuxफ़ाइल यहाँ मिलेगी :

    /usr/lib/debug/boot/vmlinux-$(uname -r)
    


0

जिन पैकेजों में लिनक्स कर्नेल (vmlinuz फ़ाइल) होती है, उन्हें डेबियन या उबंटू में linux-image-VERSION-ARCH कहा जाता है।

आप उन्हें कमांड के साथ सूचीबद्ध कर सकते हैं dpkg -l linux-image-*, और इंस्टॉल किए गए पैकेज के लिए (इसमें iiपहले कॉलम में निशान है) आप इसके साथ फ़ाइलों की एक सूची प्राप्त कर सकते हैं dpkg -L linux-image-VERSION-ARCH, उदाहरण के dpkg -L linux-image-2.6.31-17-386लिए हाल ही में स्थापित कर्म के लिए।

ध्यान दें कि lपहले कमांड में लोअरकेस है और दूसरे में अपरकेस।


0

निम्नलिखित कमांड आज़माएं:

apt-get linux-image.*-dbg

आमतौर पर vmlinux / usr / lib / डीबग / स्थापना के बाद पता लगाता है


-1

यह आपके मूल (/) में होना चाहिए। Ubuntu 8.10 में यह /boot/vmlinuz-2.6.28-16-generic की ओर इशारा करते हुए एक लिंक है

करो

ls / -l | grep '^l'

आपको इसे ढूंढना चाहिए

पुनश्च: सटीक पथ नाम के बारे में निश्चित नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.