Où est vmlinux sur mon installation Ubuntu?

16

J'essaie de travailler avec le démarrage de oprofile et je rencontre un problème à cette étape:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu n'a pas de paquet appelé vmlinux, et quand je fais un locate vmlinux , j'obtiens beaucoup de fichiers:

/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

Laquelle de celles-ci est celle que je recherche?

Jason Baker
la source

Réponses:

2

Il devrait être dans votre /bootrépertoire - mu Ubuntu a en fait des versions compressées dans le sens de vmlinuz-2.6.28-16-generic.

La question de savoir si oprofile peut fonctionner avec ceux-ci n'est pas une question à laquelle je peux répondre.

aléatoire
la source
3
Qu'est-ce que le montage? superuser.com/posts/62576/revisions
Jonik
5
oprofile ne peut pas fonctionner avec vmlinuzcela nécessite un noyau non compressé.
SaveTheRbtz
9
vmlinux n'est pas la même chose que vmlinuz
gsingh2011
24

Le moyen le plus simple (et non hacky) d'obtenir vmlinuxsous Ubuntu est d' ajouter le référentiel 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

et installez les symboles de débogage du noyau:

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

vmlinux alors peut être trouvé ici:

/usr/lib/debug/boot/vmlinux-$(uname -r)
SaveTheRbtz
la source
Ce devrait être la réponse acceptée.
Dan
12

Hm, je voulais juste mettre cela en commentaire à la réponse ci-dessus par @paxdiablo, mais vous ne trouvez pas le bouton de commentaire? Quoi qu'il en soit ..

Le fait est que le vmlinuzfichier est compressé - et à des fins de débogage, vous avez besoin d'un fichier non compressé vmlinux(et de préférence un construit avec des symboles de débogage - qui par défautvmlinuz fournis avec Ubuntu n'ont pas, car ils sont dépourvus de symboles).

Maintenant, il est possible de décompresser un fichier vmlinuzdans un vmlinuxfichier - mais ce n'est pas anodin; vous devez d'abord trouver un décalage d'octet à l' vmlinuzendroit où le fichier compressé commence, puis utiliser ddet zcatdécompresser uniquement la partie nécessaire. En détail, cela est expliqué dans: " [ubuntu] Comment tracer ce bogue? - Forums Ubuntu - post # 4 "; en bref, voici mon exemple de journal de commande de terminal, basé sur ce post:

$ 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

Eh bien, j'espère que cela vous aidera,

À votre santé!

sdaau
la source
3
Il y a un script spécial dans le git du noyau pour cela extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz
Merci beaucoup, @SaveTheRbtz - n'avait aucune idée de cela .. Bravo!
sdaau
Cela devrait être marqué comme réponse par défaut. Merci!
Vente Amol
3

vous pouvez télécharger la source et compiler la vôtre en utilisant la commande suivante:

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  

ou vous pouvez télécharger le package ddeb ici et l'installer ensudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb

Harry
la source
2

C'est une vieille question, et les anciennes réponses ne fonctionnent plus pour moi (Ubuntu 14.04).

  1. Tout d'abord, vmlinuxest facultatif pouroprofile , vous n'en avez besoin que pour montrer ce qui se passe à l'intérieur du noyau, le profilage de l'espace utilisateur peut être fait sans lui. En savoir plus dans le doc .

  2. Si vous en avez encore besoin vmlinux, ajoutez le dépôt ddebs (pris sans vergogne sur le wiki d'ubuntu ):

    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. Installez ensuite les symboles de débogage pour votre noyau . Vous devez le faire chaque fois que vous mettez à niveau votre noyau, après le redémarrage pour unameobtenir la bonne version du noyau. N'hésitez pas à supprimer les packages associés aux anciens noyaux.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Une fois ce package installé, vous trouverez le vmlinuxfichier ici :

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

Les paquets qui contiennent le noyau linux (le fichier vmlinuz) sont appelés linux-image-VERSION-ARCH dans Debian / Ubuntu.

Vous pouvez les lister avec la commande dpkg -l linux-image-*, et pour le paquet installé (il a la iimarque dans la première colonne) vous pouvez obtenir une liste de fichiers avec dpkg -L linux-image-VERSION-ARCH, par exempledpkg -L linux-image-2.6.31-17-386 pour une installation récente de Karmic.

Notez que lc'est en minuscule dans la première commande et en majuscule dans la seconde.

whitequark
la source
0

Essayez la commande suivante:

apt-get linux-image.*-dbg

généralement le vmlinux se trouve dans / usr / lib / debug / après l'installation

rivière
la source
-1

il devrait être dans votre racine (/). Dans ubuntu 8.10, c'est un lien pointant vers /boot/vmlinuz-2.6.28-16-generic

faire un

ls / -l | grep '^l'

tu devrais le trouver

PS: pas sûr du nom de chemin exact.

déostroll
la source