Notes:


As I said, this part will try to summarize the principal points you have to look at, even before doing any line of code. In fact, this work is the answer of: How does my architecture influence my sources?

In this list, you may put in first place your compiler, your simulator or whatever you name the thing that generates the first executable you will run as known as kernel. It must understand your source code and outputs a file with the required format.
This also needs a loader. It is the most "arch-dependent" code because when you load the kernel, you have no background and no environment. You are at the level 0 of your hardware. Thus, you need to incorporate all the function like mount in order to load your kernel.

Once, you have the compiler and the kernel loader, you can test your work. But, during the development of those, you must see the concepts included in the original source and find the equivalent tansposed to your architecture. For example, if the source is based upon a growing up stack concept and the hardware was designed for a growing down stack, you must find a way to solve this contradiction.
If you successfully booted your kernel, you have to add all the necessary part to get your hardware communicating. It is time to port drivers or to write new ones in order to get the network interface, the I/O devices and the hard disk drives.

Then, the next step which is libc and userland. It can reveal lots of bugs in compiler and test if your drivers are working well. Consequently, it must be done very carefully. In fact, at its early stage, the developer is not sure of the cause of a system crash. It can be the compiler, the kernel, the application or a combinaison of them.
This pattern would be beautiful if some guys do not release a new version of gcc or Linux, meanwhile. But, the thing is they do! That's why we need to merge our source modifications with the latest official version. We should not get too much differences between the official and the development tree. It makes the merge with Linux kernel tree easier.