Hellwig made some great tips.
Two other thoughts..
1.) Make sure you understand the low level interrupt mechanism and how interrupts are turned into real C proceedure calls and back again. This is traditionally handled in the *.s file - which in the case of BSD is spit out by Sam's config program. So you'll eventuall need to rewrite the proper stuff for your system - although as a step 1, you'll create it by hand.
The most relevant part I have cut/pasted here:
"a modern take on a classic" - the course if being offered this fall at the URL: 6.828 / Fall 2014
The latest xv6 source is available via
Using the MIT course or the Lion's text will teach how the kernel works and how a user program interacts with it. IMO: Lion's commentary is super and 100% of the source is there to read and ponder. Please remember that generations of the best kernel hackers started with this document (although some of us predate it - but when I saw it I made a copy).
My point is getting the V6 kernel running on your HW. The take your learning from that and try a BSD kernel. The hardest part of the ports will be common and the V6 kernel is going to be a lot easier to get working, because it small and simple.
No you went get networking at all the cool BSD features, but if the idea to learn how to do it, start small scale as the MythBuster's guys always do ;-)