Де знаходиться vmlinux у моїй установці Ubuntu?


16

Я намагаюся працювати з запуском oprofile , і на цьому кроці я стикаюся з проблемою:

opcontrol --vmlinux=/path/to/vmlinux

У Ubuntu немає пакету під назвою vmlinux, і коли я це роблю locate vmlinux, я отримую багато файлів:

/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

Яку з них шукаю?

Відповіді:


2

Це має бути у вашому /bootкаталозі - mu Ubuntu насправді має стислі версії за рядками vmlinuz-2.6.28-16-generic.

Чи може oprofile працювати з ними - не питання, на яке я можу відповісти.


3
Що з редагуванням? superuser.com/posts/62576/reitions
Jonik

5
oprofile не може працювати з vmlinuzним, вимагає нестисненого ядра.
SaveTheRbtz

9
vmlinux не те саме, що vmlinuz
gsingh2011

24

Найпростіший (і не хакітний) спосіб отримати vmlinuxв Ubuntu - це додати сховище 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

та встановити символи налагодження ядра:

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

vmlinux то їх можна знайти тут:

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

Це має бути прийнятою відповіддю.
День

12

Гм, просто хотів поставити це як коментар до вищезгаданої відповіді від @paxdiablo, але не можете знайти кнопку коментаря? Все одно ..

Річ у тім, що vmlinuzфайл стискається - і для цілей налагодження вам потрібен нестиснений vmlinux(а краще один, побудований із символами налагодження - яких за замовчуванням vmlinuzу Ubuntu немає, оскільки вони позбавлені символів).

Тепер можна розпакувати файл vmlinuzу vmlinuxфайл, однак це не тривіально; спочатку ви повинні знайти зміщення байтів, vmlinuzде починається стиснутий файл, а потім використовувати ddі zcatрозпаковувати лише необхідну частину. Детально це пояснюється в: " [ubuntu] Як простежити цю помилку? - Форуми Ubuntu - повідомлення №4 "; коротко, нижче приведений мій приклад журналу команд терміналу на основі цього повідомлення:

$ 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

Ну, сподіваюся, що це допоможе,

Ура!


3
Для цього в git ядра є спеціальний скрипт extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/…
SaveTheRbtz

Велике спасибі, @SaveTheRbtz - не мав уявлення про це .. Ура!
sdaau

Це має бути позначено як відповідь за замовчуванням. Спасибі!
Продаж

3

ви можете завантажити джерело та скласти свій власний за допомогою наступної команди:

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  

або ви можете завантажити тут пакет ddeb і встановити йогоsudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb


2

Це старе запитання, і старі відповіді більше не працюють для мене (ubuntu 14.04).

  1. Перш за все, vmlinuxце необов’язково для цьогоoprofile , він вам потрібен лише для того, щоб показати, що відбувається всередині ядра, і для нього може бути виконано профілювання простору користувача. Детальніше читайте в док .

  2. Якщо вам все-таки потрібно vmlinux, додайте сховище ddebs (безсоромно взяте з wiki wiki ):

    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. Потім встановіть символи налагодження для вашого ядра . Це потрібно робити щоразу, коли ви оновлюєте ядро, після перезавантаження, щоб unameотримати правильну версію ядра. Ви можете видалити пакунки, пов'язані зі старими ядрами.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Після встановлення цього пакету ви знайдете vmlinuxфайл тут :

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


0

Пакети, що містять ядро ​​Linux (файл vmlinuz), називаються linux-image-VERSION-ARCH в Debian / Ubuntu.

Ви можете перерахувати їх командою dpkg -l linux-image-*, а для встановленого пакету (він має iiпозначку в першому стовпці) ви можете отримати список файлів у ньому dpkg -L linux-image-VERSION-ARCH, наприклад, dpkg -L linux-image-2.6.31-17-386для недавньої установки Karmic.

Зауважте, що lв першій команді є малі, а другі - великі.


0

Спробуйте виконати таку команду:

apt-get linux-image.*-dbg

зазвичай vmlinux розміщується в / usr / lib / debug / після встановлення


-1

це має бути у вашому корені (/). У ubuntu 8.10 це посилання, що вказує на /boot/vmlinuz-2.6.28-16-generic

робити

ls / -l | grep '^l'

ви повинні його знайти

PS: не впевнений у точній назві шляху.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.