The Building Process

Trying to build all the file systems from 2.6.x is quite a challenge by itself due the span of more than 5 years which passed from 2.6.0 (December 2003) to 2.6.29 (March 2009). Luckily, kbuild, the makefile-based build system did not change that much and I had to divide the releases in two groups: 2.6.0 to 2.6.12 (older half) and 1.6.13 o 2.6.29 (newer half). For the first one I had to use the

make -C ... SUBDIRS=...module.o

command while for the second I was able to use a simpler one

make fs/fs/module.ko.

In both cases the sequence of configuration commands was the following:

make mrproper
make allmodconfig
make prepare

On the toolchain front I used the latest binutils (2.19.1) from Debian 5.0 Lenny and two GCC versions: the 4.1.2, the latest GCC from the 4.1 series that is available in Debian Unstable Sid for the newer half and a manually-compiled 2.95.3 for the older one. To get 2.6.16 to 2.6.21 to compile I also had to manually add an include for limits.h in the scripts/mod/sumversion.c.

From the storage perspective, the 30 kernel trees weight about 1.1 GB in tar.bz2 form, 7.4 GB unpacked and 12.4 GB when all the file systems are compiled. To put things into perspective, after make bzImage the 2.6.29 is 1.3 GB and gets to 3.8 GB after make modules. This is, of course, an upper bound because the kernel was configured with make allmodconfig. A few more details: the bzImage obtained this way was 3.7 MB and the 2595 .ko files that were produced sum up to a hefty size of 889 MB.

Various sizes of the 2.6.x kernels. From bottom to top, the number indicate: the size of the .tar.bz2 archive, the uncompresses size, the size after all the file systems were compiled.

The scorecard of the compilation success. The line between 2.6.12 and 2.6.13 indicates the place where the make command had to be slightly changed. The number of rows is 65. The number of successful compiled file systems for 2.6.29 is 54. The total number of compiled file systems is 1377. ext4 shows up with two names: ext4 and ext4dev. A notable thing is the "no file system left behind" syndrome: once it got in the tree, a file system almost never dies. There is only one true exception for this rule: intermezzo. The other two are devfs and jffs which were deprecated in favor of their descendants, sysfs and jffs2.