Wo ist vmlinux auf meiner Ubuntu-Installation?

16

Ich versuche, mit dem Starten von oprofile zu arbeiten , und in diesem Schritt tritt ein Problem auf:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu hat kein Paket namens vmlinux, und wenn ich a mache locate vmlinux, bekomme ich viele Dateien:

/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

Welches davon suche ich?

Jason Baker
quelle

Antworten:

2

Es sollte in Ihrem /bootVerzeichnis sein - mu Ubuntu hat tatsächlich komprimierte Versionen im Sinne von vmlinuz-2.6.28-16-generic.

Ob oprofile damit umgehen kann, ist keine Frage, die ich beantworten kann.

zufällig
quelle
3
Was ist mit der Bearbeitung? superuser.com/posts/62576/revisions
Jonik
5
oprofile kann damit nicht arbeiten vmlinuzund benötigt einen unkomprimierten Kernel.
SaveTheRbtz
9
vmlinux ist nicht dasselbe wie vmlinuz
gsingh2011
24

Der einfachste (und nicht hackige) Weg, um vmlinuxunter Ubuntu zu erhalten, ist das Hinzufügen eines ddebs-Repositorys :

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

und installiere Kernel Debug Symbole:

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

vmlinux dann finden Sie hier:

/usr/lib/debug/boot/vmlinux-$(uname -r)
SaveTheRbtz
quelle
Dies sollte die akzeptierte Antwort sein.
Dan,
12

Hm, wollte dies nur als Kommentar zu der obigen Antwort von @paxdiablo setzen, kann aber den Kommentar-Button nicht finden? Sowieso..

Die Sache ist, dass die vmlinuzDatei komprimiert ist - und für Debugging-Zwecke benötigen Sie eine unkomprimierte vmlinux(und vorzugsweise eine mit Debugging- vmlinuzSymbolen erstellte).

Jetzt ist es möglich, ein vmlinuzin eine vmlinuxDatei zu entpacken - das ist jedoch nicht trivial; Zuerst müssen Sie einen Byte-Offset finden, in vmlinuzdem die komprimierte Datei beginnt, und dann nur den erforderlichen Teil mit ddund zcatentpacken. Im Detail wird dies erklärt in: " [ubuntu] Wie kann man diesen Fehler verfolgen? - Ubuntu Forums - post # 4 "; Kurz gesagt, unten ist mein Beispiel für ein Terminalbefehlsprotokoll, das auf diesem Beitrag basiert:

$ 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

Nun, ich hoffe, das hilft,

Prost!

sdaau
quelle
3
Dafür gibt es ein spezielles Skript in Kernels Git extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz
Vielen Dank, @SaveTheRbtz - hatte keine Ahnung, dass .. Prost!
Sdaau
Dies sollte als Standardantwort markiert werden. Vielen Dank!
Amol Sale
3

Mit dem folgenden Befehl können Sie den Quellcode herunterladen und Ihren eigenen kompilieren:

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  

oder Sie können das ddeb-Paket hier herunterladen und installierensudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb

Harry
quelle
2

Dies ist eine alte Frage, und alte Antworten funktionieren für mich nicht mehr (Ubuntu 14.04).

  1. Zuallererst vmlinuxist es optional füroprofile , Sie brauchen es nur, um zu zeigen, was im Kernel passiert. User-Space-Profiling kann ohne es durchgeführt werden. Lesen Sie mehr in der Dokumentation .

  2. Wenn Sie immer noch brauchen vmlinux, fügen Sie das Ddebs-Repository hinzu (schamlos aus Ubuntus Wiki entnommen ):

    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. Dann Debug - Symbole für Ihren Kernel installieren . Sie müssen dies jedes Mal tun, wenn Sie Ihren Kernel aktualisieren, nachdem Sie neu gestartet haben, damit unamedie richtige Kernel-Version erhalten wird. Fühlen Sie sich frei, Pakete zu entfernen, die mit alten Kerneln verbunden sind.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Sobald dieses Paket installiert ist, finden Sie die vmlinuxDatei hier :

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

Pakete, die den Linux-Kernel (die vmlinuz-Datei) enthalten, heißen in Debian / Ubuntu linux-image-VERSION-ARCH.

Sie können sie mit dem Befehl dpkg -l linux-image-*auflisten und für das installierte Paket (es ist iiin der ersten Spalte markiert) können Sie eine Liste der darin enthaltenen Dateien abrufen dpkg -L linux-image-VERSION-ARCH, z. B. dpkg -L linux-image-2.6.31-17-386für eine kürzliche Karmic-Installation.

Beachten Sie, dass lim ersten Befehl Kleinbuchstaben und im zweiten Großbuchstaben verwendet werden.

Whitequark
quelle
0

Versuchen Sie den folgenden Befehl:

apt-get linux-image.*-dbg

Normalerweise befindet sich das vmlinux nach der Installation in / usr / lib / debug /

Fluss
quelle
-1

Es sollte sich in Ihrer Wurzel (/) befinden. In Ubuntu 8.10 ist es ein Link, der auf /boot/vmlinuz-2.6.28-16-generic verweist

mach ein

ls / -l | grep '^l'

du solltest es finden

PS: Ich weiß nicht genau, wie der Pfad heißt.

deostroll
quelle