Differences between revisions 12 and 15 (spanning 3 versions)
Revision 12 as of 2007-12-27 23:24:39
Size: 4237
Editor: ?maximilianattems
Comment: more reasons on top
Revision 15 as of 2008-04-08 15:25:31
Size: 3967
Editor: madduck
Comment: simplifications, now use source package
Deletions are marked like this. Additions are marked like this.
Line 36: Line 36:
Now check that your patchset still applies and fix some eventual conflicts Now check that your patchset still applies and fix any conflicts
Line 46: Line 46:
== 10 easy (albeit time consuming) steps == == 7 easy (albeit time consuming) steps ==
Line 50: Line 50:
 1.#2 Get the kernel source. You could install the kernel source package:  1.#2 Get the package source. For this to work, you need to have {{{deb-src}}} lines for the official archive in {{{/etc/apt/sources.list}}}:
Line 52: Line 52:
apt-get install linux-source-2.6 apt-get source linux-2.6
Line 55: Line 55:
 1.#3 Download the Debian diff.gz file. That is the file that contains all the Debian changes for this kernel package. E.g http://ftp.debian.org/debian/pool/main/l/linux-2.6/linux-2.6_2.6.20-3.diff.gz
 1.#4 Patch the source with that. Cd into the tree of where you put the source, e.g. /home/hugo/linux-2.6.20-3-build/linux-2.6.20. You created linux-2.6.20-3-build and your script put linux-2.6.20 into it, cd into the latter and then:
Now your tree holds the source and all changes Debian made to it.

 1.#3 Add your patch into the {{{debian/patches}}} directory, as per the above. It may be a good idea to name the new series accordingly. For instance, when adding the "foo" patch, you might want to add a reference to the patch (see above) to {{{debian/patches/series/1+foo.1}}}, assuming {{{debian/patches/series/1}}} is the latest file

 1.#4 Now prepare the rules file for the one build you want to make:
Line 58: Line 61:
zcat <path>linux-2.6_2.6.20-3.diff.gz| patch -p1
}}}
Now your tree holds the source and all changes Debian made to it.
 1.#5 '''Make debian/rules executable'''. In your tree there is a directory named '''debian''', in there is a file called '''rules''', that has to be made executable, because it is executed.
 1.#6 '''Change the file debian/bin/abicheck.py'''. After line 18 that contains '''ret = 0''' add a line that says '''return 0'''. This will stop you from doing the abicheck.
 1.#7 Prepare the tree for build. Still in the tree directory where you patched, do:
{{{
fakeroot debian/rules debian/build debian/stamps
fakeroot make -f debian/rules.gen setup-i386-none-k7
fakeroot make -f debian/rules.gen setup_i386_none_k7
Line 70: Line 65:
fakeroot make -f debian/rules.gen setup-i386-none-686 fakeroot make -f debian/rules.gen setup_i386_none_686
Line 73: Line 68:
 1.#8 Change the .config file. Do:  1.#5 Change the .config file. Do:
Line 77: Line 72:
and make any changes you had in mind. E.g the changes mentioned above in '''Reasons for doing this'''. Also this is the time to add additional patches, e.g. the Debian Logo patch.
 1.#9 Compile the kernel and generate the image and headers debs. Do:
and make any changes you had in mind. E.g the changes mentioned above in '''Reasons for doing this'''. An alternative is to run
Line 80: Line 74:
fakeroot make -f debian/rules.gen binary-arch-i386-none-k7 make oldconfig
}}}
which uses the currently running configuration of the machine on which you are building.
Also this is the time to add additional patches, e.g. the Debian Logo patch.
 1.#6 Compile the kernel and generate the image and headers debs. Replace {{{$NR_CPUS}}} with the number of CPUs of the build machine and run:
{{{
fakeroot make -f debian/rules.gen binary-arch_i386_none_k7 DEBIAN_KERNEL_JOBS=${NR_CPUS}
Line 84: Line 84:
fakeroot make -f debian/rules.gen binary-arch-i386-none-686 fakeroot make -f debian/rules.gen binary-arch_i386_none_686 DEBIAN_KERNEL_JOBS=${NR_CPUS}
Line 86: Line 86:
And on a 2.0GHz CPU the compile will take 1 hour and 20 minutes and 2 deb files will be generated: the image file and the headers file, e.g. On a 2.0GHz CPU the compile will take 1 hour and 20 minutes and 2 deb files will be generated: the image file and the headers file, e.g.
Line 91: Line 91:
 1.#10 Install them with dpkg and now you have installed the stock Debian kernel with your changes in it. Congratulations ;-)  1.#7 Install them with dpkg and now you have installed the stock Debian kernel with your changes in it. Congratulations ;-)

This Page is about Rebuilding an official Debian kernel package

There is the Kernel Handbook about this: http://kernel-handbook.alioth.debian.org/

We are following section 4.2: Rebuilding an official Debian kernel package

  • Reasons to do this:
    1. Modifying the Debian configuration to change the preemption model.

    2. Modifying the Debian configuration to change the timer frequency.

    3. Modifying the Debian configuration to change to Pata.

    4. Add an patch fix.
    5. Add your favorite patchset.

What you'll get is exactly the kernel that Debian releases but with those added changes.

Add a Patch to linux-2.6

First get the orig tar ball from buildserver, see [DebianKernel], unpack it:

~/src$ tar xzf linux-2.6_2.6.24~rc6.orig.tar.gz

Get latest Debian patches + config settings:

~/src/linux-2.6-2.6.24-rc6$  svn export svn://svn.debian.org/svn/kernel/dists/trunk/linux-2.6/debian

Now you can start adding patches inside the patches dir. To have them applied don't forget to add them to the series file.

~/src/linux-2.6-2.6.24~rc6$ cp ~/special-fix.patch debian/patches/bugfix/
~/src/linux-2.6-2.6.24~rc6$ echo "+ bugfix/special-fix.patch" \
  >> debian/patches/series/1~experimental.1 

Now check that your patchset still applies and fix any conflicts

~/src/linux-2.6-2.6.24~rc6$ make -f debian/rules source-all

Then build with appropriate DEBIAN_KERNEL_JOBS according to the box core cpu number:

~/src/linux-2.6-2.6.24~rc6$ DEBIAN_KERNEL_JOBS=${NR_CPUS} debuild

7 easy (albeit time consuming) steps

Assuming you are just interested in building one flavor of a kernel-image.

  1. Create the directory where you will build the kernel package as a normal user.
  2. Get the package source. For this to work, you need to have deb-src lines for the official archive in /etc/apt/sources.list:

apt-get source linux-2.6

Now your tree holds the source and all changes Debian made to it.

  1. Add your patch into the debian/patches directory, as per the above. It may be a good idea to name the new series accordingly. For instance, when adding the "foo" patch, you might want to add a reference to the patch (see above) to debian/patches/series/1+foo.1, assuming debian/patches/series/1 is the latest file

  2. Now prepare the rules file for the one build you want to make:

fakeroot make -f debian/rules.gen setup_i386_none_k7

This presumes you are only interested in building a k7 AMD processor image! If you where interested in a 686 processor image do:

fakeroot make -f debian/rules.gen setup_i386_none_686

This will build a tree in the debian/build/build-i386-none-k7 or debian/build/build-i386-none-686 directory. Cd to that directory.

  1. Change the .config file. Do:

make menuconfig

and make any changes you had in mind. E.g the changes mentioned above in Reasons for doing this. An alternative is to run

make oldconfig

which uses the currently running configuration of the machine on which you are building. Also this is the time to add additional patches, e.g. the Debian Logo patch.

  1. Compile the kernel and generate the image and headers debs. Replace $NR_CPUS with the number of CPUs of the build machine and run:

fakeroot make -f debian/rules.gen binary-arch_i386_none_k7 DEBIAN_KERNEL_JOBS=${NR_CPUS}

or:

fakeroot make -f debian/rules.gen binary-arch_i386_none_686 DEBIAN_KERNEL_JOBS=${NR_CPUS}

On a 2.0GHz CPU the compile will take 1 hour and 20 minutes and 2 deb files will be generated: the image file and the headers file, e.g.

linux-image-2.6.20-1-k7_2.6.20-3_i386.deb
linux-headers-2.6.20-1-k7_2.6.20-3_i386.deb
  1. Install them with dpkg and now you have installed the stock Debian kernel with your changes in it. Congratulations ;-)