Hi,
Thanks for making this. It's good to know that someone at least has found and categorised all the bugs (although I notice noone mentioned the amazing arithmetic for page-aligning something in the heap: "x & 0xFFF" (!!!)).
I do not have time to update this or to work on the followup tutorials at all at the moment, and that is unlikely to change no matter how much I wish it might.
I have written a new version here:
https://github.com/jmolloy/JMTK . I've described it as a "teaching kernel" more than a tutorial, and have attempted to document it in a similar way. It is less of a walkthrough than the previous version, and it is MUCH better written. The previous version was written in around 2007 when I was a second-year university student. Stuff like u32int instead of uint32_t was inherited from the coding style at the company I was on a placement with.
The teaching kernel is structured differently to a tutorial. Instead of "chapters" in a linear progression, it is a directed graph with each arc adding functionality. One can choose one's own route to the functionality you want, skipping the stuff you find useless.
If someone wants to fork this kernel and complete it, or advertise it as-is, I'm perfectly happy. I won't have time to complete it. I'm particularly pleased with the general "plug-n-play" design for adding functionality, the kernel heap and the paging code.
The design stems from the requirement of being able to effectively maintain a project that exists in multiple states simultaneously - different subsets of the code are used for each chapter and an update to one file must find its way into all chapters that use that file. So this works, I designed it to be purely additive. Successive chapters could ONLY add files. They couldn't modify or remove previously existing files. This means there are no diffs between chapters and partitioning it up is easy. This made it quite an attractive design in the end.
Anyway, I hope someone finds a use for it. I think there is a place in the world for an introductory kernel that is larger in scope than the wiki barebones and bridges the gap between theory and practical that my original kernel tutorial tried to do.
By the way, I totally disagree with the requirement in the barebones of a cross compiler. With good use of -nostdlibinc you can get access to the compiler headers (stdint.h and friends) without the OS headers. Also not requiring a cross compiler makes the thing infinitely more accessible. I'd appreciate if people could stop spouting "you need a crosscompiler" without really really good reason (and I now work as a compiler engineer so they really need to be good reasons
)
EDIT: Oh, the really cool thing about this is that it can also run as a Linux hosted process! which means you can debug your heap code or threading code with GDB on a hosted box. And it has a bunch of regression tests both for hosted mode and for baremetal mode (which are run using qemu).
Cheers,
James