BuildYourOwnKernel

Differences between revisions 13 and 23 (spanning 10 versions)
Revision 13 as of 2010-11-19 11:29:43
Size: 2931
Editor: c-83-233-18-148
Comment: Added instruction on how to install build-dep, and how to test.
Revision 23 as of 2012-03-30 17:12:31
Size: 4268
Editor: brad-figg
Comment:
Deletions are marked like this. Additions are marked like this.
Line 53: Line 53:
You'll still need the build-dependencies to build the kernel, though: == Build Environment ==

If you've not built a kernel on your system before, there are some packages needed before you can successfully build. You can get these installed with:
Line 59: Line 61:
== Modifying the configuration ==

This step can be skipped if no configuration changes are wanted. The build process will use a configuration that is put together from various sub-config files. The simplest way to modify anything here is to run:

    {{{
chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs
}}}

This take the current configuration for each architecture/flavour supported and call menuconfig for that. The chmod is needed because the way the source package is created looses the executable bits on the scripts.
 
Line 66: Line 80:
fakeroot debian/rules binary-generic fakeroot debian/rules binary-headers binary-generic
}}}

If the build is successful, a set of three .deb binary package files will be produced in the directory above the build root directory. For example after building a kernel with version "2.6.38-7.37" on an amd64 system, these three .deb packages would be produced:

    {{{
cd ..
ls *.deb
    linux-headers-2.6.38-7_2.6.38-7.37_all.deb
    linux-headers-2.6.38-7-generic_2.6.38-7.37_amd64.deb
    linux-image-2.6.38-7-generic_2.6.38-7.37_amd64.deb
Line 71: Line 95:
If build is successful, the directory above your current will contain .deb files. Install and reboot - you'll at least need the one starting with "linux-image", and many cases also the one starting with "linux-headers" as well. Install the three-package set (on your build system, or on a different target system) with dpkg -i and then reboot:

    {{{
sudo dpkg -i linux*2.6.38-7.37*.deb
sudo reboot
}}}
Line 75: Line 104:
The above instructions provide a very simple recepie for obtaining the sources The above instructions provide a very simple recipe for obtaining the sources
Line 79: Line 108:
[[https://wiki.ubuntu.com/Kernel/Action/GitTheSource|Git the source]]  || [[https://wiki.ubuntu.com/Kernel/Action/GitTheSource|Git the source]] || More information about using git to pull down the kernel sources. ||
 || [[https://wiki.ubuntu.com/KernelTeam/ARMKernelCrossCompile| ARM Cross Compile ]] || For more info about ARM and cross compilation. ||

This page will describe how to easily build the kernel.

The majority of users that are interested in building their own kernel are doing so because they have installed Ubuntu on their system and they wish to make a small change to the kernel for that system. In many cases the user just wants to make a kernel configuration change.

The purpose of this page is to give that user a minimum amount of information for them to meet the goal of making a simple change to the kernel, building it and installing their kernel. It is not intended to be the definitive guide to doing Ubuntu kernel development.

Obtaining the source for an Ubuntu release

There are a number of different ways of getting the kernel sources. The two main ways will be documented here.

If you have installed a version of Ubuntu and you want to make changes to the kernel that is installed on your system, use the apt-get method (described below) to obtain the sources.

However, if you wish to get the most up to date sources for the Ubuntu release you are running and make changes to that, use the git method (described below) to obtain the sources.

apt-get

The source code which generated a specific binary package may be obtained using the apt-get source <package> command. For example to obtain the source for the currently running kernel you can use the command:

  • apt-get source linux-image-$(uname -r)

git

All of the Ubuntu Kernel source is maintained under git. The source for each release is maintained in its own git repository on kernel.ubuntu.com. To obtain a local copy you can simply git clone the repository for the release you are interested in as shown below.

  • git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release>.git

For example to obtain the maverick tree:

  • git clone git://kernel.ubuntu.com/ubuntu/ubuntu-maverick.git

Build Environment

If you've not built a kernel on your system before, there are some packages needed before you can successfully build. You can get these installed with:

  • sudo apt-get build-dep linux-image-$(uname -r)

Modifying the configuration

This step can be skipped if no configuration changes are wanted. The build process will use a configuration that is put together from various sub-config files. The simplest way to modify anything here is to run:

  • chmod a+x debian/scripts/misc/*
    fakeroot debian/rules clean
    fakeroot debian/rules editconfigs

This take the current configuration for each architecture/flavour supported and call menuconfig for that. The chmod is needed because the way the source package is created looses the executable bits on the scripts.

Building the kernel

Building the kernel is quite easy. Change your working directory to the root of the kernel source tree and then type the following commands:

  • fakeroot debian/rules clean
    fakeroot debian/rules binary-headers binary-generic

If the build is successful, a set of three .deb binary package files will be produced in the directory above the build root directory. For example after building a kernel with version "2.6.38-7.37" on an amd64 system, these three .deb packages would be produced:

  • cd ..
    ls *.deb
        linux-headers-2.6.38-7_2.6.38-7.37_all.deb
        linux-headers-2.6.38-7-generic_2.6.38-7.37_amd64.deb
        linux-image-2.6.38-7-generic_2.6.38-7.37_amd64.deb

Testing the new kernel

Install the three-package set (on your build system, or on a different target system) with dpkg -i and then reboot:

  • sudo dpkg -i linux*2.6.38-7.37*.deb
    sudo reboot

See also

The above instructions provide a very simple recipe for obtaining the sources and then building them. If you are going to be doing more kernel development than simple configuration changes you may want to look at:

Kernel/BuildYourOwnKernel (last edited 2024-01-25 18:52:39 by mhcerri)