what to do after kernel is in memory

Discussions on more advanced topics such as monolithic vs micro-kernels, transactional memory models, and paging vs segmentation should go here. Use this forum to expand and improve the wiki!
Post Reply
teodori
Member
Member
Posts: 103
Joined: Wed Nov 14, 2012 4:55 pm

what to do after kernel is in memory

Post by teodori »

Hello,
I have written a simple bootloader and kernel (very basic!). The MBR code loads sectors and jumps to it. The freshly loaded code sets up a temporary 32 bit GDT and jumps to 32 bit Protected Mode without paging. Then it creates the final 64 bit GDT, the final 64 bit IDT and the paging tables PML4, PDPT, PDT and PT, before jumping to 64 bit Long Mode. As soon as it is in 64 bit Long Mode I switch from Assembly to C code with void kmain(uint64_t gdtptr, uint64_t idtptr, uint64_t pml4ptr) as first function. I have written some basic functions like managing the GDT, the IDT, the paging tables and the VESA screen. And here is my question: What should I do next? How do I communicate with the hard disk, the network interface or the keyboard? How do I read the rest of my OS into memory?
Nable
Member
Member
Posts: 453
Joined: Tue Nov 08, 2011 11:35 am

Re: what to do after kernel is in memory

Post by Nable »

> What should I do next?
You should do anything _you_ want to do, because that's your OS, written for your reasons.
As for me, writing native keyboard driver should be the next thing (because you can do output via framebuffer but applications w/o input are ~useless, and keyboard is one of the simplest ways of receiving input).
Then IDE/AHCI driver to interract with storage devices and possibly load additional modules of your OS. But I'm not sure about the second step, working multitasking or network support may be more important for you.

> How do I communicate with the hard disk, the network interface or the keyboard?
You can use emulator or CPU mode switching to use BIOS code for these things but it's much better to write native drivers for your OS.

> How do I read the rest of my OS into memory?
You can use GRUB to load additional modules (and even the whole initial RAMFS) or you can implement drivers to load files on your own.

At osdev wiki you can find a lot of interesting articles about all these things.
E.g., http://wiki.osdev.org/Beginner_Mistakes , http://wiki.osdev.org/What_order_should ... _things_in , http://wiki.osdev.org/How_Do_I_Use_A_De ... With_My_OS
User avatar
nerdguy
Member
Member
Posts: 70
Joined: Wed Oct 30, 2013 8:11 am

Re: what to do after kernel is in memory

Post by nerdguy »

Keyboard Driver
Here's a good example in VC++ : http://www.brokenthorn.com/Resources/OSDev19.html
When you say, "I wrote a program that crashed Windows," people just stare at you blankly and say, "Hey, I got those with the system, for free." - Linus Torvalds
64 bit Kernel in early development
http://github.com/nerdguy12/core64
teodori
Member
Member
Posts: 103
Joined: Wed Nov 14, 2012 4:55 pm

Re: what to do after kernel is in memory

Post by teodori »

thank you :)
Post Reply