forked from PoliEcho-holding-org/kern
Began using Limine as a bootloader instead of QEMUs mb1 bootloader.
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
*.sys
|
*.sys
|
||||||
*.dtb
|
*.dtb
|
||||||
*~
|
*~
|
||||||
|
sysroot
|
||||||
|
|
||||||
# Local
|
# Local
|
||||||
DS_Store
|
DS_Store
|
||||||
|
|||||||
@@ -24,5 +24,15 @@ Features
|
|||||||
* Virtual memory manager
|
* Virtual memory manager
|
||||||
* System calls
|
* System calls
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
* binutils that can target i386-elf
|
||||||
|
* sfdisk
|
||||||
|
* GCC that can target i386-elf
|
||||||
|
* Limine
|
||||||
|
* make
|
||||||
|
* Mtools
|
||||||
|
* NASM
|
||||||
|
|
||||||
Old Version: https://github.com/Tom-on64/old-kern
|
Old Version: https://github.com/Tom-on64/old-kern
|
||||||
|
|
||||||
|
|||||||
@@ -45,12 +45,13 @@ Todos
|
|||||||
- [ ] dup()
|
- [ ] dup()
|
||||||
- [ ] pipe()
|
- [ ] pipe()
|
||||||
- [ ] Memory
|
- [ ] Memory
|
||||||
- [ ] Physical MM
|
- [x] Physical MM
|
||||||
- [ ] Virtual MM
|
- [x] Virtual MM
|
||||||
- [ ] Paging
|
- [x] Paging
|
||||||
- [ ] Kernel Heap
|
- [ ] Kernel Heap
|
||||||
- [ ] Drivers
|
- [ ] Drivers
|
||||||
- [x] tty
|
- [x] tty
|
||||||
|
- [ ] ATA PIO
|
||||||
- [x] serial
|
- [x] serial
|
||||||
- [ ] Timer
|
- [ ] Timer
|
||||||
- [ ] VFS
|
- [ ] VFS
|
||||||
@@ -102,5 +103,6 @@ Todos
|
|||||||
- [ ] doom
|
- [ ] doom
|
||||||
|
|
||||||
- [ ] Write an OS in kern.
|
- [ ] Write an OS in kern.
|
||||||
|
- [ ] Paradox
|
||||||
- [ ] Finish all the TODOs
|
- [ ] Finish all the TODOs
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ LDFLAGS = -melf_i386
|
|||||||
ASFLAGS =
|
ASFLAGS =
|
||||||
ARFLAGS =
|
ARFLAGS =
|
||||||
|
|
||||||
|
# Disk image
|
||||||
|
IMG_NAME = kern.img
|
||||||
|
IMG_SIZE = 256 # 256MB
|
||||||
|
|
||||||
# Qemu
|
# Qemu
|
||||||
AUDIODEV = pipewire
|
AUDIODEV = pipewire
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
Filesystem
|
||||||
|
==========
|
||||||
|
|
||||||
|
Here's how the filesystem is layed out:
|
||||||
|
/
|
||||||
|
|- bin/ Administrator binaries
|
||||||
|
|- boot/ Files required to boot, like the kernel
|
||||||
|
|- dev/ Device nodes
|
||||||
|
|- etc/ Configuration files
|
||||||
|
|- lib/ Shared libraties
|
||||||
|
|- sbin/ System binaries
|
||||||
|
|- usr/ Regular user stuff
|
||||||
|
| |- bin/ User binaries
|
||||||
|
| |- include/ Headers
|
||||||
|
| '- share/ "Constant" stuff, same across systems
|
||||||
|
'- tmp/ Temporary filesystem, cleared on reboot
|
||||||
|
|
||||||
+1
-1
@@ -7,7 +7,7 @@ SRCS_C = $(wildcard $(SRC)/*.c)
|
|||||||
SRCS_S = $(wildcard $(SRC)/*.s)
|
SRCS_S = $(wildcard $(SRC)/*.s)
|
||||||
OBJS_C = $(patsubst $(SRC)/%.c, $(BIN)/%.c.o, $(SRCS_C))
|
OBJS_C = $(patsubst $(SRC)/%.c, $(BIN)/%.c.o, $(SRCS_C))
|
||||||
OBJS_S = $(patsubst $(SRC)/%.s, $(BIN)/%.s.o, $(SRCS_S))
|
OBJS_S = $(patsubst $(SRC)/%.s, $(BIN)/%.s.o, $(SRCS_S))
|
||||||
OUT = ./kernel.elf
|
OUT = $(SYSROOT)/boot/kernel.elf
|
||||||
LINKER = ./linker.ld
|
LINKER = ./linker.ld
|
||||||
|
|
||||||
.PHONY: all clean
|
.PHONY: all clean
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ int gdt_init(void) {
|
|||||||
gdt_reload();
|
gdt_reload();
|
||||||
tss_reload();
|
tss_reload();
|
||||||
|
|
||||||
|
debugf("[gdt] GDT loaded.\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ int idt_init(void) {
|
|||||||
idtp.limit = sizeof(idt);
|
idtp.limit = sizeof(idt);
|
||||||
idtp.base = (uint32_t)&idt;
|
idtp.base = (uint32_t)&idt;
|
||||||
|
|
||||||
|
// Load IDT instruction
|
||||||
__asm__ volatile ("lidt %0" : : "m"(idtp));
|
__asm__ volatile ("lidt %0" : : "m"(idtp));
|
||||||
|
|
||||||
|
debugf("[idt] IDT initalized.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ int isr_init(void) {
|
|||||||
|
|
||||||
// Let interrupts interrupt
|
// Let interrupts interrupt
|
||||||
__asm__ volatile ("sti");
|
__asm__ volatile ("sti");
|
||||||
|
|
||||||
|
debugf("[isr] ISR initialized.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ int pag_init(void) {
|
|||||||
memset(pagedirs, 0, PAGE_SIZE * PAGE_DIR_COUNT);
|
memset(pagedirs, 0, PAGE_SIZE * PAGE_DIR_COUNT);
|
||||||
memset(pagedirUsed, 0, PAGE_DIR_COUNT);
|
memset(pagedirUsed, 0, PAGE_DIR_COUNT);
|
||||||
|
|
||||||
|
debugf("[pag] Paging initalized.\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,51 @@
|
|||||||
include defaults.mk
|
include defaults.mk
|
||||||
|
|
||||||
KERNEL = ./kernel
|
TARGET = ./$(IMG_NAME)
|
||||||
|
OFFSET = 1048576
|
||||||
|
SYSROOT = ./sysroot
|
||||||
|
|
||||||
|
# Modules
|
||||||
|
KERNEL = ./kernel
|
||||||
MODULES = $(KERNEL)
|
MODULES = $(KERNEL)
|
||||||
|
|
||||||
|
# Treat these targets as names and not files
|
||||||
.PHONY: all clean $(MODULES) qemu
|
.PHONY: all clean $(MODULES) qemu
|
||||||
|
|
||||||
all: $(MODULES)
|
all: $(TARGET)
|
||||||
|
$(TARGET): $(SYSROOT) $(MODULES)
|
||||||
|
cp /usr/share/limine/limine-bios.sys $(SYSROOT)/boot
|
||||||
|
echo -e 'timeout: 5\n\n/kern.\n\tprotocol: multiboot1\n\tpath: boot():/boot/kernel.elf\n' > $(SYSROOT)/boot/limine.conf
|
||||||
|
dd if=/dev/zero of=$(TARGET) bs=1M count=$(IMG_SIZE)
|
||||||
|
echo ',,c,*' | sfdisk $(TARGET) >/dev/null
|
||||||
|
mformat -F -i $(TARGET)@@$(OFFSET) ::/
|
||||||
|
mcopy -i $(TARGET)@@$(OFFSET) $(SYSROOT)/* ::
|
||||||
|
limine bios-install $(TARGET)
|
||||||
|
|
||||||
|
# Build out base directory structure
|
||||||
|
$(SYSROOT):
|
||||||
|
@mkdir $(SYSROOT)
|
||||||
|
@mkdir $(SYSROOT)/bin
|
||||||
|
@mkdir $(SYSROOT)/boot
|
||||||
|
@mkdir $(SYSROOT)/dev
|
||||||
|
@mkdir $(SYSROOT)/etc
|
||||||
|
@mkdir $(SYSROOT)/lib
|
||||||
|
@mkdir $(SYSROOT)/sbin
|
||||||
|
@mkdir $(SYSROOT)/usr
|
||||||
|
@mkdir $(SYSROOT)/usr/bin
|
||||||
|
@mkdir $(SYSROOT)/usr/include
|
||||||
|
@mkdir $(SYSROOT)/usr/share
|
||||||
|
@mkdir $(SYSROOT)/tmp
|
||||||
|
|
||||||
$(MODULES):
|
$(MODULES):
|
||||||
$(MAKE) -C $@
|
$(MAKE) -C $@ SYSROOT=$(abspath $(SYSROOT))
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(IMG)
|
rm -f $(TARGET)
|
||||||
|
rm -fr $(SYSROOT)
|
||||||
for m in $(MODULES); do $(MAKE) -C $$m clean; done
|
for m in $(MODULES); do $(MAKE) -C $$m clean; done
|
||||||
|
|
||||||
qemu:
|
qemu:
|
||||||
qemu-system-x86_64\
|
qemu-system-x86_64 $(TARGET)\
|
||||||
-kernel ./kernel/kernel.elf\
|
|
||||||
-m 256M -accel tcg -monitor stdio -net none\
|
-m 256M -accel tcg -monitor stdio -net none\
|
||||||
-rtc base=localtime,clock=host,driftfix=slew\
|
-rtc base=localtime,clock=host,driftfix=slew\
|
||||||
-audiodev $(AUDIODEV),id=audio0 -machine pcspk-audiodev=audio0
|
-audiodev $(AUDIODEV),id=audio0 -machine pcspk-audiodev=audio0
|
||||||
|
|||||||
Reference in New Issue
Block a user