After making 0.01 work, I realized that the code had a lot of bugs. Some of the
bugs might have been introduced as a result of my changes! The observation that
really scared me was that, the execution continued after a return from
execve!!! I did not have the patience to go and debug that one! So I moved on
1.0 was relatively easier. Compilation did not have much of problems. The
hard-disk driver was again ancient, I had to replace it. Once that was done,
the kernel was up and running. It had networking too! This took me very little
while. So, I thought to myself, why not 2.4!
So, last Saturday was 2.4 day. I did a "make menuconfig" on 2.4.28 and did a
"make dep" followed by "make bzImage". I had save the entire build log into a
file and later created a directory and copied only those files that were being
used for the build. Changed all the make files to become ordinary makefiles. I
mean, no more menuconfig etc.
At the end of all that, I have a directory tree with the 2.4.28 with source
code that can be compressed to 3.2MB. All I have to do is, issue make from the
root or anywhere within the tree and the subtree below that gets built. Just
the way I like it.
The final output is vmlinux! Now, there was a tiny problem, vmlinux is linked
in an ungodly manner at 3G and beyond. Grub just refuses to load the vmlinux
saying "kernel too big" or some crap like that. There is a patch floating
around in the net that makes some changes that makes grub happy. Here is a link
to that patch. I have uploaded it here.
So, Now I have a fully functioning kernel - I can't yet claim that I understand
it. But I know, how exactly it is built and what all exactly go into building
The next step is to really trim out the unnecessary things...for example,
head.S still contains code to check if it is a 386 or 486 etc...I am sure,
there must be other places in the kernel where similar checks might be
happening. Since I want a game kernel, I really don't need such checks.