installation - why does NOT the ubuntu 13.10 have the version.h?

07
2014-07
  • user252098

    /usr/src/linux-header-3.11.0.12
    /usr/src/linux-header-3.11.0.12-generic

    Neither has the version.h file in the /include/linux/. Why?

    That hinders the softwares installation.

  • Answers
  • Daniel B

    By default, kernel headers are not installed. This is because they are not necessary for software from Ubuntu’s official repositories. They are required only for compiling kernel modules, which is not what the average user does.

    Instructions on how to install them, taken from here:

    sudo apt-get install linux-headers-generic
    

    /usr/include/linux/version.h is part of the linux-libc-dev package. It is part of the default Ubuntu installation.


  • Related Question

    linux - Where is vmlinux on my Ubuntu installation?
  • Jason Baker

    I'm trying to work with starting up oprofile, and I'm running into a problem at this step:

    opcontrol --vmlinux=/path/to/vmlinux
    

    Ubuntu has no package called vmlinux, and when I do a locate vmlinux, I get a lot of files:

    /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
    

    Which one of these is the one I'm looking for?


  • Related Answers
  • random

    It should be in your /boot directory - mu Ubuntu actually has compressed versions along the lines of vmlinuz-2.6.28-16-generic.

    Whether oprofile can work with those is not a question I can answer.

  • SaveTheRbtz

    The easiest(and non-hacky) way to obtain vmlinux under Ubuntu is to add ddebs repository:

    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
    

    and install kernel debug symbols:

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

    vmlinux then can be found here:

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

    Hm, just wanted to put this as a comment to the above answer by @paxdiablo, but cannot find the comment button? Anyways..

    The thing is that the vmlinuz file is compressed - and for debugging purposes, you need an uncompressed vmlinux one (and preferably one built with debugging symbols - which the default vmlinuz-es coming with Ubuntu do not have, as they are stripped of symbols).

    Now, it is possible to unpack a vmlinuz into a vmlinux file - however, that is not trivial; first you have to find a byte offset in vmlinuz where the compressed file starts, and then use dd and zcat to unpack only the necessary part. In detail, this is explained in: "[ubuntu] How to trace this bug? - Ubuntu Forums - post #4"; in brief, below is my example terminal command log, based on that 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
    

    Well, hope this helps,

    Cheers!

  • Harry

    you can download source and compile your own using the following command:

    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  
    

    or you can download the ddeb package here and install it by sudo dpkg -i linux-image-3.2.0-60-virtual-dbgsym_3.2.0-60.91_amd64.ddeb

  • deostroll

    it should be in your root ( / ). In ubuntu 8.10 it is a link pointing to /boot/vmlinuz-2.6.28-16-generic

    do an

    ls / -l | grep '^l'
    

    you should find it

    PS: not sure of the exact path name.