当前位置: 首页>>技术教程>>正文


Ubuntu安装上的vmlinux在哪里?

, ,

问题描述

我正在尝试启动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

我要寻找的是哪一个?

最佳方案

它应该在您的/boot目录中-mu Ubuntu实际上具有类似于vmlinuz-2.6.28-16-generic的压缩版本。

oprofile是否可以与这些功能配合使用不是我可以回答的问题。

次佳方案

在Ubuntu下获取vmlinux的最简单(非hacky)方法是到add ddebs repository

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)

第三种方案

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

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

现在,可以将vmlinuz解压缩到vmlinux文件中-但是,这并不容易。首先,您必须在vmlinuz中找到压缩文件开始的字节偏移,然后使用ddzcat仅解压缩必要的部分。详细地,这在“ [ubuntu] How to trace this bug? – Ubuntu Forums – post #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

好吧,希望这会有所帮助,

干杯!

第四种方案

您可以使用以下命令下载源代码并自行编译:

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软件包here并通过sudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb进行安装

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8589.html,未经允许,请勿转载。