Differences between revisions 18 and 110 (spanning 92 versions)
Revision 18 as of 2008-04-08 17:22:07
Size: 4374
Editor: madduck
Comment: reorg
Revision 110 as of 2018-09-25 20:49:30
Size: 482
Editor: BenHutchings
Comment: Update kernel-handbook URL
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Building custom kernel packages = #language en
||<tablestyle="width: 100%;" style="border: 0px hidden">~-[[DebianWiki/EditorGuide#translation|Translation(s)]]: English - [[it/HowToRebuildAnOfficialDebianKernelPackage|Italiano]]-~||<style="text-align: right;border: 0px hidden"> (!) [[/Discussion|Discussion]]||
Line 3: Line 4:
This page is about rebuilding an official Debian kernel package with custom
changes. There is the Kernel Handbook about this:
http://kernel-handbook.alioth.debian.org/
See the Kernel Handbook section [[https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html#s-common-official|Rebuilding official Debian kernel packages]].
Line 7: Line 6:
We are following section 4.2: '''Rebuilding an official Debian kernel package'''

 * Reasons to do this:
  1.#1 Modifying the Debian configuration to change the '''preemption model'''.
  1.#2 Modifying the Debian configuration to change the '''timer frequency'''.
  1.#3 Modifying the Debian configuration to change to '''Pata'''.
  1.#4 Add an patch fix.
  1.#5 Add your favorite patchset.
 
What you'll get is exactly the kernel that Debian releases but with those
added changes. The new packages will not step on the official kernel images'
toes.

== Add a patch to linux-2.6 and build new kernel packages ==

  1. Create the directory where you will build the kernel package as a normal user.

  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}}}:
  {{{
  apt-get source linux-2.6
  cd linux-2.6-*
  }}}

  Now you are in the tree that holds the source and all changes Debian made to it.

  As an alternative, you could get a kernel tarball, e.g. from buildserver
  (see DebianKernel), unpack it, and get the latest Debian patches + config
  settings:
  {{{
  tar xzf linux-2.6_2.6.24~rc6.orig.tar.gz
  cd linux-2.6-*
  svn export svn://svn.debian.org/svn/kernel/dists/trunk/linux-2.6/debian
  }}}

  1.#3 Start a new stanza at the top of {{{debian/changelog}}} and use an
  appropriate version number. If you are adding a single patch "foo", you
  might want to append "+foo.1". If you are adding multiple patches for your
  company or yourself, use "+somename.1". You could do this with the {{{dch}}}
  tool from the {{{devscripts}}} package like so:
  {{{
  dch --local +foo.
  }}}

  1.#4 Append the same string to the {{{abi.abiname}}} field in
  {{{debian/config/defines}}} to ensure that your custom kernel package name
  doesn't bite with the official ones. In our case, we're now creating
  {{{linux-image-2.6.xx-y+foo.1-zzz}}}.

  1.#5 Put your patch into the {{{debian/patches}}} directory and add it to
  the series file (assuming {{{debian/patches/series/1}}} is the latest file
  in there):
  {{{
  cp ~/special-fix.patch debian/patches/bugfix/
  echo "+ bugfix/special-fix.patch" >> debian/patches/series/1+foo.1
  }}}

  Now check that your patchset still applies and fix any conflicts
  {{{
  make -f debian/rules source-all
  }}}

  1.#6 Document the addition of this patch in the new stanza in {{{debian/changelog}}}.

=== Building all kernel-related packages ===

  7.#7 Assuming you want to build '''all''' kernel-related packages, build
  with the appropriate {{{DEBIAN_KERNEL_JOBS}}} parameter (the number of
  processors you can use for the build):
  {{{
  ~/src/linux-2.6-2.6.24~rc6$ DEBIAN_KERNEL_JOBS=${NR_CPUS} debuild
  }}}

=== Building only a single kernel variant ===


  7.#7 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.

  Go to that directory.

  1.#8 Change the {{{.config}}} file, using e.g.
  {{{
  make menuconfig
  }}}

  1.#9 Compile the kernel and generate the kernel packages. Replace
  {{{$NR_CPUS}}} with the number of CPUs of the build machine (keeping it
  all on the same line) and run either
  {{{
  fakeroot make -f debian/rules.gen binary-arch_i386_none_k7 binary-indep \
    DEBIAN_KERNEL_JOBS=${NR_CPUS}
  }}}

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

  On a 2.0GHz CPU the compile will take 1 hour and 20 minutes and 2 package 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
  }}}
-----
 . CategoryKernel

Translation(s): English - Italiano

(!) ?Discussion

See the Kernel Handbook section Rebuilding official Debian kernel packages.