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?

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.


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)

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é!


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


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)
    


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.


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


-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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.