Ele deve estar no diretório /boot
- mu O Ubuntu na verdade compactou versões nos mesmos termos de vmlinuz-2.6.28-16-generic
.
Se o oprofile pode funcionar com eles, não é uma pergunta que eu possa responder.
Estou tentando trabalhar com o oprofile , e estou com um problema nesta etapa:
opcontrol --vmlinux=/path/to/vmlinux
O Ubuntu não tem nenhum pacote chamado vmlinux, e quando eu faço um 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?
A maneira mais fácil (e não-hacky) de obter vmlinux
no 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 os símbolos de depuração do kernel:
sudo apt-get update
sudo apt-get install linux-image-$(uname -r)-dbgsym
vmlinux
pode ser encontrado aqui:
/usr/lib/debug/boot/vmlinux-$(uname -r)
Hm, só queria colocar isso como um comentário para a resposta acima por @paxdiablo, mas não consegue encontrar o botão de comentário? De qualquer forma ..
O problema é que o arquivo vmlinuz
está compactado - e para fins de depuração, você precisa de um vmlinux
um descompactado (e, de preferência, construído com símbolos de depuração - que o padrão vmlinuz
-es vindo com o Ubuntu não tem, como eles são despojados de símbolos).
Agora, é possível descompactar um vmlinuz
em um arquivo vmlinux
- no entanto, isso não é trivial; primeiro você precisa encontrar um deslocamento de byte em vmlinuz
onde o arquivo compactado é iniciado e, em seguida, usar dd
e zcat
para descompactar somente a parte necessária. Em detalhes, isso é explicado em: " [ubuntu] Como rastrear este bug? - Fóruns do Ubuntu - postar # 4 "; Em resumo, abaixo está o meu log de comando do terminal de exemplo, 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!
você pode baixar o código-fonte e compilar o seu próprio 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 do ddeb aqui e instalá-lo por sudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb
Esta é uma pergunta antiga e as respostas antigas não funcionam mais para mim (Ubuntu 14.04).
Primeiro de tudo, vmlinux
é opcional para oprofile
, você só precisa mostrar o que está acontecendo dentro do kernel, o perfil do espaço do usuário pode ser feito sem ele. Leia mais no documento .
Se você ainda precisar de 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
Em seguida, instale os símbolos de depuração para o seu kernel . Você deve fazer isso toda vez que atualizar seu kernel, após a reinicialização, para que uname
obtenha a versão correta do kernel. Sinta-se à vontade para remover pacotes associados a kernels antigos.
sudo apt-get update
sudo apt-get install linux-image-$(uname -r)-dbgsym
Quando este pacote estiver instalado, você encontrará o arquivo vmlinux
aqui :
/usr/lib/debug/boot/vmlinux-$(uname -r)
Veja o link
Pacotes que contêm o kernel linux (o arquivo vmlinuz) são chamados de linux-image-VERSION-ARCH no Debian / Ubuntu.
Você pode listá-los com o comando dpkg -l linux-image-*
e, para o pacote instalado (ele tem ii
mark na primeira coluna), é possível obter uma lista de arquivos com dpkg -L linux-image-VERSION-ARCH
, por exemplo, dpkg -L linux-image-2.6.31-17-386
para uma instalação recente do Karmic.
Observe que l
é minúsculo no primeiro comando e maiúsculo no segundo.
Tente o seguinte comando:
apt-get linux-image.*-dbg
geralmente o vmlinux localiza em / usr / lib / debug / após a instalação
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ê deve encontrá-lo
PS: não tenho certeza do nome exato do caminho.