I've started learning about kernel development about 2 months ago... I haven't even tried to write a single line of code yet, because I don't really know where to continue. I understand about writing a boot loader to get certain things up and running (the first sector on a drive needs to have a specific format for x86 PCs). I have a very good understanding of binary math/logic and a basic understanding of assembler. I know C,C++,[insert your favorite interpereted language here:java,.NET,scripts...]
Basically to answer my question as to where to continue, I should probably elaborate on my current understanding:
I know that in order to load additional programs, I first need to create a file system. I'm having difficulty in understanding how to start this. I basically think of a hard drive and think (theoretically) how I can manage the bits on the drive. I can come up wth a few good Ideas as to how to do it, but I get stuck at the point of how to even write to the drive using assembler. Some of the things I'm worried about are:
1: I know that Fat used some redundance in its index to mark bad sectors (in case the mark was on a bad sector itself). Do I even need to worry about this anymore? Does the drive's firmware handel this for me now?
2: Once I have the ability to read and write from my file system, I'm at a loss of how to execute other binary apps. Do I simply load the binary app to memory, and then use jmp command to begin execution of another binary? I know this part seems trivial, but I've only ever assembled single execution programs
. Or are all other binaries after this point somewhat interperated (I hope not, that seems inefficient)?
I'm not trying to write the next best OS (I'll leave that to the experts) I'm only trying to learn and expand my knowlege of the raw interaction of software with hardware. And learn a few things about CPU interrupts, BIOS, and memory management.