Di mana vmlinux pada instalasi Ubuntu saya?

16

Saya mencoba untuk bekerja dengan memulai oprofile , dan saya mengalami masalah pada langkah ini:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu tidak memiliki paket yang disebut vmlinux, dan ketika saya melakukan locate vmlinux, saya mendapatkan banyak file:

/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

Yang mana dari yang ini yang saya cari?

Jason Baker
sumber

Jawaban:

2

Itu harus di /bootdirektori Anda - mu Ubuntu sebenarnya memiliki versi terkompresi di sepanjang baris vmlinuz-2.6.28-16-generic.

Apakah oprofile dapat bekerja dengan mereka bukanlah pertanyaan yang bisa saya jawab.

acak
sumber
3
Ada apa dengan hasil edit? superuser.com/posts/62576/revisi
Jonik
5
oprofile tidak dapat bekerja vmlinuzdengannya membutuhkan kernel yang tidak terkompresi.
SaveTheRbtz
9
vmlinux tidak sama dengan vmlinuz
gsingh2011
24

Cara termudah (dan non-hacky) untuk mendapatkan di vmlinuxbawah Ubuntu adalah menambahkan repositori ddebs :

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

dan instal simbol debug kernel:

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

vmlinux maka dapat ditemukan di sini:

/usr/lib/debug/boot/vmlinux-$(uname -r)
SaveTheRbtz
sumber
Ini harus menjadi jawaban yang diterima.
Dan
12

Hm, hanya ingin menempatkan ini sebagai komentar pada jawaban di atas oleh @paxdiablo, tetapi tidak dapat menemukan tombol komentar? Bagaimanapun ..

Masalahnya adalah bahwa vmlinuzfile dikompresi - dan untuk tujuan debugging, Anda memerlukan yang tidak terkompresi vmlinux(dan lebih disukai yang dibangun dengan simbol debugging - yang default-nya vmlinuzdatang dengan Ubuntu tidak miliki, karena mereka dilucuti simbol).

Sekarang, dimungkinkan untuk membongkar file vmlinuzke dalam vmlinuxfile - namun, itu tidak sepele; pertama Anda harus menemukan byte offset di vmlinuzmana file terkompresi dimulai, dan kemudian gunakan dddan zcatuntuk membongkar hanya bagian yang diperlukan. Secara rinci, ini dijelaskan dalam: " [ubuntu] Bagaimana cara melacak bug ini? - Forum Ubuntu - posting # 4 "; secara singkat, di bawah ini adalah contoh log perintah terminal saya, berdasarkan posting itu:

$ 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

Yah, semoga ini membantu,

Bersulang!

sdaau
sumber
3
Ada skrip khusus di kernel git untuk itu extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz
Banyak terima kasih, @SaveTheRbtz - tidak tahu tentang itu .. Ceria!
sdaau
Ini harus ditandai sebagai jawaban default. Terima kasih!
Penjualan Amol
3

Anda dapat mengunduh sumber dan kompilasi sendiri menggunakan perintah berikut:

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  

atau Anda dapat mengunduh paket ddeb di sini dan menginstalnya dengansudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb

Harry
sumber
2

Ini adalah pertanyaan lama, dan jawaban lama tidak berfungsi lagi untuk saya (ubuntu 14.04).

  1. Pertama-tama, vmlinuxadalah opsional untukoprofile , Anda hanya perlu untuk menunjukkan apa yang terjadi di dalam kernel, pembuatan profil ruang-pengguna dapat dilakukan tanpa itu. Baca lebih lanjut di dokumen .

  2. Jika Anda masih membutuhkan vmlinux, tambahkan repositori ddebs (tanpa malu-malu diambil dari wiki ubuntu ):

    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. Kemudian instal simbol debug untuk kernel Anda . Anda harus melakukan ini setiap kali Anda memutakhirkan kernel Anda, setelah reboot jadiuname mendapatkan versi kernel yang tepat. Jangan ragu untuk menghapus paket yang terkait dengan kernel lama.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Setelah paket ini diinstal, Anda akan menemukan vmlinuxfile di sini :

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

Paket yang berisi kernel linux (file vmlinuz) disebut linux-image-VERSION-ARCH di Debian / Ubuntu.

Anda dapat mencantumkannya dengan perintah dpkg -l linux-image-*, dan untuk paket yang diinstal ( iiditandai di kolom pertama), Anda dapat memperoleh daftar file di dalamnya dpkg -L linux-image-VERSION-ARCH, misalnyadpkg -L linux-image-2.6.31-17-386 untuk pemasangan Karmic baru-baru ini.

Perhatikan bahwa lhuruf kecil di perintah pertama dan huruf besar di detik.

whitequark
sumber
0

Coba perintah berikut:

apt-get linux-image.*-dbg

biasanya vmlinux menempatkan di / usr / lib / debug / setelah instalasi

sungai
sumber
-1

itu harus di root Anda (/). Di ubuntu 8.10 itu adalah tautan yang menunjuk ke /boot/vmlinuz-2.6.28-16-generic

lakukan

ls / -l | grep '^l'

kamu harus menemukannya

PS: tidak yakin nama path yang tepat.

deostroll
sumber