¿Dónde está vmlinux en mi instalación de Ubuntu?

16

Estoy tratando de trabajar con el inicio de oprofile , y me encuentro con un problema en este paso:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu no tiene un paquete llamado vmlinux, y cuando hago un locate vmlinux, recibo muchos archivos:

/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

¿Cuál de estos es el que estoy buscando?

Jason Baker
fuente

Respuestas:

2

Debería estar en su /bootdirectorio: mu Ubuntu realmente tiene versiones comprimidas en la línea de vmlinuz-2.6.28-16-generic.

No puedo responder si el oprofile puede funcionar con ellos.

al azar
fuente
3
¿Qué pasa con la edición? superuser.com/posts/62576/revisions
Jonik
55
oprofile no puede funcionar vmlinuzrequiere kernel sin comprimir.
SaveTheRbtz
99
vmlinux no es lo mismo que vmlinuz
gsingh2011
24

La forma más fácil (y no hacky) de obtener vmlinuxen Ubuntu es agregar el repositorio 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

e instalar símbolos de depuración del kernel:

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

vmlinux entonces se puede encontrar aquí:

/usr/lib/debug/boot/vmlinux-$(uname -r)
SaveTheRbtz
fuente
Esta debería ser la respuesta aceptada.
Dan
12

Hm, ¿solo quería poner esto como un comentario a la respuesta anterior de @paxdiablo, pero no puede encontrar el botón de comentario? De todos modos ..

La cuestión es que el vmlinuzarchivo está comprimido, y para fines de depuración, necesita vmlinuxuno sin comprimir (y preferiblemente uno construido con símbolos de depuración) que los predeterminados que vmlinuzvienen con Ubuntu no tienen, ya que están desprovistos de símbolos).

Ahora, es posible descomprimir vmlinuzun vmlinuxarchivo en un archivo; sin embargo, eso no es trivial; primero debe encontrar un desplazamiento de bytes en el lugar vmlinuzdonde comienza el archivo comprimido, y luego usar ddy zcatdesempaquetar solo la parte necesaria. En detalle, esto se explica en: " [ubuntu] ¿Cómo rastrear este error? - Foros de Ubuntu - post # 4 "; en resumen, a continuación se muestra mi registro de comandos de terminal de ejemplo, basado en esa publicación:

$ 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

Bueno, espero que esto ayude,

¡Salud!

sdaau
fuente
3
Hay un script especial en kernel's git para eso extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz
Muchas gracias, @SaveTheRbtz - no tenía idea de eso ... ¡Salud!
sdaau
Esto debe marcarse como respuesta predeterminada. ¡Gracias!
Venta de Amol
3

puedes descargar la fuente y compilar la tuya usando el siguiente comando:

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  

o puede descargar el paquete ddeb aquí e instalarlosudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb

Harry
fuente
2

Esta es una pregunta antigua, y las respuestas antiguas ya no funcionan para mí (ubuntu 14.04).

  1. En primer lugar, vmlinuxes opcional paraoprofile , solo lo necesita para mostrar lo que está sucediendo dentro del núcleo, el perfil del espacio de usuario se puede hacer sin él. Lea más en el doc .

  2. Si aún lo necesita vmlinux, agregue el repositorio ddebs (tomado descaradamente de la wiki de 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. Luego instale símbolos de depuración para su núcleo . Debe hacer esto cada vez que actualice su kernel, después de reiniciar para unameobtener la versión correcta del kernel. Siéntase libre de eliminar paquetes asociados con núcleos antiguos.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Una vez que este paquete esté instalado, encontrará el vmlinuxarchivo aquí :

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

Los paquetes que contienen kernel de Linux (el archivo vmlinuz) se llaman linux-image-VERSION-ARCH en Debian / Ubuntu.

Puede enumerarlos con el comando dpkg -l linux-image-*y para el paquete instalado (tieneii marca en la primera columna) puede obtener una lista de archivos con dpkg -L linux-image-VERSION-ARCH, por ejemplo, dpkg -L linux-image-2.6.31-17-386para una instalación Karmic reciente.

Observe que les minúscula en el primer comando y mayúscula en el segundo.

Whitequark
fuente
0

Pruebe el siguiente comando:

apt-get linux-image.*-dbg

generalmente vmlinux se ubica en / usr / lib / debug / después de la instalación

río
fuente
-1

debería estar en su raíz (/). En ubuntu 8.10 es un enlace que apunta a /boot/vmlinuz-2.6.28-16-generic

hacer un

ls / -l | grep '^l'

deberías encontrarlo

PD: no estoy seguro del nombre exacto de la ruta.

deostroll
fuente