Ubuntu安装上的vmlinux在哪里?


16

我正在尝试启动oprofile,并且在此步骤遇到了问题:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu没有名为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

我要寻找的是哪一个?

Answers:



24

vmlinux在Ubuntu下获取的最简单(且非hacky)方法是添加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

并安装内核调试符号:

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

vmlinux 然后可以在这里找到:

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

这应该是公认的答案。
2014年

12

嗯,只是想将其作为对@paxdiablo的上述答案的评论,但找不到评论按钮?无论如何..

事实是该vmlinuz文件已压缩-为了调试,您需要一个未压缩的文件vmlinux(最好是一个带有调试符号的文件vmlinuz-Ubuntu附带的默认符号没有,因为它们被去除了符号)。

现在,可以将a解压缩vmlinuzvmlinux文件中了-但是,这并不容易。首先,您必须vmlinuz在压缩文件的开始位置找到一个字节偏移,然后使用ddzcat仅解压缩必要的部分。详细信息对此进行了解释:“ [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-vmlinuxgit.kernel.org/?p=linux
SaveTheRbtz 2011年

非常感谢@SaveTheRbtz-不知道那是..干杯!
sdaau'2

这应该标记为默认答案。谢谢!
Amol Sale

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,您只需要使用它来显示内核内部发生的情况,而无需使用它就可以进行用户空间分析。在doc中阅读更多内容

  2. 如果仍然需要vmlinux,请添加ddebs存储库从ubuntu的Wiki中无耻地获取):

    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

包含linux内核(vmlinuz文件)的软件包在Debian / Ubuntu中称为linux-image-VERSION-ARCH。

您可以使用command列出它们dpkg -l linux-image-*,对于已安装的软件包(ii第一列中带有标记),可以使用来获取其中的文件列表dpkg -L linux-image-VERSION-ARCH,例如,dpkg -L linux-image-2.6.31-17-386用于最近的Karmic安装。

请注意,l在第一个命令中小写,在第二个命令中大写。


0

尝试以下命令:

apt-get linux-image.*-dbg

安装后,通常vmlinux位于/ usr / lib / debug /中


-1

它应该在您的根目录(/)中。在ubuntu 8.10中,它是指向/boot/vmlinuz-2.6.28-16-generic的链接

做一个

ls / -l | grep '^l'

你应该找到它

PS:不确定确切的路径名。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.