Gdzie jest vmlinux w mojej instalacji Ubuntu?

16

Próbuję pracować z uruchamianiem oprofilu i napotykam problem na tym etapie:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu nie ma pakietu o nazwie vmlinux, a kiedy to zrobię locate vmlinux, otrzymuję wiele plików:

/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

Który z nich jest tym, którego szukam?

Jason Baker
źródło

Odpowiedzi:

2

Powinien być w twoim /bootkatalogu - mu Ubuntu ma skompresowane wersje w stylu vmlinuz-2.6.28-16-generic.

Odpowiedź na to, czy oprofile może z nimi współpracować, nie jest pytaniem.

losowy
źródło
3
O co chodzi z edycją? superuser.com/posts/62576/revisions
Jonik
5
oprofile nie może z vmlinuznim współpracować wymaga nieskompresowanego jądra.
SaveTheRbtz
9
vmlinux to nie to samo co vmlinuz
gsingh2011,
24

Najłatwiejszym (i nie zhackowanym) sposobem uzyskania vmlinuxw Ubuntu jest dodanie repozytorium 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

i zainstaluj symbole debugowania jądra:

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

vmlinux to można znaleźć tutaj:

/usr/lib/debug/boot/vmlinux-$(uname -r)
SaveTheRbtz
źródło
To powinna być zaakceptowana odpowiedź.
Dan.
12

Hm, chciałem umieścić to jako komentarz do powyższej odpowiedzi @paxdiablo, ale nie możesz znaleźć przycisku komentarza? W każdym razie ..

Chodzi o to, że vmlinuzplik jest skompresowany - i do celów debugowania potrzebny jest nieskompresowany vmlinux(a najlepiej zbudowany z symboli debugowania), który jest domyślnievmlinuz -es dostarczany z Ubuntu, ponieważ są one pozbawione symboli).

Teraz można rozpakować plik vmlinuzdo vmlinuxpliku - nie jest to jednak trywialne; najpierw musisz znaleźć bajtowe przesunięcie w vmlinuzmiejscu, w którym zaczyna się skompresowany plik, a następnie użyj ddi zcatrozpakuj tylko niezbędną część. Szczegółowo wyjaśniono to w: „ [ubuntu] Jak prześledzić ten błąd? - Forum Ubuntu - post # 4 ”; w skrócie, poniżej znajduje się mój przykładowy dziennik poleceń terminalu, oparty na tym poście:

$ 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

Mam nadzieję, że to pomaga,

Twoje zdrowie!

sdaau
źródło
3
W git jądra jest specjalny skrypt do tego extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz
Wielkie dzięki, @SaveTheRbtz - nie miałem pojęcia, że ​​.. Pozdrawiam!
sdaau
To powinno być oznaczone jako odpowiedź domyślna. Dzięki!
Wyprzedaż Amol
3

możesz pobrać źródło i skompilować własne za pomocą następującego polecenia:

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  

lub możesz pobrać pakiet ddeb tutaj i zainstalować gosudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb

Złupić
źródło
2

To stare pytanie i stare odpowiedzi już mi nie działają (ubuntu 14.04).

  1. Przede wszystkim vmlinuxjest opcjonalnyoprofile , wystarczy tylko pokazać, co dzieje się w jądrze, bez niego można profilować przestrzeń użytkownika. Przeczytaj więcej w dokumencie .

  2. Jeśli nadal potrzebujesz vmlinux, dodaj repozytorium ddebs (bezwstydnie pobrane z wiki 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. Następnie zainstaluj symbole debugowania dla jądra . Musisz to zrobić przy każdej aktualizacji jądra, po ponownym uruchomieniu, aby uzyskać unameodpowiednią wersję jądra. Możesz usunąć pakiety związane ze starymi jądrami.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Po zainstalowaniu tego pakietu plik znajdziesz vmlinuxtutaj :

    /usr/lib/debug/boot/vmlinux-$(uname -r)
    
Antoine
źródło
0

Pakiety zawierające jądro Linuksa (plik vmlinuz) nazywa się linux-image-VERSION-ARCH w Debian / Ubuntu.

Możesz je wyświetlić za pomocą polecenia dpkg -l linux-image-*, a dla zainstalowanego pakietu (ma iiznak w pierwszej kolumnie) możesz uzyskać listę plików za pomocą dpkg -L linux-image-VERSION-ARCH, np.dpkg -L linux-image-2.6.31-17-386 dla ostatniej instalacji Karmic.

Zwróć uwagę, że lmałe litery w pierwszym poleceniu i wielkie litery w drugim.

Whitequark
źródło
0

Spróbuj wykonać następujące polecenie:

apt-get linux-image.*-dbg

zwykle vmlinux lokalizuje się w / usr / lib / debug / po instalacji

rzeka
źródło
-1

powinno być w twoim katalogu głównym (/). W Ubuntu 8.10 jest to link prowadzący do /boot/vmlinuz-2.6.28-16-generic

zrobić

ls / -l | grep '^l'

powinieneś to znaleźć

PS: nie jestem pewien dokładnej nazwy ścieżki.

deostroll
źródło