Skip to content

atzimas/kernel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kernel

A kernel is the core of every operating system. Its job is to provide high level abstractions for user-level (or userspace) applications to use the underline hardware without concering them with implementation details. It is also responsible for providing memory and resource protection for and from the user.

This project is an operating system kernel that boots using the Multiboot standard, hops from x86 Assembler code to C code and prints simple strings to the screen.

Warning: When jumping from the Multiboot entrypoint, we still operate at Ring 0, which is very, very, very bad. A standard kernel would:

  • set the system to its 64-bit (long) mode (applicable for x86 mostly),
  • setup paging and the MMU (i.e. establish Ring 3),
  • initialize a working stack and heap,
  • print the memory map of the system,
  • initialize the userspace,
  • map all I/O and provide safe handles for any userspace application,
  • and many, many more things.

Building

To build the kernel image, run make with:

make

or, if you have a fancy system:

make -j

After successfully building the raw kernel 64-bit ELF image, run the helpful scripts/make-iso script to create a bootable ISO image:

./scripts/make-iso

Then you can run the kernel by launching QEMU:

qemu-system-x86_64 -machine q35 -cdrom Image.iso

About

kernel - a small example of a Multiboot-compliant x86 operating system kernel.

Resources

License

Stars

Watchers

Forks

Contributors