I'm trying to work with starting up oprofile, and I'm running into a problem at this step:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu has no package called vmlinux, and when I do a locate vmlinux, I get a lot of files:

/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

Which one of these is the one I'm looking for?

link|improve this question

80% accept rate
feedback

6 Answers

up vote 3 down vote accepted

It should be in your /boot directory - mu Ubuntu actually has compressed versions along the lines of vmlinuz-2.6.28-16-generic.

Whether oprofile can work with those is not a question I can answer.

link|improve this answer
3  
What's with the edit? superuser.com/posts/62576/revisions – Jonik Jan 31 '10 at 12:56
1  
oprofile can't work with vmlinuz it requires uncompressed kernel. – SaveTheRbtz Jul 12 '11 at 11:21
feedback

Hm, just wanted to put this as a comment to the above answer by @paxdiablo, but cannot find the comment button? Anyways..

The thing is that the vmlinuz file is compressed - and for debugging purposes, you need an uncompressed vmlinux one (and preferably one built with debugging symbols - which the default vmlinuz-es coming with Ubuntu do not have, as they are stripped of symbols).

Now, it is possible to unpack a vmlinuz into a vmlinux file - however, that is not trivial; first you have to find a byte offset in vmlinuz where the compressed file starts, and then use dd and zcat to unpack only the necessary part. In detail, this is explained in: "[ubuntu] How to trace this bug? - Ubuntu Forums - post #4"; in brief, below is my example terminal command log, based on that post:

$ 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

Well, hope this helps,

Cheers!

link|improve this answer
1  
There is special script in kernel's git for that extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/… – SaveTheRbtz Dec 16 '11 at 0:26
Many thanks, @SaveTheRbtz - had no idea abut that.. Cheers! – sdaau Feb 3 at 8:54
feedback

Easiest way to obtain vmlinux under Ubuntu is to add ddebs repository and install kernel debug symbols:

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

vmlinux then can be found here:

/usr/lib/debug/boot/vmlinux-$(uname -r)
link|improve this answer
feedback

Packages that contain linux kernel (the vmlinuz file) are called linux-image-VERSION-ARCH in Debian/Ubuntu.

You can list them with command dpkg -l linux-image-*, and for installed package (it has ii mark in first column) you can get a list of files in it with dpkg -L linux-image-VERSION-ARCH, e.g. dpkg -L linux-image-2.6.31-17-386 for a recent Karmic install.

Notice that l is lowercase in first command and uppercase in second.

link|improve this answer
feedback

it should be in your root ( / ). In ubuntu 8.10 it is a link pointing to /boot/vmlinuz-2.6.28-16-generic

do an

ls / -l | grep '^l'

you should find it

PS: not sure of the exact path name.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.