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
|
||||
*.dtb
|
||||
*~
|
||||
sysroot
|
||||
|
||||
# Local
|
||||
DS_Store
|
||||
|
||||
@@ -24,5 +24,15 @@ Features
|
||||
* Virtual memory manager
|
||||
* 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
|
||||
|
||||
|
||||
@@ -45,12 +45,13 @@ Todos
|
||||
- [ ] dup()
|
||||
- [ ] pipe()
|
||||
- [ ] Memory
|
||||
- [ ] Physical MM
|
||||
- [ ] Virtual MM
|
||||
- [ ] Paging
|
||||
- [x] Physical MM
|
||||
- [x] Virtual MM
|
||||
- [x] Paging
|
||||
- [ ] Kernel Heap
|
||||
- [ ] Drivers
|
||||
- [x] tty
|
||||
- [ ] ATA PIO
|
||||
- [x] serial
|
||||
- [ ] Timer
|
||||
- [ ] VFS
|
||||
@@ -102,5 +103,6 @@ Todos
|
||||
- [ ] doom
|
||||
|
||||
- [ ] Write an OS in kern.
|
||||
- [ ] Paradox
|
||||
- [ ] Finish all the TODOs
|
||||
|
||||
|
||||
@@ -16,6 +16,10 @@ LDFLAGS = -melf_i386
|
||||
ASFLAGS =
|
||||
ARFLAGS =
|
||||
|
||||
# Disk image
|
||||
IMG_NAME = kern.img
|
||||
IMG_SIZE = 256 # 256MB
|
||||
|
||||
# Qemu
|
||||
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)
|
||||
OBJS_C = $(patsubst $(SRC)/%.c, $(BIN)/%.c.o, $(SRCS_C))
|
||||
OBJS_S = $(patsubst $(SRC)/%.s, $(BIN)/%.s.o, $(SRCS_S))
|
||||
OUT = ./kernel.elf
|
||||
OUT = $(SYSROOT)/boot/kernel.elf
|
||||
LINKER = ./linker.ld
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
@@ -61,6 +61,8 @@ int gdt_init(void) {
|
||||
gdt_reload();
|
||||
tss_reload();
|
||||
|
||||
debugf("[gdt] GDT loaded.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,10 @@ int idt_init(void) {
|
||||
idtp.limit = sizeof(idt);
|
||||
idtp.base = (uint32_t)&idt;
|
||||
|
||||
// Load IDT instruction
|
||||
__asm__ volatile ("lidt %0" : : "m"(idtp));
|
||||
|
||||
debugf("[idt] IDT initalized.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,8 @@ int isr_init(void) {
|
||||
|
||||
// Let interrupts interrupt
|
||||
__asm__ volatile ("sti");
|
||||
|
||||
debugf("[isr] ISR initialized.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@ int pag_init(void) {
|
||||
memset(pagedirs, 0, PAGE_SIZE * PAGE_DIR_COUNT);
|
||||
memset(pagedirUsed, 0, PAGE_DIR_COUNT);
|
||||
|
||||
debugf("[pag] Paging initalized.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,51 @@
|
||||
include defaults.mk
|
||||
|
||||
KERNEL = ./kernel
|
||||
TARGET = ./$(IMG_NAME)
|
||||
OFFSET = 1048576
|
||||
SYSROOT = ./sysroot
|
||||
|
||||
# Modules
|
||||
KERNEL = ./kernel
|
||||
MODULES = $(KERNEL)
|
||||
|
||||
# Treat these targets as names and not files
|
||||
.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):
|
||||
$(MAKE) -C $@
|
||||
$(MAKE) -C $@ SYSROOT=$(abspath $(SYSROOT))
|
||||
|
||||
clean:
|
||||
rm -f $(IMG)
|
||||
rm -f $(TARGET)
|
||||
rm -fr $(SYSROOT)
|
||||
for m in $(MODULES); do $(MAKE) -C $$m clean; done
|
||||
|
||||
qemu:
|
||||
qemu-system-x86_64\
|
||||
-kernel ./kernel/kernel.elf\
|
||||
qemu-system-x86_64 $(TARGET)\
|
||||
-m 256M -accel tcg -monitor stdio -net none\
|
||||
-rtc base=localtime,clock=host,driftfix=slew\
|
||||
-audiodev $(AUDIODEV),id=audio0 -machine pcspk-audiodev=audio0
|
||||
|
||||
Reference in New Issue
Block a user