web-dev-qa-db-ja.com

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

これらのどれが私が探しているものですか?

16
Jason Baker

/bootディレクトリ-mu Ubuntuは実際にはvmlinuz-2.6.28-16-generic

Oprofileがそれらで動作できるかどうかは、私が回答できる問題ではありません。

1
paxdiablo

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)
25
SaveTheRbtz

うーん、@ paxdiabloによる上記の回答へのコメントとしてこれを入れたかったのですが、コメントボタンが見つかりませんか?いずれかの方法..

重要なのは、vmlinuzファイルが圧縮されていることです。デバッグの目的で、圧縮されていないvmlinuxが必要です(できれば、デバッグシンボルで構築されたものが必要です-デフォルトのvmlinuz- Ubuntuに付属しているesは、シンボルが削除されているため、ありません)。

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

まあ、これが役に立てば幸い

乾杯!

12
sdaau

ソースをダウンロードして、次のコマンドを使用して独自にコンパイルできます。

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でインストールできます。

3
Harry

これは古い質問であり、古い答えはもう私には役に立ちません(ubuntu 14.04)。

  1. まず、vmlinuxoprofileではオプションです。カーネル内で何が起こっているかを示すためにのみ必要です。ユーザー空間プロファイリングは、それなしで実行できます。 ドキュメントの詳細を読む

  2. それでも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
    
  3. 次に、カーネルのデバッグシンボルをインストールします。カーネルをアップグレードするたびに、これを再起動して、unameが正しいカーネルバージョンを取得できるようにする必要があります。古いカーネルに関連するパッケージを自由に削除してください。

    Sudo apt-get update
    Sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. このパッケージがインストールされると、vmlinuxファイルがここに表示されます

    /usr/lib/debug/boot/vmlinux-$(uname -r)
    
2
Antoine
1
Dan Kegel

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番目のコマンドでは大文字であることに注意してください。

0
whitequark

次のコマンドを試してください。

apt-get linux-image.*-dbg

通常、vmlinuxはインストール後に/ usr/lib/debug /にあります

0
river