Basic bootsector / kernel

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
xxchrisxx

Basic bootsector / kernel

Post by xxchrisxx »

I have just gotten into OS dev and I am kind of lost. I've made attempts to compile a bootsector, a kernel starter (boiler plate?) and a kernel and failed. What i'm really looking for is someone who can paste me code for a bootsector (that sets up pmode, and anything else that's needed to begin developing a kernel, and of corse one that loads the kernel), and a basic kernel (nothing more than a "hello world" kernel). Any compiling instructions on how to compile it would be really helpful. I will be attemping to boot it off a floppy. I'm not trying to steal code, but if I saw a basic example it would really help clear everything up. Sorry if this is a bit much to ask but I havn't been able to get any OS dev books right yet and the tutorials online don't seem to explain from the ground up (at least the ones i've read).
Tim

Re:Basic bootsector / kernel

Post by Tim »

Get hold of the GRUB sources from http://www.gnu.org/software/grub/. GRUB is a self-contained boot loader, and the source includes a sample kernel, with assembly startup code and a 'hello world' written in C.
HOS

Re:Basic bootsector / kernel

Post by HOS »

I would start by checking out the .:QuickLinkz:. thread above, at http://www.mega-tokyo.com/forum/index.php?board=1;action=display;threadid=3254

you should be able to find many examples and tutorials for the boot process. i personally started using a pre-written FAT12 boot sector to load a kernel, and after i learned a lot more i was able to write my own boot loader to load my kernel. i would not jump right into trying to write both a bootloader and kernel at the same time, but whatever you do, i would start by following the links in that thread and read the example code and tutorials there.
Ozguxxx

Re:Basic bootsector / kernel

Post by Ozguxxx »

Hey, os books does not usually give ready to paste code to boot your kernel image or take youinto pmode. They tell about theory. In my pathetic humble opinion, giving you grub will not be helpful because it is too easy. If I were you -again; in my pathetic opinion- I would try to find bootloader that HOS is talking about and see if it is really that hard to start with your own stuff. If it REALLY is then go in grub way. Good luck.
HOS

Re:Basic bootsector / kernel

Post by HOS »

aha!

with some digging i found the original bootloader i used:
http://osdev.neopages.net/downloads.php

the bootloader i found most helpful was John Fine's Bootf02 bootsector which enabled the A20, switched to protected mode, loaded the kernel (to 1mb i believe) and jumped to it. from then, it was simply a matter of writing a kernel to switch to my own GDT and move up from there. it was very helpful and, as i said, later enabled me to write my own bootloader to do the same thing once i had learned a bit more. but at first it freed me to simply work on the kernel (since which i've completely re-written it a few times...)
xxchrisxx

Re:Basic bootsector / kernel

Post by xxchrisxx »

Thanks for the link to QuickLinks HOS, I almost fell off my chair when I saw all the pwetty new info I had to read ;)

I've downloaded GRUB and bootf02 and i'm not sure which to try first. I just need the simplest to load the kernel off a floppy.

Although i'm still not quite sure how all this pieces together. I could post the code I have if it helps ?
HOS

Re:Basic bootsector / kernel

Post by HOS »

like Ozgunh, i would avoind Grub, at least for now, because Bootf02 is really helpful for learning what exactly is going on. you have to find the file for the bootsector (i think its bootf02.bin or something -- the file size should be 512 bytes) and write it to the first sector of a floppy disk. after that, you can read/write to the disk using any OS that supports the FAT12 file system. then just copy your kernel file to the disk. i would suggest using the kernel file that came with Bootf02 first, then try your own. if at this point you have problems, let us know. for me personnaly, that was the easiest way to get started.
xxchrisxx

Re:Basic bootsector / kernel

Post by xxchrisxx »

Problems :(... I added BOOTF.bin to the floppy using

PARTCOPY bootf.bin 0 3 -f0 0
PARTCOPY bootf.bin 3E 1C2 -f0 3E

and the KERNEL_C.bin with

copy kernel_c.bin a:kernel.bin

I booted off the floppy and it said:

External Cache type: Pipeline Burst
EDO On Board
xxchrisxx

Re:Basic bootsector / kernel

Post by xxchrisxx »

Ohhhh.. nevermind I see the text the kernel was supposed to print at the top ! lol, sorry !

I don't know what that other stuff ment, but it works and i'm happy ! Thanks to all that have helped me. I will play with this for a while and hopefuly I can begin my own kernel without too many problems :)
xxchrisxx

Re:Basic bootsector / kernel

Post by xxchrisxx »

I've got one last thing to ask :D

At the top of the kernel_c.c file, there is this comment:

// When started from bootf we get to this code with a temporary GDT,
// a temporary stack, temporary page tables, no TSS, no IDT and interrupts
// disabled.
//
// There is a fair amount of ASM work to be done before we can do much safely
// in C; But ignoring all that we execute some C code just to prove we got
// here.

Is it still ok to keep developing my kernel using just this bootsector alone? How far into development will I be able to go without setting up a proper stack, page tables etc ?
nullify

Re:Basic bootsector / kernel

Post by nullify »

Page tables are for virtual memory (worry about this when you get to memory management). TSS'es are used for task switches (multitasking). A proper IDT allows you to catch processor exceptions, process hardware IRQ's (along with the 8259 chip), and make use of software interrupts. If he considers the GDT and stack `temporary', then it's probably a good idea to properly set them up as early as you can. (However, initially you might be able to get by without doing so, depending on how sane the default tentative GDT and stack are).
User avatar
Solar
Member
Member
Posts: 7615
Joined: Thu Nov 16, 2006 12:01 pm
Location: Germany
Contact:

Re:Basic bootsector / kernel

Post by Solar »

Nice to see how two people could misunderstand each other so neatly. ;-)

Ozgunh82 steps up and says, "starting with GRUB would make it too easy; check out that bootloader HOS talked about instead."

And HOS continues talking about how much that bootloader helped him, since it relieved him of the pain of A20 gate, protected mode, file loading and jumping into the kernel proper...

...which is exactly what GRUB does. ;-)

Ozgunh82, xxchrisxx is looking for a headstart. He wants to get by the bootloader phase as quickly as possible, and I tend to second that notion. I know it's somewhat of a "holy war" question whether one should start with kernel coding right away or should go through the bootloader process first; but xxchrisxx already made that decision.

My suggestion would be, use GRUB. It is a bootloader already widely employed, which relieves other users from installing yet another bootloader. It is also highly sophisticated, supporting network booting and many different file systems, as well as actively supported. It enables you to boot multiple binary modules, in various binary formats, and gives you additional information (like e.g. a memory map) that would require some sophisticated BIOS hacking otherwise.
Every good solution is obvious once you've found it.
User avatar
Pype.Clicker
Member
Member
Posts: 5964
Joined: Wed Oct 18, 2006 2:31 am
Location: In a galaxy, far, far away
Contact:

Re:Basic bootsector / kernel

Post by Pype.Clicker »

It's quite surprising how "holy wars" can appear about a "all-in-one-ready-to-use" bootloader between people that usually consider that "oh-god-why-doesn't-PC-boot-in-32bits-mode" :p
Tim

Re:Basic bootsector / kernel

Post by Tim »

Ozgunh82: OS development is hard enough without making it harder for yourself. One of the signs of being a great programmer is knowing what tools to use, and when.
HOS

Re:Basic bootsector / kernel

Post by HOS »

And HOS continues talking about how much that bootloader helped him, since it relieved him of the pain of A20 gate, protected mode, file loading and jumping into the kernel proper...
yes, this bootloader did help me at first to relieve these issues, but ultimately what i meant by it helped me was it helped me to understand the boot code better because i knew i was eventually going to write my own bootloader. now, i understand that some may not want to write their own bootloader and thats fine, you can focus right on kernl development then. but for me, i wanted to learn how to do that as well, and now i have a bootloader that i wrote and understand every line of. i think its just personal preference as far as whether you use a tool already available or write your own. i may even end up using grub later, but after writing my own bootloader i know more of what is involved and happening at a low level during booting.
Post Reply