DISQUS

My Thoughts: How to compile a kernel for Ubuntu Karmic

  • Nixlu · 1 month ago
    Just a quick one, wouldn't doing a

    "sudo apt-get install linux-image-2.6.31-14-generic-pae"

    be what you are looking for, sure you won't get the lastest kernel but you will get past the 3gig limit
  • Peter · 1 month ago
    You are correct that will do the trick as well but I also changed some other kernel settings, like changing the Processor family to Core2/newer Xeon, disabling Generic X86 support. to name a few.
  • Michael · 1 month ago
    I don't know if this might have been pulled from the release, but I installed the beta and upgraded from there and my version of karmic uses grub2 and has no menu.lst
  • Peter · 1 month ago
    <del datetime="2009-11-05T16:46:22+00:00">The default grub in Karmic is the older grub but if you run grub2 you'll have to check /boot/grub.cfg</del>
    I have to correct myself. The default grub with a new installation of Karmic is grub v2(grub-pc). I did an upgrade from Jaunty which doesn't install grub-pc.
  • Robert Luckoff · 1 month ago
    I still do it by downloading the latest kernel source from kernel.org. Then I do the 'ol make xconfig, make, make install, make modules_install and then update-grub.
  • David · 1 month ago
    Tried this, and everything worked fine up until I ran the

    CONCURRENCY_LEVEL=2 NOEXTRAS=1 skipabi=true skipmodule=true fakeroot debian/rules binary-XXXX

    command. (where XXXX is replaced by my special name). When I ran this, I got the following error:

    make[1]: *** No rule to make target 'binary-XXXX'. Stop.

    I went back and checked my steps. I verified files were in place and edited as required. Still fails.

    Any ideas?
  • Peter · 1 month ago
    Did you run the clean command?
    fakeroot debian/rules clean
  • David · 1 month ago
    Hi Peter,

    Yes, I did run the Clean command at you typed it. Is there a config or makefile I can look in to verify that my branch name has been included? Note: when I run the second command that you recommend:

    CONCURRENCY_LEVEL=2 NOEXTRAS=1 skipabi=true skipmodule=true fakeroot debian/rules binary-indep

    that command actually completes without an error. But with my branch name, it fails. Is there any limit on the name or length of name chosen? My XXXX name is actually 8 characters long.

    Thanks for your help.
  • Peter · 1 month ago
    After the clean command, you can check debian/control

    cat debian/control | grep Package| grep linux-image

    There should be a line in there like:
    Package: linux-image-2.6.####-XXXX
    #### is the kernel version
    XXXX is your flavor name.
  • David · 1 month ago
    Hi Peter,

    After I retyped my last message and sent it the second time, the first copy and your response to it then showed up. Arghh! Please forgive the duplication.

    Anyway, thanks for the response. I executed the above command, and sure enough, the control file has the line with the kernel number and with my 'flavor' in it. A wider grep shows my flavor appearing in 3 Package lines within the control file: linux-image, linux-headers, and linux-image-debug.

    I then followed that up with the following two commands:

    fakeroot debian/rules clean
    and
    CONCURRENCY_LEVEL=2 NOEXTRAS=1 skipabi=true skipmodule=true fakeroot debian/rules binary-XXXX

    And I get the same make "No Rule" Stop error as before.

    Thanks,

    David
  • David · 1 month ago
    Hi Peter,

    Responded earlier, but it didn't show up on this page, so I'm responding again. Hope its not a duplicate.

    Yes, I did execute the clean function. I did so on both attempts I made to build the new kernel (scrolled back to verify), and the clean command ran successfully. But the following execution of 'rules' to build binary-XXXX still failed with the following result:

    make[1]: *** No rule to make target ‘binary-XXXX’. Stop.

    I did try to run the second version of 'rules' that you indicated would be 'wise' to run - the one that builds binary-indep. That one ran without error, although it didn't appear to build any usable kernel.

    Question: XXXX represents my custom kernel name, similar to your 'core2' example. However, the XXXX name I use is actually 8 characters long. Is there any limit on name length that might cause problems?

    Not sure where to go from here. Thanks for the help.
  • Peter · 1 month ago
    Interesting you don't see your previous reply, I replied:

    After the clean command, you can check debian/control

    cat debian/control | grep Package| grep linux-image

    There should be a line in there like:
    Package: linux-image-2.6.####-XXXX
    #### is the kernel version
    XXXX is your flavor name.
  • Peter · 1 month ago
    I don't think there is a limit, especially not 8 characters.

    Do you have special characters in the name? Like spaces?
  • Peter · 1 month ago
    What is the result of:
    dpkg-architecture -qDEB_HOST_ARCH
  • David · 1 month ago
    Ahh.

    It's AMD64. That's the wrong architecture, as this is a CORE2 processor. I must be setting something wrong in the menuconfig. I thought I had set things correctly, but apparently not. Any hints?

    Thanks,

    David
  • Peter · 1 month ago
    Because it says AMD64 you will need to make the changes to the amd64 files.

    the command you run is ran in the compilation process to determine which files to use, and even though you have a Core2 proc, the system is said to be AMD64
  • Francois · 1 month ago
    Hi !

    Very interesting ! Only this one little thing that annoys me : I have checked out 2.6.31-14.51 and when I launch compilation, i see "arbitrary signature 2.6.31-14.48" ... Not that I worry that much about signatures, but I'd like to get this right... any idea ?

    Thanks,
    François
  • Peter · 1 month ago
    Francois,

    I see no 2.6.31-14.51 in the repository.
  • vasia · 1 month ago
    Hello!
    Very detailed tutorial!Thanks for that!
    This is the first time when I've compiled my one kernel.
    The issue is that this new kernel doesn't appeared after installed in /boot/grub/menu.lst.

    Do you have any ideea how to correct this?
    Thanks!
  • Peter · 1 month ago
    Is the kernel installed in /boot?

    You should have the following files:
    abi*
    config*
    initrd*
    System.map*
    vmcoreinfo*
    vmlinuz*

    If you have these files you can run:
    sudo update-grub
  • vasia · 1 month ago
    Hello!
    Thanks for the reply!
    I've looked in /boot and I don't see new kernel there, although I've installed and run all the above steps.
  • Adam · 1 month ago
    I think that's because of a typo:

    "cd ..
    dpkg -i linux-headers-2.6.31-15_2.6.31-15.49_all.deb
    dpkg -i linux-headers-2.6.31-15-core2_2.6.31-15.49_i386.deb linux-headers-2.6.31-15_2.6.31-15.49_all.deb"

    This two commands will install only headers not actual image. I think that first line should be :
    dpkg -i linux-image-2.6.31-15-core2_2.6.31-15.49_i386.deb

    Hope that helps.
  • Peter · 1 month ago
    Thank you for this catch. I'll update the article
  • vasia · 1 month ago
    Thanks Adam!
    It worked! :)
    Next step for me is to understand what every configuration option means. After wards I will compile a kernel specific to my system. :)
  • Thomas · 1 month ago
    Seems like running:

    $ head debian.master/changelog

    would be a bit more succinct than:

    $ cat debian.master/changelog|more

    followed by 'q'. Regardless, helpful how-to.
  • HotShotDJ · 1 month ago
    If one has modules that are managed by DKMS, the headers need to be installed before the kernel or the compilation of those modules will fail. The better command to install your newly compiled kernel would be:

    dpkg -i linux-headers-2.6.31-15-core2_2.6.31-15.49_i386.deb linux-headers-2.6.31-15_2.6.31-15.49_all.deb linux-image-2.6.31-15_2.6.31-15.49_all.deb
  • Peter · 1 month ago
    Thanks for this insight. I changed the how to accordingly.