Dov'è vmlinux sulla mia installazione di Ubuntu?


16

Sto provando a lavorare con l'avvio di oprofile e sto incontrando un problema in questo passaggio:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu non ha un pacchetto chiamato vmlinux e quando faccio un locate vmlinux, ottengo molti file:

/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

Quale di questi è quello che sto cercando?

Risposte:


2

Dovrebbe essere nella tua /bootdirectory - mu Ubuntu ha in realtà versioni compresse lungo le linee di vmlinuz-2.6.28-16-generic.

Se oprofile può funzionare con quelli non è una domanda a cui posso rispondere.


3
Cosa c'è con la modifica? superuser.com/posts/62576/revisions
Jonik

5
oprofile non può funzionare con vmlinuzesso richiede kernel non compresso.
SaveTheRbtz,

9
vmlinux non è lo stesso di vmlinuz
gsingh2011

24

Il modo più semplice (e non complicato) per ottenere vmlinuxsotto Ubuntu è aggiungere repository 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 installa i simboli di debug del kernel:

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

vmlinux quindi può essere trovato qui:

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

Questa dovrebbe essere la risposta accettata.
Dan,

12

Hm, volevo solo inserire questo come commento alla risposta sopra di @paxdiablo, ma non riesci a trovare il pulsante di commento? In ogni modo ..

Il fatto è che il vmlinuzfile è compresso e per scopi di debug è necessario un non compressovmlinux (e preferibilmente uno costruito con simboli di debug - che i default-che vmlinuzarrivano con Ubuntu non hanno, poiché sono spogliati di simboli).

Ora, è possibile decomprimere un vmlinuzin un vmlinuxfile di - tuttavia, che non è banale; per prima cosa devi trovare un offset di byte in vmlinuzcui inizia il file compresso, quindi utilizzare dde zcatper decomprimere solo la parte necessaria. Nel dettaglio, questo è spiegato in: " [ubuntu] Come rintracciare questo bug? - Forum Ubuntu - post # 4 "; in breve, di seguito è riportato il mio esempio di registro dei comandi del terminale, basato su quel 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

Bene, spero che questo aiuti,

Saluti!


3
Esiste uno script speciale nel git del kernel per questo extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz

Molte grazie, @SaveTheRbtz - non avevo idea di quello ... Saluti!
sdaau,

Questo dovrebbe essere contrassegnato come risposta predefinita. Grazie!
Amol Sale,

3

puoi scaricare il sorgente e compilare il tuo usando il seguente 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  

oppure puoi scaricare il pacchetto ddeb qui e installarlosudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb


2

Questa è una vecchia domanda e le vecchie risposte non funzionano più per me (Ubuntu 14.04).

  1. Prima di tutto, vmlinuxè facoltativo perchéoprofile serve solo per mostrare cosa sta succedendo all'interno del kernel, la profilazione dello spazio utente può essere eseguita senza di essa. Maggiori informazioni nel documento .

  2. Se hai ancora bisogno vmlinux, aggiungi il repository ddebs (spudoratamente preso dal wiki di 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. Quindi installare i simboli di debug per il kernel . È necessario farlo ogni volta che si aggiorna il kernel, dopo il riavvio in modo da unameottenere la versione corretta del kernel. Sentiti libero di rimuovere i pacchetti associati ai vecchi kernel.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Una volta installato questo pacchetto, troverai il vmlinuxfile qui :

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


0

I pacchetti che contengono kernel Linux (il file vmlinuz) sono chiamati linux-image-VERSION-ARCH in Debian / Ubuntu.

Puoi elencarli con il comando dpkg -l linux-image-*e per il pacchetto installato (è iicontrassegnato nella prima colonna) puoi ottenere un elenco di file con esso dpkg -L linux-image-VERSION-ARCH, ad es.dpkg -L linux-image-2.6.31-17-386 per una recente installazione di Karmic.

Si noti che lè in minuscolo nel primo comando e in maiuscolo nel secondo.


0

Prova il seguente comando:

apt-get linux-image.*-dbg

di solito vmlinux si trova in / usr / lib / debug / dopo l'installazione


-1

dovrebbe essere nella tua radice (/). In Ubuntu 8.10 è un collegamento che punta a /boot/vmlinuz-2.6.28-16-generic

fare un

ls / -l | grep '^l'

dovresti trovarlo

PS: non sono sicuro del nome esatto del percorso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.