feat: première compilation de noyau composite sans l'intégration de la décompression du noyau
This commit is contained in:
parent
e30592d7d4
commit
9da86c9057
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
#define SEG_NORMAL 0b00010000 /* Segment normal pile/data/code (0 pour système) */
|
#define SEG_NORMAL 0b00010000 /* Segment normal pile/data/code (0 pour système) */
|
||||||
|
|
||||||
#ifndef _ASSEMBLY
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
# define setCR3(addr) \
|
# define setCR3(addr) \
|
||||||
asm volatile ("mov %[memaddr], %%eax; mov %%eax, %%cr3"::[memaddr] "m" (addr) );
|
asm volatile ("mov %[memaddr], %%eax; mov %%eax, %%cr3"::[memaddr] "m" (addr) );
|
||||||
|
|
||||||
#ifndef _ASSEMBLY
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
/* */
|
/* */
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
|
#define E820_MAX_ENTRIES 128
|
||||||
|
|
||||||
typedef struct entrye820 {
|
typedef struct entrye820 {
|
||||||
u64 addr;
|
u64 addr;
|
||||||
u64 size;
|
u64 size;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
GCC=gcc -O0 -g -nostdinc -ffreestanding -fno-builtin -Wall -w -I ../include -m32 -fno-pie -no-pie -c -o
|
GCC=gcc -O0 -g -nostdinc -ffreestanding -fno-builtin -Wall -w -I ../include -m32 -fno-pie -no-pie -c -o
|
||||||
ASM=gcc -nostdinc -ffreestanding -fno-builtin -m32 -c -fno-pie -no-pie -I ../include -c -o
|
ASM=gcc -nostdinc -ffreestanding -fno-builtin -m32 -c -fno-pie -no-pie -I ../include -D__ASSEMBLY__ -c -o
|
||||||
LINK=ld -m elf_i386 -n
|
LINK=ld -m elf_i386 -n
|
||||||
CONVERT=dos2unix
|
CONVERT=dos2unix
|
||||||
INDENT=indent -nhnl -l75 -ppi3 -ts8 -bls -nbc -di8 -nbad -nbap -nsob -i8 -bl -bli0 -ncdw -nce -cli8 -cbi0 -npcs -cs -saf -sai -saw -nprs -lp -npsl
|
INDENT=indent -nhnl -l75 -ppi3 -ts8 -bls -nbc -di8 -nbad -nbap -nsob -i8 -bl -bli0 -ncdw -nce -cli8 -cbi0 -npcs -cs -saf -sai -saw -nprs -lp -npsl
|
||||||
|
@ -11,16 +11,18 @@ OBJDEBUG=objcopy --only-keep-debug
|
||||||
ZOFFSET=sed -n -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(startup_32\|startup_64\|efi32_stub_entry\|efi64_stub_entry\|efi_pe_entry\|input_data\|_end\|_ehead\|_text\|z_.*\)$$/\#define ZO_\2 0x\1/p'
|
ZOFFSET=sed -n -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(startup_32\|startup_64\|efi32_stub_entry\|efi64_stub_entry\|efi_pe_entry\|input_data\|_end\|_ehead\|_text\|z_.*\)$$/\#define ZO_\2 0x\1/p'
|
||||||
VOFFSET=sed -n -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(_text\|__bss_start\|_end\)$$/\#define VO_\2 _AC(0x\1,UL)/p'
|
VOFFSET=sed -n -e 's/^\([0-9a-fA-F]*\) [ABCDGRSTVW] \(_text\|__bss_start\|_end\)$$/\#define VO_\2 _AC(0x\1,UL)/p'
|
||||||
COMP=gzip -9 -f
|
COMP=gzip -9 -f
|
||||||
|
BUILD=../tools/build
|
||||||
|
MKPIGGY=../tools/mkpiggy
|
||||||
|
|
||||||
all: system.sys
|
all: system.sys
|
||||||
|
|
||||||
system.sys: system.tmp
|
system.sys: piggy.o voffset.h zoffset.h realmode/setup.bin
|
||||||
$(OBJCOPY) $^ $@
|
$(BUILD) realmode/setup.bin system.bin zoffset.h system.sys
|
||||||
|
|
||||||
system.tmp: piggy.o voffset.h zoffset.h realmode/setup.bin
|
|
||||||
tools/build realmode/setup.bin system.bin zoffset.h system.tmp
|
|
||||||
sync
|
sync
|
||||||
|
|
||||||
|
allpiggy.o: piggy.o decompress.o header.o
|
||||||
|
$(LINK) -T allpiggy piggy.o decompress.o header.o
|
||||||
|
|
||||||
voffset.h: system
|
voffset.h: system
|
||||||
$(NM) system|$(VOFFSET)>voffset.h
|
$(NM) system|$(VOFFSET)>voffset.h
|
||||||
|
|
||||||
|
@ -44,7 +46,7 @@ system.bin.gz: system.bin
|
||||||
cat $^|$(COMP) > $@
|
cat $^|$(COMP) > $@
|
||||||
|
|
||||||
piggy.S: system.bin.gz
|
piggy.S: system.bin.gz
|
||||||
../tools/mkpiggy $^ > $@
|
$(MKPIGGY) $^ > $@
|
||||||
|
|
||||||
realmode/setup.bin:
|
realmode/setup.bin:
|
||||||
make -C realmode
|
make -C realmode
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
GCC=gcc -O0 -g -nostdinc -ffreestanding -fno-builtin -Wall -w -I ../../include -m16 -fomit-frame-pointer -fno-pic -mno-mmx -mno-sse -mno-80387 -mno-fp-ret-in-387 -c -o
|
GCC=gcc -O0 -g -nostdinc -ffreestanding -fno-builtin -Wall -w -I ../../include -m16 -fomit-frame-pointer -fno-pie -no-pie -mno-mmx -mno-sse -mno-80387 -mno-fp-ret-in-387 -c
|
||||||
ASM=gcc -nostdinc -ffreestanding -fno-builtin -m16 -fomit-frame-pointer -fno-pic -mno-mmx -mno-sse -mno-80387 -mno-fp-ret-in-387 -I ../ -I ../../include -c -o
|
ASM=gcc -m16 -fomit-frame-pointer -fno-pie -no-pie -mno-mmx -mno-sse -mno-80387 -mno-fp-ret-in-387 -D__ASSEMBLY__ -I ../ -I ../../include -c -o
|
||||||
LINK=ld -m elf_i386 -n
|
LINK=ld -m elf_i386 -n
|
||||||
CONVERT=dos2unix
|
CONVERT=dos2unix
|
||||||
INDENT=indent -nhnl -l75 -ppi3 -ts8 -bls -nbc -di8 -nbad -nbap -nsob -i8 -bl -bli0 -ncdw -nce -cli8 -cbi0 -npcs -cs -saf -sai -saw -nprs -lp -npsl
|
INDENT=indent -nhnl -l75 -ppi3 -ts8 -bls -nbc -di8 -nbad -nbap -nsob -i8 -bl -bli0 -ncdw -nce -cli8 -cbi0 -npcs -cs -saf -sai -saw -nprs -lp -npsl
|
||||||
|
@ -8,6 +8,7 @@ CHANGEPERM=chmod 644
|
||||||
NM=nm
|
NM=nm
|
||||||
OBJCOPY=objcopy -O binary -R .note -R .comment -S
|
OBJCOPY=objcopy -O binary -R .note -R .comment -S
|
||||||
OBJDEBUG=objcopy --only-keep-debug
|
OBJDEBUG=objcopy --only-keep-debug
|
||||||
|
$(eval VERSION=$(shell git describe --tags))
|
||||||
|
|
||||||
all: setup.bin
|
all: setup.bin
|
||||||
sync
|
sync
|
||||||
|
@ -21,7 +22,7 @@ setup.bin: setup
|
||||||
$(NM) setup > setup.map
|
$(NM) setup > setup.map
|
||||||
|
|
||||||
setupc.o: setup.c
|
setupc.o: setup.c
|
||||||
$(GCC) $@ $^
|
$(GCC) -DVERSION=$(VERSION) -o $@ $^
|
||||||
|
|
||||||
setup.o: setup.S
|
setup.o: setup.S
|
||||||
$(ASM) $@ $^
|
$(ASM) $@ $^
|
||||||
|
|
|
@ -21,6 +21,19 @@
|
||||||
#include "zoffset.h"
|
#include "zoffset.h"
|
||||||
#define __AC(X, Y) (X##Y)
|
#define __AC(X, Y) (X##Y)
|
||||||
#define _AC(X, Y) __AC(X,Y)
|
#define _AC(X, Y) __AC(X,Y)
|
||||||
|
#define ROOT_RDONLY 1
|
||||||
|
#define LOADED_HIGH 1
|
||||||
|
#define SVGA_MODE 0
|
||||||
|
#define CONFIG_PHYSICAL_ALIGN 0x100000
|
||||||
|
#define MIN_KERNEL_ALIGN_LG2 4
|
||||||
|
#define COMMAND_LINE_SIZE 512
|
||||||
|
#define LOAD_PHYSICAL_ADDR 0x100000
|
||||||
|
/* loadflags */
|
||||||
|
#define LOADED_HIGH_FLAG (1<<0)
|
||||||
|
#define KASLR_FLAG (1<<1)
|
||||||
|
#define QUIET_FLAG (1<<5)
|
||||||
|
#define KEEP_SEGMENTS (1<<6)
|
||||||
|
#define CAN_USE_HEAP (1<<7)
|
||||||
|
|
||||||
SEGBOOT = 0x07C0
|
SEGBOOT = 0x07C0
|
||||||
SEGSYS = 0x1000
|
SEGSYS = 0x1000
|
||||||
|
@ -353,7 +366,7 @@ setup:
|
||||||
# Setup corrupt somehow...
|
# Setup corrupt somehow...
|
||||||
setup_bad:
|
setup_bad:
|
||||||
movl $setup_corrupt, %eax
|
movl $setup_corrupt, %eax
|
||||||
calll puts
|
calll showstr
|
||||||
# Fall through...
|
# Fall through...
|
||||||
|
|
||||||
.globl die
|
.globl die
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
|
||||||
struct params {
|
struct params {
|
||||||
entrye820 *e820_table;
|
entrye820 e820_table[E820_MAX_ENTRIES];
|
||||||
u32 e820_numbers;
|
u32 e820_numbers;
|
||||||
u8 kbflag;
|
u8 kbflag;
|
||||||
} params;
|
} params;
|
||||||
|
@ -19,8 +19,16 @@ static struct gdtr gdtreg;
|
||||||
/* table de GDT */
|
/* table de GDT */
|
||||||
static gdtdes gdt[GDT_SIZE];
|
static gdtdes gdt[GDT_SIZE];
|
||||||
|
|
||||||
|
#define STRINGIFY(x) #x
|
||||||
|
#define MACRO(x) STRINGIFY(x)
|
||||||
|
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
|
||||||
|
#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
|
||||||
|
#define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
|
||||||
|
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:(-!!(e)); }))
|
||||||
|
|
||||||
|
u8 kernel_version[] = "COS2000 Version " MACRO(VERSION) "- compiled " __DATE__ ;
|
||||||
|
|
||||||
#define EFLAGS_CF 0x00000001
|
#define EFLAGS_CF 0x00000001
|
||||||
#define CR0_PE 0x00000001
|
|
||||||
#define LOOPS_8042 100000
|
#define LOOPS_8042 100000
|
||||||
#define FF_8042 32
|
#define FF_8042 32
|
||||||
#define LOOPS_A20_ENABLE 255
|
#define LOOPS_A20_ENABLE 255
|
||||||
|
@ -135,7 +143,7 @@ u8 empty8042(void)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (status & 1) {
|
if (status & 1) {
|
||||||
io_delay();
|
iodelay();
|
||||||
(void)inb(0x60);
|
(void)inb(0x60);
|
||||||
} else if (!(status & 2)) {
|
} else if (!(status & 2)) {
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -252,7 +260,7 @@ void memcpy(void *src, void *dst, u32 count, u32 size)
|
||||||
void initselectors(u32 executingoffset)
|
void initselectors(u32 executingoffset)
|
||||||
{
|
{
|
||||||
asm(" movl %%cr0, %%eax \n \
|
asm(" movl %%cr0, %%eax \n \
|
||||||
orb $CR0_PE, %%eax \n \
|
orb $0x00000001, %%eax \n \
|
||||||
movl %%eax, %%cr0 \n \
|
movl %%eax, %%cr0 \n \
|
||||||
ljmp %[code], $raz\n\
|
ljmp %[code], $raz\n\
|
||||||
raz:\n \
|
raz:\n \
|
||||||
|
@ -319,7 +327,7 @@ void maskinterrupts(void)
|
||||||
outb(0x80, 0x70); /* Disable NMI */
|
outb(0x80, 0x70); /* Disable NMI */
|
||||||
iodelay();
|
iodelay();
|
||||||
outb(0xff, 0xa1); /* Mask all interrupts on the secondary PIC */
|
outb(0xff, 0xa1); /* Mask all interrupts on the secondary PIC */
|
||||||
idelay();
|
iodelay();
|
||||||
outb(0xfb, 0x21); /* Mask all but cascade on the primary PIC */
|
outb(0xfb, 0x21); /* Mask all but cascade on the primary PIC */
|
||||||
iodelay();
|
iodelay();
|
||||||
}
|
}
|
||||||
|
@ -336,7 +344,7 @@ void initpmode(u32 offset)
|
||||||
{
|
{
|
||||||
if (enableA20()) {
|
if (enableA20()) {
|
||||||
showstr("impossible d'ouvrir la ligne A20...\n");
|
showstr("impossible d'ouvrir la ligne A20...\n");
|
||||||
hlt();
|
halt();
|
||||||
}
|
}
|
||||||
maskinterrupts();
|
maskinterrupts();
|
||||||
initgdt();
|
initgdt();
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
/* COS2000 - Compatible Operating System - LGPL v3 - Hordé Nicolas */
|
/* COS2000 - Compatible Operating System - LGPL v3 - Hordé Nicolas */
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
#define _ASSEMBLY
|
|
||||||
|
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "gdt.h"
|
#include "gdt.h"
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ SECTIONS
|
||||||
{
|
{
|
||||||
. = 0x100000;
|
. = 0x100000;
|
||||||
.text ALIGN(16): {
|
.text ALIGN(16): {
|
||||||
|
_text = .;
|
||||||
*(.text)
|
*(.text)
|
||||||
}
|
}
|
||||||
.data ALIGN(16): {
|
.data ALIGN(16): {
|
||||||
|
|
Loading…
Reference in New Issue