Updating the upstream source ============================ 1) You can use either: a) a git repository of the kernel source b) a kernel tarball from kernel.org (e.g. linux-2.6.25.tar.bz2) and, optionally, a patch (e.g. patch-2.6.26-rc3.bz2). 2) Run ./debian/bin/genorig.py or ./debian/bin/genorig.py [patch] This will produce ../orig/linux-2.6_.orig.tar.gz (e.g. linux-2.6_2.6.26~rc3.orig.tar.gz). (genorig.py requires the python and unifdef packages to be installed) 3) Unpack linux-2.6-.orig.tar.gz, cd into the new directory, and do a 'svn export' to get the debian/ subdirectory. Alternatively unpack using "make -f debian/rules orig". (the orig target of the Makefiles requires rsync) Applying patches to the Debian kernel tree ========================================== The Debian kernel packaging uses a custom patching system: Patches are stored below debian/patches, loosely sorted in bugfix/, features/ and debian/. Patches are in the standard kernel patch format. The order and the selection of patches which are applied during build time are specified in the series/ subdirectory. For each revision there may be up to one file named REVISION specifying the patches applied for the standard revision and one file named REVISION-extra for addon flavours. If, e.g. the patches are specified for 2.6.26-12, the patch order file is called debian/patches/series/12 for the standard kernel images and debian/patches/series/12-extra for the addon flavours. Let's look at the actual series file for 2.6.26-12: + bugfix/all/net-unix-gc-fix-soft-lockups-oom-issues.patch + bugfix/all/inotify-watch-removal-umount-races.patch + bugfix/all/atm-duplicate-listen-on-socket-corrupts-the-vcc-table.patch + bugfix/all/ata-pata_marvell-vs-ahci.patch + features/sparc/video-sunxvr500-intergraph.patch The patches to be applied are specified relative to debian/patches. "+" indicates that the patch should be added, "-" can be used to drop a patch in later patch series (e.g. if the patch turned out to be faulty). The series files may be arbitrarily documented with comments starting with "#". Let's now have a look at the series file for the addon kernel flavours of 2.6.26-12: + features/all/xen/dom0-fix-processor-throttling-when-pr-id-is-minus-1.patch featureset=xen The same syntax applies for specifing the patches, but an additional argument is needed which specifies the featureset the patch applies to. If you want to generate a source tree with all patches applied, run make -f debian/rules source-all The resulting source can be found below debian/build. Kernel config files =================== Configuration files are constructed dynamically from a number of config files, as listed in debian/config//defines. Control file ============ The master control file debian/control must be generated before the package is uploaded. debian/rules contains the debian/control target, which generates the control file by invoking the debian/bin/gencontrol.py script, which combines the templates from the templates directory and architecture-specific defines file to produce the debian/control file. Note that this target is intentionally made to fail with a non-zero exit code to make sure that it is never run during an automatic build. The following variables are substituted into the templates: @version@ Upstream kernel version, for example 2.6.11. @major@ The major version, for example 2.6 @arch@ The Debian arch name, such as powerpc or i386. @flavour@ The build flavour, such as 686 or k7-smp. @class@ The CPU/architecture class; displayed in synopsis. It should be fairly short, as the synopsis is supposed to be <80 chars. It should be in the form "foo class", and will show up in the description as "foo class machines". @longclass@ The CPU/architecture class; displayed in the extended description. The same rules apply as in @class@. If this is unset, it will default to @class@. @desc@ (Potentially) multi-line verbiage that's appended to -image descriptions. @abiname@ Current abiname, a single digit. Normally, the arch-specific contents should be controlled by adjusting the corresponding defines file. TODO: - Patches applied to the upstream source - How to define a flavour - More detail on generation of debian/control and configs