Onde está o vmlinux na minha instalação do Ubuntu?

16

Estou tentando trabalhar com a inicialização do oprofile e estou com um problema nesta etapa:

opcontrol --vmlinux=/path/to/vmlinux

O Ubuntu não possui um pacote chamado vmlinux e, quando faço isso locate vmlinux, recebo muitos arquivos:

/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

Qual desses é o que eu estou procurando?

Jason Baker
fonte

Respostas:

2

Ele deve estar no seu /bootdiretório - mu Ubuntu realmente tem versões compactadas ao longo das linhas de vmlinuz-2.6.28-16-generic.

Se o oprofile pode funcionar com isso não é uma pergunta que eu possa responder.

aleatório
fonte
3
O que há com a edição? superuser.com/posts/62576/revisions
Jonik
5
O oprofile não pode trabalhar com vmlinuzele, requer um kernel descompactado.
SaveTheRbtz
9
vmlinux não é o mesmo que vmlinuz
gsingh2011
24

A maneira mais fácil (e não hacky) de obter vmlinuxno Ubuntu é adicionar o repositório 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 instale símbolos de depuração do kernel:

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

vmlinux então pode ser encontrado aqui:

/usr/lib/debug/boot/vmlinux-$(uname -r)
SaveTheRbtz
fonte
Essa deve ser a resposta aceita.
Dan
12

Hum, só queria colocar isso como um comentário na resposta acima de @paxdiablo, mas não consegue encontrar o botão de comentário? Enfim..

O problema é que o vmlinuzarquivo está compactado - e, para fins de depuração, você precisa de um arquivo descompactado vmlinux(e de preferência um construído com símbolos de depuração - que o padrão vmlinuz-es que vem com o Ubuntu não possui, pois são despojados de símbolos).

Agora, é possível descompactar a vmlinuzem um vmlinuxarquivo - no entanto, isso não é trivial; primeiro, você precisa encontrar um deslocamento de bytes no local vmlinuzonde o arquivo compactado é iniciado e, em seguida, usar dde zcatdescompactar apenas a parte necessária. Em detalhes, isso é explicado em: " [ubuntu] Como rastrear esse bug? - Ubuntu Forums - post # 4 "; em resumo, abaixo está o meu exemplo de log de comando do terminal, com base nesse 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

Bem, espero que isso ajude,

Felicidades!

sdaau
fonte
3
Existe um script especial no git do kernel para isso extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz
Muito obrigado, @SaveTheRbtz - não fazia ideia disso .. Saúde!
Sdaau
Isso deve ser marcado como resposta padrão. Obrigado!
Amol Sale
3

você pode baixar o código-fonte e compilar o seu usando o seguinte 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  

ou você pode baixar o pacote ddeb aqui e instalá-losudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb

atormentar
fonte
2

Esta é uma pergunta antiga, e as respostas antigas não funcionam mais para mim (ubuntu 14.04).

  1. Antes de tudo, vmlinuxé opcionaloprofile , você só precisa mostrar o que está acontecendo dentro do kernel; a criação de perfil no espaço do usuário pode ser feita sem ele. Leia mais no documento .

  2. Se você ainda precisar vmlinux, adicione o repositório ddebs (descaradamente retirado do wiki do 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. Em seguida, instale símbolos de depuração no seu kernel . Você deve fazer isso sempre que atualizar seu kernel, após a reinicialização, para unameobter a versão correta do kernel. Sinta-se livre para remover pacotes associados a kernels antigos.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Após a instalação deste pacote, você encontrará o vmlinuxarquivo aqui :

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

Pacotes que contêm o kernel do Linux (o arquivo vmlinuz) são chamados linux-image-VERSION-ARCH no Debian / Ubuntu.

Você pode listá-los com o comando dpkg -l linux-image-*e, para o pacote instalado (ele possui uma iimarca na primeira coluna), é possível obter uma lista de arquivos dpkg -L linux-image-VERSION-ARCH, por exemplo, dpkg -L linux-image-2.6.31-17-386para uma instalação recente do Karmic.

Observe que lestá em minúscula no primeiro comando e em maiúscula no segundo.

whitequark
fonte
0

Tente o seguinte comando:

apt-get linux-image.*-dbg

normalmente o vmlinux localiza em / usr / lib / debug / após a instalação

rio
fonte
-1

deve estar na sua raiz (/). No ubuntu 8.10, é um link apontando para /boot/vmlinuz-2.6.28-16-generic

faça um

ls / -l | grep '^l'

você deveria encontrar

PS: não tenho certeza do nome exato do caminho.

deostroll
fonte