mirror of
https://github.com/tailix/kernel.git
synced 2024-11-27 11:24:34 -05:00
Remove modules
This commit is contained in:
parent
791cf9cd3d
commit
7f25b96a2b
12 changed files with 3 additions and 281 deletions
22
Makefile
22
Makefile
|
@ -3,10 +3,8 @@ ROOTFS = rootfs
|
|||
|
||||
GRUBCFG = $(ROOTFS)/boot/grub/grub.cfg
|
||||
KERNEL = $(ROOTFS)/boot/tailix.multiboot2
|
||||
PROCMAN = $(ROOTFS)/boot/procman
|
||||
MEMGR = $(ROOTFS)/boot/memgr
|
||||
|
||||
.PHONY: kernel/tailix.multiboot2 procman/procman memgr/memgr
|
||||
.PHONY: kernel/tailix.multiboot2
|
||||
|
||||
all: run0
|
||||
|
||||
|
@ -17,28 +15,14 @@ run1: $(IMAGE)
|
|||
qemu-system-i386 -cdrom $< -serial stdio
|
||||
|
||||
clean:
|
||||
rm -f $(IMAGE) $(KERNEL) $(PROCMAN) $(MEMGR)
|
||||
rm -f $(IMAGE) $(KERNEL)
|
||||
make -C kernel clean
|
||||
make -C procman clean
|
||||
make -C memgr clean
|
||||
|
||||
$(IMAGE): $(GRUBCFG) $(KERNEL) $(PROCMAN) $(MEMGR)
|
||||
$(IMAGE): $(GRUBCFG) $(KERNEL)
|
||||
grub-mkrescue $(ROOTFS) -o $@
|
||||
|
||||
$(KERNEL): kernel/tailix.multiboot2
|
||||
cp $< $@
|
||||
|
||||
$(PROCMAN): procman/procman
|
||||
cp $< $@
|
||||
|
||||
$(MEMGR): memgr/memgr
|
||||
cp $< $@
|
||||
|
||||
kernel/tailix.multiboot2:
|
||||
make -C kernel tailix.multiboot2
|
||||
|
||||
procman/procman:
|
||||
make -C procman procman
|
||||
|
||||
memgr/memgr:
|
||||
make -C memgr memgr
|
||||
|
|
104
kernel/elf.h
104
kernel/elf.h
|
@ -1,104 +0,0 @@
|
|||
#ifndef KERNEL_INCLUDED_ELF
|
||||
#define KERNEL_INCLUDED_ELF 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct Kernel_ELF_Header {
|
||||
unsigned char magic_0x7F : 8; // Must be 0x7F.
|
||||
unsigned char magic_E : 8; // Must be 'E'.
|
||||
unsigned char magic_L : 8; // Must be 'L'.
|
||||
unsigned char magic_F : 8; // Must be 'F'.
|
||||
unsigned char bitness : 8; // Must be 1 (32 bit).
|
||||
unsigned char endianness : 8; // Must be 1 (little endian).
|
||||
unsigned char header_version : 8; // Must be 1.
|
||||
unsigned char os_abi : 8; // Must be 0 (System V).
|
||||
unsigned long unused1 : 32;
|
||||
unsigned long unused2 : 32;
|
||||
unsigned short obj_type : 16; // Must be 2 (executable).
|
||||
unsigned short isa : 16; // Must be 3 (x86).
|
||||
unsigned long elf_version : 32; // Must be 1.
|
||||
unsigned long entrypoint : 32;
|
||||
unsigned long prog_table_pos : 32; // Must not be 0.
|
||||
unsigned long sect_table_pos : 32;
|
||||
unsigned long arch_flags : 32; // Must be 0.
|
||||
unsigned short header_size : 16; // Must be 52.
|
||||
unsigned short prog_entr_size : 16; // Must not be 0.
|
||||
unsigned short prog_entr_num : 16; // Must not be 0.
|
||||
unsigned short sect_entr_size : 16;
|
||||
unsigned short sect_entr_num : 16;
|
||||
unsigned short sect_names_idx : 16;
|
||||
}
|
||||
__attribute__((packed));
|
||||
|
||||
struct Kernel_ELF_ProgramEntry {
|
||||
unsigned long type : 32;
|
||||
unsigned long offset : 32;
|
||||
unsigned long virt_addr : 32;
|
||||
unsigned long phys_addr : 32;
|
||||
unsigned long file_size : 32;
|
||||
unsigned long mem_size : 32;
|
||||
unsigned long flags : 32;
|
||||
unsigned long align : 32;
|
||||
}
|
||||
__attribute__((packed));
|
||||
|
||||
struct Kernel_ELF_SectionEntry {
|
||||
unsigned long name : 32;
|
||||
unsigned long type : 32;
|
||||
unsigned long flags : 32;
|
||||
unsigned long vaddr : 32;
|
||||
unsigned long file_offset : 32;
|
||||
unsigned long file_size : 32;
|
||||
unsigned long link : 32;
|
||||
unsigned long info : 32;
|
||||
unsigned long alignment : 32;
|
||||
unsigned long ent_size : 32;
|
||||
}
|
||||
__attribute__((packed));
|
||||
|
||||
struct Kernel_ELF_RelocationEntry {
|
||||
unsigned long virt_addr : 32;
|
||||
unsigned long info : 32;
|
||||
}
|
||||
__attribute__((packed));
|
||||
|
||||
typedef struct Kernel_ELF_ProgramEntry Kernel_ELF_ProgramTable[];
|
||||
|
||||
typedef struct Kernel_ELF_SectionEntry Kernel_ELF_SectionTable[];
|
||||
|
||||
typedef struct Kernel_ELF_RelocationEntry Kernel_ELF_RelocationTable[];
|
||||
|
||||
inline static unsigned char Kernel_ELF_Header_is_valid(
|
||||
const struct Kernel_ELF_Header *header
|
||||
);
|
||||
|
||||
unsigned char Kernel_ELF_Header_is_valid(
|
||||
const struct Kernel_ELF_Header *const header
|
||||
) {
|
||||
return (
|
||||
header->magic_0x7F == 0x7F &&
|
||||
header->magic_E == 'E' &&
|
||||
header->magic_L == 'L' &&
|
||||
header->magic_F == 'F' &&
|
||||
header->bitness == 1 &&
|
||||
header->endianness == 1 &&
|
||||
header->header_version == 1 &&
|
||||
header->os_abi == 0 &&
|
||||
header->obj_type == 2 &&
|
||||
header->isa == 3 &&
|
||||
header->elf_version == 1 &&
|
||||
header->arch_flags == 0 &&
|
||||
header->header_size == 52 &&
|
||||
header->prog_table_pos != 0 &&
|
||||
header->prog_entr_size != 0 &&
|
||||
header->prog_entr_num != 0
|
||||
);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -6,7 +6,6 @@
|
|||
#include "protected.h"
|
||||
|
||||
#include "tasks.h"
|
||||
#include "elf.h"
|
||||
|
||||
#include <kernaux/drivers/console.h>
|
||||
#include <kernaux/multiboot2.h>
|
||||
|
@ -72,19 +71,4 @@ void main(
|
|||
protected_initialize(&kinfo);
|
||||
|
||||
kernaux_drivers_console_print("[INFO] main: Finished.\n");
|
||||
|
||||
if (kinfo.modules_count > 0) {
|
||||
const struct Kernel_ELF_Header *const elf_header =
|
||||
(void*)kinfo.modules[0].base;
|
||||
|
||||
if (Kernel_ELF_Header_is_valid(elf_header)) {
|
||||
const unsigned long real_entrypoint =
|
||||
kinfo.modules[0].base + elf_header->entrypoint;
|
||||
|
||||
tasks_switch_to_user(real_entrypoint);
|
||||
}
|
||||
else {
|
||||
kernaux_drivers_console_print("[WARN] main: Invalid ELF header.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
1
memgr/.gitignore
vendored
1
memgr/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
/memgr
|
|
@ -1,20 +0,0 @@
|
|||
CCPREFIX = /home/kotovalexarian/repos/global/tailix/cross/root/bin/i386-elf-
|
||||
|
||||
AS = $(CCPREFIX)as
|
||||
CC = $(CCPREFIX)gcc
|
||||
LD = $(CCPREFIX)ld
|
||||
|
||||
MEMGR = memgr
|
||||
|
||||
CFLAGS = -std=gnu99 -ffreestanding -nostdinc -fno-builtin -fno-stack-protector -Wall -Wextra
|
||||
|
||||
all: $(MEMGR)
|
||||
|
||||
clean:
|
||||
rm -f $(MEMGR) start.o
|
||||
|
||||
$(MEMGR): start.o
|
||||
$(LD) -o $@ -T linker.ld $^
|
||||
|
||||
start.o: start.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS)
|
|
@ -1,29 +0,0 @@
|
|||
OUTPUT_ARCH("i386")
|
||||
OUTPUT_FORMAT("elf32-i386")
|
||||
ENTRY(_start)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x0;
|
||||
|
||||
.text BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.text)
|
||||
}
|
||||
|
||||
.rodata BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.rodata)
|
||||
}
|
||||
|
||||
.data BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.data)
|
||||
}
|
||||
|
||||
.bss BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(COMMON)
|
||||
*(.bss)
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
void _start()
|
||||
{
|
||||
asm(
|
||||
"mov $0, %eax \n\t"
|
||||
"mov $0, %ebx \n\t"
|
||||
"int $0x80 \n\t"
|
||||
);
|
||||
}
|
1
procman/.gitignore
vendored
1
procman/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
/procman
|
|
@ -1,20 +0,0 @@
|
|||
CCPREFIX = /home/kotovalexarian/repos/global/tailix/cross/root/bin/i386-elf-
|
||||
|
||||
AS = $(CCPREFIX)as
|
||||
CC = $(CCPREFIX)gcc
|
||||
LD = $(CCPREFIX)ld
|
||||
|
||||
PROCMAN = procman
|
||||
|
||||
CFLAGS = -std=gnu99 -ffreestanding -nostdinc -fno-builtin -fno-stack-protector -Wall -Wextra
|
||||
|
||||
all: $(PROCMAN)
|
||||
|
||||
clean:
|
||||
rm -f $(PROCMAN) start.o
|
||||
|
||||
$(PROCMAN): start.o
|
||||
$(LD) -o $@ -T linker.ld $^
|
||||
|
||||
start.o: start.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS)
|
|
@ -1,29 +0,0 @@
|
|||
OUTPUT_ARCH("i386")
|
||||
OUTPUT_FORMAT("elf32-i386")
|
||||
ENTRY(_start)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x0;
|
||||
|
||||
.text BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.text)
|
||||
}
|
||||
|
||||
.rodata BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.rodata)
|
||||
}
|
||||
|
||||
.data BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.data)
|
||||
}
|
||||
|
||||
.bss BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(COMMON)
|
||||
*(.bss)
|
||||
}
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
void _start()
|
||||
{
|
||||
asm(
|
||||
"mov $0, %eax \n\t"
|
||||
"mov $0, %ebx \n\t"
|
||||
"int $0x80 \n\t"
|
||||
|
||||
"mov $0, %eax \n\t"
|
||||
"mov $1, %ebx \n\t"
|
||||
"int $0x80 \n\t"
|
||||
|
||||
"mov $1, %eax \n\t"
|
||||
"mov $0, %ebx \n\t"
|
||||
"int $0x80 \n\t"
|
||||
|
||||
"mov $2, %eax \n\t"
|
||||
"mov $0, %ebx \n\t"
|
||||
"int $0x80 \n\t"
|
||||
|
||||
"mov $256, %eax \n\t"
|
||||
"mov $0, %ebx \n\t"
|
||||
"int $0x80 \n\t"
|
||||
|
||||
"mov $257, %eax \n\t"
|
||||
"mov $0, %ebx \n\t"
|
||||
"int $0x80 \n\t"
|
||||
|
||||
"mov $258, %eax \n\t"
|
||||
"mov $0, %ebx \n\t"
|
||||
"int $0x80 \n\t"
|
||||
);
|
||||
}
|
|
@ -2,6 +2,4 @@ set timeout=0
|
|||
|
||||
menuentry "Tailix" {
|
||||
multiboot2 /boot/tailix.multiboot2 hello kernel
|
||||
module2 /boot/procman hello module
|
||||
module2 /boot/memgr
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue