私はスタートアップ 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
を取得する最も簡単な(そしてハッキングされていない)方法は 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
が必要です(できれば、デバッグシンボルで構築されたものが必要です-デフォルトのvmlinuz
- Ubuntuに付属しているesは、シンボルが削除されているため、ありません)。
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
まあ、これが役に立てば幸い
乾杯!
ソースをダウンロードして、次のコマンドを使用して独自にコンパイルできます。
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
でインストールできます。
これは古い質問であり、古い答えはもう私には役に立ちません(ubuntu 14.04)。
まず、vmlinux
はoprofile
ではオプションです。カーネル内で何が起こっているかを示すためにのみ必要です。ユーザー空間プロファイリングは、それなしで実行できます。 ドキュメントの詳細を読む 。
それでもvmlinux
が必要な場合は、ddebsリポジトリを追加します(恥知らずに取得 buntuの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
次に、カーネルのデバッグシンボルをインストールします。カーネルをアップグレードするたびに、これを再起動して、uname
が正しいカーネルバージョンを取得できるようにする必要があります。古いカーネルに関連するパッケージを自由に削除してください。
Sudo apt-get update
Sudo apt-get install linux-image-$(uname -r)-dbgsym
このパッケージがインストールされると、vmlinux
ファイルがここに表示されます:
/usr/lib/debug/boot/vmlinux-$(uname -r)
Linuxカーネル(vmlinuzファイル)を含むパッケージは、Debian/Ubuntuではlinux-image-VERSION-Archと呼ばれます。
コマンドdpkg -l linux-image-*
を使用してそれらを一覧表示でき、インストールされたパッケージ(最初の列にii
マークがある)の場合、dpkg -L linux-image-VERSION-Arch
を使用してファイルのリストを取得できます。 dpkg -L linux-image-2.6.31-17-386
は、最近のKarmicインストール用です。
l
は、最初のコマンドでは小文字、2番目のコマンドでは大文字であることに注意してください。
次のコマンドを試してください。
apt-get linux-image.*-dbg
通常、vmlinuxはインストール後に/ usr/lib/debug /にあります