How to compile a Ubuntu Lucid kernel

Ubuntu Lucid was released in April and I have been writing articles on “How to compile a kernel for Ubuntu …” for a few releases and there is no exception for Ubuntu Lucid.
The Ubuntu kernel developers have decided to change things up yet again for the Ubuntu Lucid kernel. The steps in this article will be significantly different from previous Ubuntu releases.

But enough with the small talk, let’s start compiling our own Ubuntu Lucid kernel.

Introduction

git
I’ll be using git to get the latest kernel version. This is my favorite way to get the sources and it is in my opinion the fastest way to make changes later on when you want to update your own kernel to the latest version.
I suggest adding my Launchpad repository to your system. The repository holds the latest version of git and is usually updated within a day of a new release of git, follow the instructions on the page Git Packages for Ubuntu to add my repository. There is a version available for Lucid as well.

Arch
I am compiling the i386 version, if you want to compile for amd64 you need replace i386 for amd64 throughout this article.

Flavor
I choose the name core2 as the flavor name as for my personal use I’ll build a kernel for a Core2 processor. Besides the change of processor type in the configuration I also select support for 64GB as my laptop has 4GB, which is the main reason I started compiling my own kernels. I have some other changes but that’s beyond this article.

Preparations

Let’s get started by preparing our machine for compiling the Ubuntu Lucid kernel.
Open a terminal.

sudo su -
apt-get install fakeroot build-essential
apt-get install crash kexec-tools makedumpfile kernel-wedge
apt-get build-dep linux
apt-get install git-core libncurses5 libncurses5-dev
apt-get install libelf-dev asciidoc binutils-dev
exit

Create a directory where you would like to build your kernel, this directory will hold the kernel source in a sub directory and all the deb files will end up in this folder. I choose /d1/development/kernel/lucid

Getting the source

cd /d1/development/kernel/lucid
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-lucid.git  source

The source code is installed in the directory source.

We will create a branch in which we will be doing our modifications. That way the master branch will stay in tact which will make it a whole lot easier when we want to update our own Ubuntu Lucid kernel to a newer version.
To see the latest version:

cd source
less debian.master/changelog

Press q to get back to the prompt.
This results in something like this:

linux (2.6.32-21.31) lucid; urgency=low

Sometimes you will see the first section as UNRELEASED in that case the latest version is the first version after the UNRELEASED section.
In our case the latest version is 2.6.32-21.31.
You could select any version you see in the changelog but for the sake of this article we’ll use the latest version.

The Ubuntu kernel developers tag each version as Ubuntu- and therefor we can checkout the version we want as

git checkout Ubuntu-2.6.32-31.31 -b core2

This will create a branch called core2.

Creating a new config

I’ll be using the method of creating a new flavor, this adds a bit more work but you can always compile the original kernels.

We’ll use the generic flavor as the base for our own flavor being core2.

cp debian.master/config/i386/config.flavour.generic debian.master/config/i386/config.flavour.core2
fakeroot debian/rules clean
debian/rules updateconfigs

To make changes to the configuration file we need to edit the configuration file. The kernel developers have created a script to edit kernel configurations which has to be called through the debian/rules makefile, unfortunately you will have to go through all the flavors for this script to work properly.

debian/rules editconfigs

The script will show you which configuration is next to be edited. You should not make changes to any of the configurations until you see the core2 configuration

 * Run menuconfig on i386/config.flavour.core2... Press a key.

Make your changes, save the configuration and then keep going until the script ends. You could save the other configurations but you don’t have to. I will write up what changes I made for my configuration in a separate article to be published soon.

When you’re done, make a backup of the config flavor file.

cp debian.master/config/i386/config.flavour.core2 ../. 

Now we need to clean up the git tree in order to get ready for compilation.

git reset --hard
git clean -xdf

Getting ready for compilation

Because we are going to be creating a new flavor based on a existing flavor (generic in my case) we need to create some extra files. During compilation the process checks the previous release for some settings, as we’re creating a local flavor it doesn’t exist in the source, so we’re creating it. The previous release in this case is 2.6.32-20.30

ls debian.master/abi
cp debian.master/abi/2.6.32-20.30/i386/generic debian.master/abi/2.6.32-20.30/i386/core2
cp debian.master/abi/2.6.32-20.30/i386/generic.modules debian.master/abi/2.6.32-20.30/i386/core2.modules

Copy our flavored configuration file back.

cp ../config.flavour.core2 debian.master/config/i386/

We need to edit some files:

File: debian.master/etc/getabis

Search for the line:

getall i386 generic generic-pae 386

Change it in:

 getall i386 generic generic-pae 386 core2

File: debian.master/rules.d/i386.mk

Search for the line:

flavours        = generic generic-pae 386

Change it in:

flavours        = generic generic-pae 386 core2

We need to make the compilation process aware of our own flavor we want to compile.

cp debian.master/control.d/vars.generic debian.master/control.d/vars.core2

You can edit the file and make it your own.

arch="i386 amd64"
supported="Core2"
target="Geared toward Core2 desktop systems."
desc="x86/x86_64"
bootloader="grub-pc | grub | lilo (>= 19.1)"
provides="kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9"

We need to commit our changes in the git repository.

git add .
git commit -a -m "Core2 modifications"

The text after -m is the message you add to your commit.

Compilation

It’s finally time for compiling but before we can start the compilation process there is one more step to do. I didn’t put this in the Preparations section as you need to the following step whether you make changes to the configuration or not

fakeroot debian/rules clean

All the packages will be created in the directory /d1/development/kernel/lucid
Create independent packages:

skipabi=true skipmodule=true fakeroot debian/rules binary-indep

The above statement will create the following deb files:

linux-source-2.6.32_2.6.32-21.31_all.deb'.
linux-doc_2.6.32-21.31_all.deb
linux-tools-common_2.6.32-21.31_all.deb
linux-headers-2.6.32-21_2.6.32-21.31_all.deb

Create the tools packages:

skipabi=true skipmodule=true fakeroot debian/rules binary-perarch

The above statement will create the following deb files:

linux-source-2.6.32_2.6.32-21.31_all.deb'.
linux-tools-2.6.32-21_2.6.32-21.31_i386.deb

Create the flavour depended files:

skipabi=true skipmodule=true fakeroot debian/rules binary-core2

The above statement will create the following deb files:

linux-headers-2.6.32-21-core2_2.6.32-21.31_i386.deb
linux-image-2.6.32-21-core2_2.6.32-21.31_i386.deb

Installation

After the compilation is finished we’ll have the above packages in the parent directory.

To install the files

cd ..
sudo dpkg -i linux-headers-2.6.32-21-core2_2.6.32-21.31_i386.deb linux-headers-2.6.32-21_2.6.32-21.31_all.deb linux-image-2.6.32-21-core2_2.6.32-21.31_i386.deb

Check your bootloader if the newly installed kernel is the default one, for grub check the file /boot/grub/menu.lst or if you run grub2 check /boot/grub/grub.cfg

Reboot and enjoy your newly installed kernel.

This article is filed under the categories Ubuntu » Compile a kernel and has the following tags associated with it: , , .

For more of the same articles see the page Compile a kernel for Ubuntu overview
Showing 53 comments
Skip to the end and leave a comment.
  1. Kernel Tester

    An easier method is given in the steps below. This is from a forum post a couple of months or a year ago.

    1. Install the utilities needed to configure the kernel
    Code:

    sudo apt-get install build-essential bin86 kernel-package libqt3-headers libqt3-mt-dev wget libncurses5 libncurses5-dev

    2. Move to the configuration directory
    Code:

    cd /usr/src

    3. Make yourself the omnipotent root
    Code:

    sudo -s

    4. Now we are going to download the kernel and unpack it
    Code:

    wget -c http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.bz2 && tar -xvjf linux-2.6.30.tar.bz2

    5. Remove the link to the linux directory, make a new link to the new kernel, and move to the Linux directory:
    Code:

    rm -rf linux && ln -s /usr/src/linux-2.6.30 linux && cd /usr/src/linux

    Note: If you are applying a patch to the kernel, such as fbsplash, beyond, or emission, apply the patch now and skip to step 8.
    6. Now download the latest kernel patch: (Do NOT do this or the step below if you are using a different patch like beyond, emission, RT, etc.)
    Code:

    wget -c http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.30.1.bz2

    7. Apply the new patch: (Do NOT do this if you are using a different patch like beyond, emission, etc.)
    Code:

    bzcat patch-2.6.30.1.bz2| patch -p1

    8. Now import your current kernel configuration and get your current kernel options:
    Code:

    cp /boot/config-$(uname -r) .config && yes “” | make oldconfig

    9. Configure the kernel:
    Note: If you have a wireless internet device, you must enable your wireless drivers in the kernel. The easiest way to do this is to press Ctrl + F and search for your wireless device module name.
    Code:

    make xconfig

    Or for a terminal-based version:
    Code:

    make menuconfig

    Tip: You can significantly speed up the compile time of your kernel by using distcc. You can read the howto on this subject here.
    10. Finally, it’s time to build the kernel: Make sure that you are in /usr/src/linux with full root access. This will build a debian file that you can install.

    Now in the terminal do this:

    Code:

    make-kpkg clean

    Then this:

    Code:

    CONCURRENCY_LEVEL=3 make-kpkg –initrd –append-to-version=-mk kernel_image
    kernel_headers modules_image

    Note: You can replace “mk” with anything you want. Like “k7″ or “686”. Make sure you leave the hyphen. The kernel will now compile for 1-3 hours, depending on the speed of your processor. If you have an extremely slow processor, you may have to wait 4 or more hours waiting for the kernel to compile. In the meantime, I would go out to a movie or do something else while it’s compiling. The concurrency level should be set to one number above your number of CPU cores. (Leave it at the default if you don’t know what this means).
    11. Install the .deb files in /usr/src. There should be 2. One should be an image .deb file and the other a header .deb file. In terminal do:
    Code:

    cd .. && dpkg -i linux*2.6.30*.deb

    IMPORTANT: IF YOU HAVE AN NVIDIA OR ATI GRAPHICS CARD, YOU MAY HAVE TO REINSTALL THE DRIVERS FOR IT.
    12. Now reboot and profit!

    • Peter

      Your instructions would apply to building a vanilla kernel, not a kernel that has Ubuntu extras, like rfkill, omnibook,nidswrapper, nor the patches the Ubuntu Kernel team applies to vanilla kernels.

    • Sumeet Gehi

      i have a problem while compiling kernel
      i type 1-7th step’s code that compile successfully,
      & when i type 8th step’s code:
      cp /boot/config-$(uname -r) .config && yes “” | make oldconfig
      after that the error occurs
      Choice [1-2]: RCU Implementation……….
      i leave it 20-30 minutes after that it also occurs tell me what to do..

    • Sumeet Gehi

      this code does not work
      CONCURRENCY_LEVEL=3 make-kpkg –initrd –append-to-version=-mk kernel_image
      when i type this code error occurs
      Error: Unknown target –initrd Unknown target –append-to-version=-mk
      use –targets to display help on valid targets.
      plz reply

  2. Eric Bursley

    Peter,
    When I was using Ubuntu (Hardy) 8.04, I used your article to compile a new kernel because I also had a core 2 with 4GB RAM using the x86 kernel.
    When Lucid was made available, I performed a clean installation using x86_64 (amd) kernel, which is able to use my processors fully, and removes the need for me to compile my own kernel. What is your reason for sticking with the x86 kernel instead of moving to 64bit?

    • Peter

      First of all thank you for coming back to my blog.
      I don’t really want to start with a clean installation. I wrote an article Am I really running Ubuntu? that might explain why I haven’t started with a clean installation. Another very small reason, I use Tweetdeck and it’s an Adobe Air application. Adobe Air is not available in 64bit yet, you can install it but it’s not 64bit native.

  3. Nicholas Chase

    I’m about halfway through the instructions and I just realized I might not get what I was looking for: a newer kernel than what I’m getting through lucid-backports. Is this a way to get a newer kernel? I’m interested in the upgraded video drivers in 2.6.34.

    • Peter

      This is a way to get a newer kernel, currently there is no proposed kernel in the git repository, meaning there’s no updated version. I highly doubt Ubuntu will upgrade the kernel in Lucid to 2.6.34,
      Ubunut Maverick has the 2.6.34 kernel, I haven’t played with that one yet though.
      If you want 2.6.34 you could compile it like the first comment but you won’t have Ubuntu patches and additions.

      • Nicholas Chase

        Hmm. What do I miss out on with the ubuntu patches and additions? I’m only using Ubuntu because Sidux and Debian wouldn’t utilize mulitiple ethernet cards, one of which was supposedly supported through the GNU/Linux kernel.

        • Peter

          Some of the Ubuntu extras:

          aufs, compcache, dm-raid4-5, fsam7400, iscsitarget, lirc, ndiswrapper, omnibook, rfkill, rtl8192se

          The Ubuntu team does a lot of patching, some of which makes it into the next release of the vanilla kernel. You would have to check the changelog of the Ubuntu kernels, every entry with SAUCE is a Ubuntu patch.

          Also the configuration file that comes with Ubuntu has different settings as the one that comes with the vanilla kernel, one example that could be important is Nouveau, which is enabled in Ubuntu but not in the vanilla kernel.

  4. notbad

    instaling I get this error:
    dpkg: error processing linux-image-2.6.32.11-drm33.2…. (–install): Installed inside the process of post-installation script stalled returning a value of 2
    sorry I translated it with google :D

    • Peter

      At which step do you get the error?

      • notbad

        installing kernel-image deb. on this part dpkg gets an error:
        ## Run user hook script here, if any
        if (-d “/etc/kernel/postinst.d”) {
        print STDERR “Examining /etc/kernel/postinst.d.\n”;
        system (“run-parts –verbose –exit-on-error –arg=$version ” .
        “–arg=$realimageloc$kimage-$version ” .
        “/etc/kernel/postinst.d”) &&
        die “Failed to process /etc/kernel/postinst.d”;

  5. axe

    I’ve changed a bit of code in a module. How can I get the deb files with that change ?
    Do I need to do a “skipabi=true fakeroot debian/rules binary-core2″ (whithout skipmodule)

    • Peter

      I believe you can just do the normal compile, including the skipmodule.

  6. update-modules

    I’m going with the kernel tester on this one. Much easier. No wonder some people have a hard time with Linux! I’ve been building my own kernels from source for a long time on both Debian and Ubuntu, and the method kernel tester uses is the same method I use and it always works. I still build static kernels by using the contents of lspci -k, lsmod and lsusb.

    • raul

      it sounds really interesting.. I’ve been googling a bit and have not found the “kernel tester” way. Besides, building static kernels sounds interesting, since I have never done that before. I think it would be good if you create a tutorial of how to do it, what do you think?, there are a lot of people out three for which such tutorial would be a gem.

  7. Marco Di Fresco

    Uhm, at the last comand of the “Compilation” section (skipabi=true skipmodule=true fakeroot debian/rules binary-core2) I’m getting:
    make: *** [/usr/src/kernel/source/debian/stamps/stamp-build-core2] Error 2

    Any idea?

    • Marco Di Fresco

      Any idea?

    • Peter

      The only thing I can think of is a typo in one of the previous steps or a forgotten step

  8. Pravind

    I have used the config file from the latest karmic kernel to compile the vanilla 2.6.34 kernel. I am getting segmentation fault while compling modules. Is this normal?

    • Peter

      I don’t know if it is something I would expect but the config supplied with the Ubuntu kernel has several extra configuration options no available in the vanilla kernel. Some options also might conflict causing the segfaults.

  9. Kirill

    Nice guide, thank you. I always use make-kpkg for building a kernel, so I have a question: what are skipabi and skipmodule options do exactly?

  10. Moses

    Another good article! I used your article for Karmic kernels and made modifications for Lucid, and posted my notes here: http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Ubuntu10.04Notes
    You may want to check it out as I figured out a few things as I went, and I’ll probably add some items from this article to my notes.
    Thanks!

  11. grega

    If I follow http://blog.avirtualhome.com/2010/05/05/how-to-compile-a-ubuntu-lucid-kernel/
    after executing command

    git clone git://kernel.ubuntu.com/ubuntu/ubuntu-lucid.git source

    i only get
    linux (2.6.32-23.37) UNRELEASED; urgency=low

    and lower kernel versions

    Where can I get 2.6.34 kernel to compile?

    Or even better, where can I get already compiled ubuntu 32 bit 2.6.34 kernel with HIGHMEM option switched on?

    • Peter

      The Changelog will state 2.6.32, that is correct, I noticed this myself the other day. To see the 2.6.34 kernel type the follwing command on the command line:
      git tag -l|grep 2.6.34

      The output will something like:
      Ubuntu-2.6.34-3.10
      Ubuntu-2.6.34-4.11
      Ubuntu-2.6.34-5.12
      Ubuntu-2.6.34-5.13
      Ubuntu-2.6.34-5.14
      Ubuntu-lts-2.6.34-4.11
      Ubuntu-lts-2.6.34-5.14

      You can use one of these tags to checkout the 2.6.34 kernel.

      The server version of Ubuntu will have HIGHMEM turned on but there will be other options geared toward server instead of desktop. The best thing is really to just compile your own.

  12. fethi

    It works.
    Thanks for the post. had to practice the kernel build (used git) in order to make this work, it seemed to complicated three weeks ago when I first purchased the system but the battery was draining like crazy. the graphics driver also helps in lowering power consumption.

  13. Evan Scott

    I am endeavoring to use Ubuntu-lts-2.6.32-21.31 to create a AMD64 specific build using your procedure. I got to the

    skipabi=true skipmodule=true fakeroot debian/rules binary-indep

    step and noticed that

    skipabi=true skipmodule=true fakeroot debian/rules binary-indep

    wasn’t generated. However, I advanced to the

    skipabi=true skipmodule=true fakeroot debian/rules binary-perarch

    step anyway and got these mesaages

    make[1]: *** No rule to make target `binary-perarch’. Stop.
    make: *** [binary-perarch] Error 2

    In my googling I get nothing specific but the stuff I do get seems to suggest that changes were made in this area to deal with anticipated maintenance hassles inherent in the way things are (were) setup. However I am not yet strong enough in this stuff to interpret what I am reading and turn it into the appropriate adjustments to your command line(s).

    Or I could just be doing something stoopid.

    Do you have any ideas?

    regards,
    Evan

    • Peter

      I can’t see the tag Ubuntu-lts-2.6.32-21.31, did you mean Ubuntu-2.6.32-21.31?

    • Evan Scott

      Actually, that is another question. However, b4 I get into that I should let you know that I actually got the build running! I had to go read the stuff in rules but it wasn’t as completely alien as I has expected. I have been doing build stuff since CP/M so I shouldn’t be surprised but I still enter foreign lands with a bit of IQ dropping anxiety. It turns out that the AMD64 build uses binary-arch rather than binary-perarch… or, at least, binary-arch works for my amd64 based builds where binary-perarch doesn’t.

      About the branch thing: when I started out in your procedure I couldn’t find Ubuntu-2.6.32-31.31 … the one you used as a starting point. I chose another one that was as close as was available. i.e., Ubuntu-lts-2.6.32-21.3. The fact that you can’t see mine and I can’t see yours, although balanced in some perverted way, is kind’a unsettling.

      Also, I see that I screwed up the c&p in the first item of my earlier query. I meant to say (write?) that the

      skipabi=true skipmodule=true fakeroot debian/rules binary-indep

      didn’t generate

      linux-tools-common_2.6.32-21.31_all.deb

      It didn’t on this pass either. This time around I studied the build output to see if there were any interesting messages but it looks like the procedure just doesn’t generate that file? In no uncertain terms it concludes its business with these lines:

      dh_builddeb: Compatibility levels before 5 are deprecated.
      dpkg-deb: building package `linux-source-2.6.32′ in `../linux-source-2.6.32_2.6.32-3.3_all.deb’.
      dpkg-deb: building package `linux-doc’ in `../linux-doc_2.6.32-3.3_all.deb’.
      dpkg-deb: building package `linux-headers-2.6.32-3′ in `../linux-headers-2.6.32-3_2.6.32-3.3_all.deb’.

      I wonder what “Compatibility levels before 5 are deprecated” means?

      Let’s see… what am I forgetting? Guess this thing is long enough as it is. Anyway, thanks for the procedure. What could have taken me weeks has taken a work day.

      regards,
      Evan

  14. zewsk

    Hi… what is “asciidoc” ? Apt-get told me that it was going to take up 777 megabytes of additional disk space… so I didn’t install it… Is this important?

    • Wirawan

      Not sure. I also did not install it. What is it for, anyway? Never heard that compiling kernel would require this package.

  15. Hannes

    Hello, everything is nice, but i have a problem by

    Creating a new Config

    I am getting an error by the line:
    debian/rules updateconfig

    heres the code:
    #################################################
    root@tox-nb:/home/hannes/Downloads/Kernel/source# debian/rules updateconfigs
    dh_testdir;
    /bin/bash -e debian/scripts/misc/kernelconfig oldconfig
    * Run silentoldconfig on amd64/config.flavour.generic …
    make[1]: Entering directory `/home/hannes/Downloads/Kernel/source’
    HOSTCC scripts/basic/fixdep
    HOSTCC scripts/basic/docproc
    HOSTCC scripts/basic/hash
    GEN /home/hannes/Downloads/Kernel/source/build/Makefile
    HOSTCC scripts/kconfig/conf.o
    /home/hannes/Downloads/Kernel/source/scripts/kconfig/conf.c: In function ‘conf_askvalue':
    /home/hannes/Downloads/Kernel/source/scripts/kconfig/conf.c:105: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
    /home/hannes/Downloads/Kernel/source/scripts/kconfig/conf.c: In function ‘conf_choice':
    /home/hannes/Downloads/Kernel/source/scripts/kconfig/conf.c:307: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result
    HOSTCC scripts/kconfig/kxgettext.o
    SHIPPED scripts/kconfig/zconf.tab.c
    SHIPPED scripts/kconfig/lex.zconf.c
    SHIPPED scripts/kconfig/zconf.hash.c
    HOSTCC scripts/kconfig/zconf.tab.o
    HOSTLD scripts/kconfig/conf
    scripts/kconfig/conf -s arch/x86/Kconfig
    sound/Kconfig:85: can’t open file “sound/ppc/Kconfig”
    make[3]: *** [silentoldconfig] Error 1
    make[2]: *** [silentoldconfig] Error 2
    make[1]: *** [sub-make] Error 2
    make[1]: Leaving directory `/home/hannes/Downloads/Kernel/source’
    make: *** [updateconfigs] Fehler 2
    ####################################################################

    it says: “can’t open file “sound/ppc/Kconfig””
    but in the source/sound/ppc/ Directory there istn’t a Kconfig …

    Can anybody help me?

    thx hannes

  16. rational

    Hi,
    I have been using Ubuntu since the last 3 months and this is my first attempt to compile the linux kernel. I have a Intel Quad Core processor (of the Core 2 series ) and a Gigabyte motherboard. I am getting stuck when I try to run the following command:
    fakeroot debian/rules clean
    and am getting this error : /usr/bin/fakeroot: line 176: rules: command not found.
    I tried skipping this step and continuing with the remaining steps, but that is not working either.
    Could you please tell me where I am going wrong ? I am using Lucid 10.04 LTS.

    • Eric Bursley

      @rational
      Have you tried: sudo apt-get install fakeroot ?

      Once its installed, try again to build the kernel.

    • Peter

      Which tag did you use for creating your branch?

  17. lucero

    Hi,

    How do you update your kernel using git?

    • Peter

      I’ll write an article for that in the upcoming days. I’m quiet busy as of lately but I’ll try to post it sometime this week.

  18. Cecil

    Good article.

    I compiled a current Ubuntu (2.6.32-24.39) indeed for some Core2 laptops, without kernel debugging (editconfig->Kernel hacks -> Debug Kernel=n. Yields smaller files). At the end of the process I got this &#%@^&* Error 1. get_debug_info: Can’t create a handle for a new debug session.

    Solved it by commenting out the 2 lines in debian/rules.d/2-binary-arch.mk that have the makedumpfile command… thanks to a comment in another kernel compilation thread ;-)

    • lucero

      Cecil,

      You can also enter no_dumpfile=true before creating the debian files.

  19. Al

    This is a great guide to compiling a kernel for Ubuntu. I found it easy to comprehend and follow. However, I get the following error when I try to boot off the newly compiled kernel:

    GLib-WARNING **: getpwuid_r(): failed due to unknown user id (0)

    The system seems to hang at that point. I can switch to other terminals but can’t interact with the system. I didn’t see any errors when compiling, and I can boot into my older kernel just fine.

    I compiled this kernel because I wanted to address the issues with installing Linux on lenovo X201 hardware, and I can see the graphics card is being handled properly, since I can see the splash screen at a decent resolution; without the i915.modeset=0 kernel parameter, I get a blank screen right after GRUB loads and the system hangs.

    Has anyone seen this before, and, if so, is there a resolution? Is there something wrong with the compile, or the configuration options (I chose the default)?

    Thanks again for the guide, and I’d appreciate any help you can give.

    -Al

  20. Dixon

    Another great article. Thanks!

    Do you have any advice for speeding up recompiling? It’s taking me 3 hours to make a configuration change recompile and test. I’d like to speed that up a bit if I can.

  21. Łukasz Proszek

    Hi. Everything went smoothly up until this came up:
    mv: cannot stat `/root/linux-2.6.32/debian/linux-image-2.6.32-25-duir/lib/modules/2.6.32-25-duir/modules.order': No such file or directory

    And yes, there is no such file.

    Would you care to comment on that? (the duir flavour is basicaly generic-pae with increased maxcpu to 32 (and a few other options)

  22. lithiumc

    Hi,

    I am having a similar issue as Lukasz. I followed the directions to a T and it compiled without issue. I then try and use the following file as a base for my config:
    http://openelec.git.sourceforge.net/git/gitweb.cgi?p=openelec/openelec;a=tree;f=projects

    I copy and paste every line into the config.flavour.core2 file and run debian/rules editconfigs.

    I make adjustments to the processor turn off wireless and fix 10 issues that the config file doesn’t like. Exit and Save.

    I then proceed to compile without issue or error.

    running the following command:

    no_dumpfile=true skipabi=true skipmodule=true fakeroot debian/rules binary-core2

    Once I go to install, Headers install file but the images reports:
    find: `/lib/modules/2.6.32-31-Core2/kernel/arch': No such file or directory

    Any clues as to why the modules are not being installed???

  23. Tayna Waegner

    Thanks for this post and for making a complicated task more clear. I always appreciate step-by-step instructions.

  24. John Alvin Lo

    Easier Method:
    1. Go to http://kernel.ubuntu.com/~kernel-ppa/mainline/
    2. Look for folder v2.6.34-lucid/
    3. Inside are the i386 & amd64 DEB files
    4. First install the linux-headers…all.deb (same for i386 & amd64)
    5. Next install the other linux-headers…i386.deb or amd64.deb
    6. Finally, install the linux-image…i386.deb or amd64.deb
    7. Worked like a charm for me… no hassles!

  25. Mark

    These step by step instructions are a great help. But I’m still having trouble with the deb files.

  26. prakash

    hey, It worked really nicely.
    But I want to compile with some code change.
    say suppose in ipv4 module.
    do we need any new steps since its not recompiling i guess using same steps.

  27. rushier

    Thanks for the steps. I was able to build and update the kernel on my machine.
    But I have a quick question: I made a simple change in one of the kernel drivers, and then rebuild the kernel after step “fakeroot debian/rules clean”, as I don’t want to take time to rebuild everything. But it seems that that specific .ko was not rebuilt.

    How to quickly update the kernel when I make changes to a specific driver?

    Thanks.

  28.  

Leave a comment

For questions and/or support consider using the forums.

semipurposive-mildly