How to speed up Linux kernel compilation?
Do not do make menuconfig
for every change you make to the sources, because it will trigger a full compilation of everything, no matter how trivial your change is. This is only needed when the configuration option of the kernel changes, and that should sheldom happen during your development.
Just do:
make
or if you prefer the parallel compilation:
make -j4
or whatever number of concurrent tasks you fancy.
Then the make install
, etc. may be needed for deploying the recently built binaries, of course.
Another trick is to configure the kernel to the minimum needed for your tests. I've found that for many tasks a UML compilation (User Mode Linux) is the fastest. You may also find useful make localmodconfig
instead of make menuconfig
to start with.
- Use
make
parallel build with-j
option - Compile for the target architecture only, since otherwise make will build the kernel for every listed architecture.
i.e. for eg instead of running:
make
run:
make ARCH=<your architecture> -jN
where N
is the no of cores on your machine (cat /proc/cpuinfo
lists the no of cores). For eg, for i386
target and host machine with 4 cores
(output of cat /proc/cpuinfo
):
make ARCH=i386 -j4
Similarly you can run the other make targets (modules
, modules_install
, install
) with -jN
flag.
Note: make
does a check of the files modified and compiles only those files which have been modified so only the initial build should take time, subsequent builds will be faster.
You do not need to run make menuconfig
again every time you make a change — it is only needed once to create the kernel .config
file. (Or possibly again if you edit Kconfig
files to add or modify configuration options, but this certainly shouldn't be happening often.)
So long as your .config
is left alone, running make
should only recompile files that you changed. There are a few files that must be compiled every time, but the vast majority are not.