Vmlinux trên cài đặt Ubuntu của tôi ở đâu?


16

Tôi đang cố gắng làm việc với việc khởi động oprofile và tôi đang gặp vấn đề ở bước này:

opcontrol --vmlinux=/path/to/vmlinux

Ubuntu không có gói gọi là vmlinux và khi tôi làm locate vmlinux, tôi nhận được rất nhiều tệp:

/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

Cái nào trong số này là cái tôi đang tìm?

Câu trả lời:


2

Nó nên có trong /bootthư mục của bạn - mu Ubuntu thực sự có các phiên bản nén dọc theo dòng vmlinuz-2.6.28-16-generic.

Liệu oprofile có thể làm việc với những thứ đó không là câu hỏi tôi có thể trả lời.


3
Điều gì với bản chỉnh sửa? superuser.com/posts/62576/revutions
Jonik

5
oprofile không thể làm việc với vmlinuznó đòi hỏi kernel không nén.
SaveTheRbtz

9
vmlinux không giống như vmlinuz
gsingh2011

24

Cách dễ nhất (và không hack) để có được vmlinuxtrong Ubuntu là thêm kho lưu trữ 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

và cài đặt các ký hiệu gỡ lỗi kernel:

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

vmlinux sau đó có thể được tìm thấy ở đây:

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

Đây phải là câu trả lời được chấp nhận.
Dan

12

Hừm, chỉ muốn đưa nó làm bình luận cho câu trả lời trên của @paxdiablo, nhưng không thể tìm thấy nút bình luận? Dù sao ..

Vấn đề là vmlinuztệp được nén - và cho mục đích gỡ lỗi, bạn cần một tệp không nén vmlinux(và tốt nhất là một tệp được xây dựng với các ký hiệu gỡ lỗi - thứ mà mặc định vmlinuzđi kèm với Ubuntu không có, vì chúng bị tước các ký hiệu).

Bây giờ, có thể giải nén a vmlinuzvào một vmlinuxtệp - tuy nhiên, điều đó không tầm thường; trước tiên, bạn phải tìm một phần bù byte trong vmlinuzđó tệp nén bắt đầu, sau đó sử dụng ddzcatchỉ giải nén phần cần thiết. Cụ thể, điều này được giải thích trong: " [ubfox] Làm cách nào để theo dõi lỗi này? - Diễn đàn Ubuntu - bài số 4 "; Tóm lại, dưới đây là nhật ký lệnh thiết bị đầu cuối mẫu của tôi, dựa trên bài đăng đó:

$ 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

Vâng, hy vọng điều này sẽ giúp,

Chúc mừng!


3
Có tập lệnh đặc biệt trong git của kernel cho điều đó extract-vmlinux: git.kernel.org/?p=linux/kernel/git/torvalds/ Kẻ
SaveTheRbtz

Rất cám ơn, @SaveTheRbtz - không có ý tưởng gì cả .. Chúc mừng!
sdaau

Điều này nên được đánh dấu là câu trả lời mặc định. Cảm ơn!
Bán Amol

3

bạn có thể tải xuống nguồn và tự biên dịch bằng lệnh sau:

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  

hoặc bạn có thể tải gói ddeb tại đây và cài đặt nó bằng cáchsudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb


2

Đây là một câu hỏi cũ và những câu trả lời cũ không còn hiệu quả với tôi nữa (ubfox 14.04).

  1. Trước hết, vmlinuxlà tùy chọn chooprofile , bạn chỉ cần nó để hiển thị những gì đang xảy ra bên trong kernel, hồ sơ không gian người dùng có thể được thực hiện mà không cần nó. Đọc thêm trong tài liệu .

  2. Nếu bạn vẫn cần vmlinux, hãy thêm kho lưu trữ ddebs (được lấy một cách đáng xấu hổ từ wiki của ubfox ):

    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. Sau đó cài đặt các biểu tượng gỡ lỗi cho kernel của bạn . Bạn phải làm điều này mỗi lần bạn nâng cấp kernel của mình, sau khi khởi động lại để có unamephiên bản kernel phù hợp. Hãy thoải mái loại bỏ các gói liên quan đến hạt nhân cũ.

    sudo apt-get update
    sudo apt-get install linux-image-$(uname -r)-dbgsym
    
  4. Khi gói này được cài đặt, bạn sẽ tìm thấy vmlinuxtệp ở đây :

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


0

Các gói chứa kernel linux (tệp vmlinuz) được gọi là linux-image-VERSION-ARCH trong Debian / Ubuntu.

Bạn có thể liệt kê chúng bằng lệnh dpkg -l linux-image-*và đối với gói đã cài đặt (nó có iidấu ở cột đầu tiên), bạn có thể lấy danh sách các tệp trong đó dpkg -L linux-image-VERSION-ARCH, ví dụ như dpkg -L linux-image-2.6.31-17-386cho bản cài đặt Karmic gần đây.

Lưu ý rằng lchữ thường trong lệnh đầu tiên và chữ hoa thứ hai.


0

Hãy thử lệnh sau:

apt-get linux-image.*-dbg

thường thì vmlinux định vị trong / usr / lib / debug / sau khi cài đặt


-1

nó nên ở trong thư mục gốc của bạn (/). Trong Ubuntu 8.10, nó là một liên kết trỏ đến /boot/vmlinuz-2.6.28-16-generic

làm một

ls / -l | grep '^l'

bạn nên tìm nó

PS: không chắc chắn về tên đường dẫn chính xác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.