Jas*_*ker 16 linux kernel ubuntu
我正在尝试启动oprofile,但在这一步遇到了问题:
opcontrol --vmlinux=/path/to/vmlinux
Run Code Online (Sandbox Code Playgroud)
Ubuntu 没有叫 vmlinux 的包,当我执行 a 时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
Run Code Online (Sandbox Code Playgroud)
其中哪一个是我要找的?
Sav*_*btz 26
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
Run Code Online (Sandbox Code Playgroud)
并安装内核调试符号:
sudo apt-get update
sudo apt-get install linux-image-$(uname -r)-dbgsym
Run Code Online (Sandbox Code Playgroud)
vmlinux 然后可以在这里找到:
/usr/lib/debug/boot/vmlinux-$(uname -r)
Run Code Online (Sandbox Code Playgroud)
sda*_*aau 12
嗯,只是想将其作为@paxdiablo 对上述答案的评论,但找不到评论按钮?无论如何..
问题是该vmlinuz文件是压缩的 - 出于调试目的,您需要一个未压缩的文件vmlinux(最好是用调试符号构建的文件 - vmlinuzUbuntu 附带的默认-es 没有,因为它们被剥离了符号)。
现在,可以将 a 解压缩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
Run Code Online (Sandbox Code Playgroud)
嗯,希望这有帮助,
干杯!
小智 1
它应该在你的/boot目录中 -mu Ubuntu 实际上有压缩版本,类似于vmlinuz-2.6.28-16-generic.
oprofile 是否可以与这些一起工作不是我可以回答的问题。