diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 192 |
1 files changed, 22 insertions, 170 deletions
@@ -45,88 +45,46 @@ All features are only very rudiemntary and buggy. * PCI bus scanning * Physical memory management * Virtual memory managment (Paging) -* Multitasking (2 tasks so far) -* Multiple processors (hardcoded 2) +* Multitasking +* Multiple processors * Floppy disk driver * VESA +* ACPI / MP (to get processor info) Todos ----- Some things I would like to add someday: +* shell + +* drivers to read/write usb sticks * Filesystem (probably ext2) +* kernel should run in high memory (~3gb) virutal mem. why? except v86 tasks? + * e1000 driver -* drivers to read/write usb sticks -* networking stack / webserver + * port c lib and gcc +* networking stack / webserver * user space / ring3 / ELF binaries support -* mouse support -* simple window manager -* 64-bit support + * alternatively grub as bootloader -* implement a real shell (in user mode) -* kernel should run in high memory (~3gb) virutal mem. why? except v86 tasks? -* let processors sleep if there is no work -* use ACPI instead of MP spec. +* 64-bit support * ARM -* JVM? +* JVM +* distributed OS + +* mouse support +* simple window manager Issues ------ -* memory map and some other locations are hardcoded. +* stack heap sizes?? +* multitasking crashes sometimes/ page faults? interrupts !? * the first ~4mb of physical mem are reserved by mem manager (hardcoded) -* bootloader loads only 52 sectors of kernel into mem. ~25KB! * size of bitmap to track free blocks of physical memory is hardcoded to max. * Assumed suport for VESA mode 0x114 with linear addressing! -* My Acer Aspire seems to lack MP tables, switch to ACPI - - -MEMORY LAYOUT -============= - -floppy image ------------- -* 0x0000 - MASTER BOOT RECORD -* 0x0200 - kernel image (contains sotrage for interrupt desc. table) -* 0x6400 - fool-font binary -* 0x8000 - file system will go here? - -ram ---- - -0x1000 - boot loader puts the kernel binary here. - -0x7000 - entry point for APs (Application Processors). - -0x7c00 - first stage boot loader (loaded by bios) boot/mbr.asm - includes initial Global Descriptor Table! - -0x7c00 + 3 (after jmp boot_16) - boot loader puts number of boot floppy disk here. - -0x7c00 + 0x600 - boot loader puts number of records in memory map in here! - -0x7c00 + 0x400 - the boot loader puts the memory map obtained from the - bios here before switching to protected mode. - -0x8300 - boot loader puts the vesa modes here! - -0x9000 - esp (stack counts down) - -0x9000 - physical memory manager bitmap!!! - -0xb000 - memory above this is used for dma (by our floppy.c driver) REFERENCES @@ -135,11 +93,9 @@ REFERENCES * LINUX KERNEL * GNU HURD * MINIX -* FreeBSD etc. +* FreeBSD * xv6 -* distributed OS? - -* e1000 driver +* e1000 linux driver * http://www.brokenthorn.com/Resources/OSDev17.html * http://www.jamesmolloy.co.uk/tutorial_html/9.-Multitasking.html @@ -152,108 +108,4 @@ REFERENCES * Intel 386 Programmes Ref. * http://forum.osdev.org/viewtopic.php?f=1&t=10944 * man syscalls (posix syscalls?) - - -MY NOTES BELOW THIS LINE -======================== - -Keyboard Driver ---------------- - -//some thoughts on redesign of the keyboard driver -//use uint8_t for proc_pos and buff_pos and a BUF_SIZE of 256 for auto wrap!? - -// kb input ringbuffer -kb_scancode kb_buff[BUF_SIZE]; - -buff_pos=0; -proc_pos=0; -buffered=0; - -void kb_irq() -{ - cli - - //we get one interrupt for EACH scancode! - kb_scancode val=get_scancode(); - - // think about race condition if called while inside kb_proc(); - if(buffered+1<BUF_SIZE) - { - kb_buff[buff_pos]=val; - buff_pos++; - buffered++; - } - else - { - //kb ring buffer is full; - } - sti - -} - - -void kb_proc() -{ - if(proc_pos!=buff_pos) - { - kb_scancode val=kb_buff[proc_pos]; - - proc_pos++; - buffered--; - - stdin(scancode_to_char(val)); - - } -} - -Linux Startup x86 ------------------ -~ ontogeny recapitulates phylogeny ~ - -Some notes on the Linux statup process, or at least how I understand it. - -1. arch/x86/boot/header.S - -Contains the header and linux 16 bit code. - -This code should be entered with a bootloader at the address specified -within the header (as _start) which will put us at 'start_of_setup' - -Direct loading will put us at 'start2' at the very start which will -show an error message - -If everyhing goes right we will enter the 16-bit real mode C module -with: - -call main ; should not return - -2. arch/x86/boot/main.c - -void main(void) will do some checks and detections (cpu,mem,..) and -invoke: go_to_protected_mode(); - -3. arch/x86/boot/pm.c - -go_to_protected_mode() - will disable interrupts and set up the initial -idt and gdt descriptor tables before calling: protected_mode_jump() and -passing the address of code32_start. - -4. arch/x86/boot/pmjump.S - -back in assembly-world the actual transition is made inside -'protected_mode_jump' and we move on to 'in_pm32' where the data segment -is set up and we jmpl to the 32-bit entry point of the kernel. - -5. arch/x86/kernel/head32.c (assumption!?) - -void i386_start_kernel(void) - -6. init/main.c - -start_kernel(void) - -setup_arch()!! - - -Interrupts: arch/x86/include/asm/irq_vectors.h each entry is 8 bytes +* and many more ... |
