|
Mike McGrath |
c7a89c2 |
|
|
Roland McGrath |
11487c5 |
Kernel package tips & tricks.
|
|
Roland McGrath |
11487c5 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
The kernel is one of the more complicated packages in the distro, and
|
|
Roland McGrath |
11487c5 |
for the newcomer, some of the voodoo in the spec file can be somewhat scary.
|
|
Roland McGrath |
11487c5 |
This file attempts to document some of the magic.
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
Speeding up make prep
|
|
Roland McGrath |
11487c5 |
---------------------
|
|
Roland McGrath |
11487c5 |
The kernel is nearly 500MB of source code, and as such, 'make prep'
|
|
Roland McGrath |
11487c5 |
takes a while. The spec file employs some trickery so that repeated
|
|
Roland McGrath |
11487c5 |
invocations of make prep don't take as long. Ordinarily the %prep
|
|
Roland McGrath |
11487c5 |
phase of a package will delete the tree it is about to untar/patch.
|
|
Roland McGrath |
11487c5 |
The kernel %prep keeps around an unpatched version of the tree,
|
|
Roland McGrath |
11487c5 |
and makes a symlink tree clone of that clean tree and than applies
|
|
Roland McGrath |
11487c5 |
the patches listed in the spec to the symlink tree.
|
|
Roland McGrath |
11487c5 |
This makes a huge difference if you're doing multiple make preps a day.
|
|
Roland McGrath |
11487c5 |
As an added bonus, doing a diff between the clean tree and the symlink
|
|
Roland McGrath |
11487c5 |
tree is slightly faster than it would be doing two proper copies of the tree.
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
build logs.
|
|
Roland McGrath |
11487c5 |
-----------
|
|
Roland McGrath |
11487c5 |
There's a convenience helper script in scripts/grab-logs.sh
|
|
Roland McGrath |
11487c5 |
that will grab the build logs from koji for the kernel version reported
|
|
Roland McGrath |
11487c5 |
by make verrel
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
config heirarchy.
|
|
Roland McGrath |
11487c5 |
-----------------
|
|
Roland McGrath |
11487c5 |
Instead of having to maintain a config file for every arch variant we build on,
|
|
Roland McGrath |
11487c5 |
the kernel spec uses a nested system of configs. At the top level, is
|
|
Roland McGrath |
11487c5 |
config-generic. Add options here that should be present in every possible
|
|
Roland McGrath |
11487c5 |
config on all architectures.
|
|
Dave Jones |
ac34e0a |
|
|
Roland McGrath |
11487c5 |
Beneath this are per-arch overrides. For example config-x86-generic add
|
|
Roland McGrath |
11487c5 |
additional x86 specific options, and also _override_ any options that were
|
|
Roland McGrath |
11487c5 |
set in config-generic.
|
|
Dave Jones |
ac34e0a |
|
|
Dave Jones |
ac34e0a |
The heirarchy looks like this..
|
|
Dave Jones |
ac34e0a |
|
|
Dave Jones |
ac34e0a |
config-generic
|
|
Dave Jones |
ac34e0a |
|
|
|
Dave Jones |
ac34e0a |
config-x86-generic
|
|
Dave Jones |
ac34e0a |
| |
|
|
Dave Jones |
ac34e0a |
config-x86-32-generic config-x86-64-generic
|
|
Dave Jones |
ac34e0a |
|
|
Dave Jones |
ac34e0a |
An option set in a lower level will override the same option set in one
|
|
Dave Jones |
ac34e0a |
of the higher levels.
|
|
Dave Jones |
ac34e0a |
|
|
Dave Jones |
ac34e0a |
|
|
Roland McGrath |
11487c5 |
There exist two additional overrides, config-debug, and config-nodebug,
|
|
Roland McGrath |
11487c5 |
which override -generic, and the per-arch overrides. It is documented
|
|
Roland McGrath |
11487c5 |
further below.
|
|
Roland McGrath |
11487c5 |
|
|
Dave Jones |
ac34e0a |
|
|
Roland McGrath |
11487c5 |
debug options.
|
|
Roland McGrath |
11487c5 |
--------------
|
|
Roland McGrath |
11487c5 |
This is a little complicated, as the purpose & meaning of this changes
|
|
Roland McGrath |
11487c5 |
depending on where we are in the release cycle.
|
|
Roland McGrath |
11487c5 |
If we are building for a current stable release, 'make release' has
|
|
Roland McGrath |
11487c5 |
typically been run already, which sets up the following..
|
|
Roland McGrath |
11487c5 |
- Two builds occur, a 'kernel' and a 'kernel-debug' flavor.
|
|
Roland McGrath |
11487c5 |
- kernel-debug will get various heavyweight debugging options like
|
|
Roland McGrath |
11487c5 |
lockdep etc turned on.
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
If we are building for rawhide, 'make debug' has been run, which changes
|
|
Roland McGrath |
11487c5 |
the status quo to:
|
|
Roland McGrath |
11487c5 |
- We only build one kernel 'kernel'
|
|
Roland McGrath |
11487c5 |
- The debug options from 'config-debug' are always turned on.
|
|
Roland McGrath |
11487c5 |
This is done to increase coverage testing, as not many people actually
|
|
Roland McGrath |
11487c5 |
run kernel-debug.
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
To add new debug options, add an option to _both_ config-debug and config-nodebug,
|
|
Roland McGrath |
11487c5 |
and also new stanzas to the Makefile 'debug' and 'release' targets.
|
|
Roland McGrath |
11487c5 |
|
|
Roland McGrath |
11487c5 |
Sometimes debug options get added to config-generic, or per-arch overrides
|
|
Roland McGrath |
11487c5 |
instead of config-[no]debug. In this instance, the options should have no
|
|
Roland McGrath |
11487c5 |
discernable performance impact, otherwise they belong in the debug files.
|
|
Roland McGrath |
11487c5 |
|