diff --git a/README b/README index bfa6016a..9494769c 100644 --- a/README +++ b/README @@ -154,14 +154,12 @@ Building To build the Sortix source code you need to install a few dependencies. First of all you need the GNU Compiler Collection (C and C++), GNU Make, and GNU Binutils. You then need to build and install the included macro preprocessor -(mxmpp) somewhere in your PATH such as /usr/bin. If you wish to build the 32-bit -version of Sortix, you need the Netwide Assembler (nasm) as parts of it hasn't -been ported to the GNU assembler yet. You need a GNU/Linux build system to build -Sortix, although, it wouldn't be difficult to port the build system to other -platforms. You can then build the Sortix kernel and user-space utilities by -running make in the Sortix root source directory. By default it will build to -your CPU architecture (64-bit on 64-bit systems, 32-bit otherwise). Use -CPU=x86 or CPU=x64 as arguments to make to control which target is built. +(mxmpp) somewhere in your PATH such as /usr/bin. You need a GNU/Linux build +system to build Sortix, although, it wouldn't be difficult to port the build +system to other platforms. You can then build the Sortix kernel and user-space +utilities by running make in the Sortix root source directory. By default it +will build to your CPU architecture (64-bit on 64-bit systems, 32-bit otherwise). +Use CPU=x86 or CPU=x64 as arguments to make to control which target is built. To build a bootable ISO you need GNU GRUB 2, as that is used by "make iso" to generate the iso. In turn, GNU GRUB relies on xorriso to create the iso file. diff --git a/sortix/Makefile b/sortix/Makefile index 0644a925..a4d4dcfb 100644 --- a/sortix/Makefile +++ b/sortix/Makefile @@ -11,7 +11,6 @@ ifeq ($(CPU),x86) X86FAMILY=1 CPUFLAGS= CPULDFLAGS= - CPUNASMFLAGS=-felf32 CPUOBJS:=$(CPU)/boot.o $(CPU)/base.o $(CPU)/x86.o endif @@ -20,7 +19,6 @@ ifeq ($(CPU),x64) X86FAMILY=1 CPUFLAGS=-ffreestanding -mno-red-zone CPULDFLAGS= - CPUNASMFLAGS=-felf64 CPUOBJS:=$(CPU)/base.o $(CPU)/x64.o endif @@ -75,7 +73,6 @@ FLAGS=$(CPUFLAGS) -Wall -Wall -Wextra -nostdlib -nostartfiles \ CFLAGS=$(FLAGS) CXXFLAGS=$(FLAGS) -std=gnu++0x -fno-exceptions -fno-rtti ASFLAGS= -NASMFLAGS=$(CPUNASMFLAGS) STATICLIBS=\ -lc-sortix \ @@ -176,9 +173,6 @@ sortix.bin: sortix-$(BUILDID).tmp %.o: %.s $(HOSTAS) $< -o $@ $(ASFLAGS) -%.o: %.asm - nasm $(NASMFLAGS) $< -o $@ - clean: for D in $(DIRS); do rm -f $$D/*.o $$D/*.bin $$D/*.out $$D/*.tmp; done diff --git a/sortix/x64/gdt.s b/sortix/x64/gdt.s index 8a4eee30..eaf0fa76 100644 --- a/sortix/x64/gdt.s +++ b/sortix/x64/gdt.s @@ -1,6 +1,6 @@ /******************************************************************************* - COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011, 2012. + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. This file is part of Sortix. diff --git a/sortix/x64/idt.s b/sortix/x64/idt.s index b8a55c68..c3365514 100644 --- a/sortix/x64/idt.s +++ b/sortix/x64/idt.s @@ -1,6 +1,6 @@ /******************************************************************************* - COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011, 2012. + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. This file is part of Sortix. diff --git a/sortix/x86/gdt.asm b/sortix/x86/gdt.asm deleted file mode 100644 index 2dbd149e..00000000 --- a/sortix/x86/gdt.asm +++ /dev/null @@ -1,31 +0,0 @@ -; -; Gdt.s -- contains global descriptor table and interrupt descriptor table -; setup code. -; Based on code from Bran's kernel development tutorials. -; Rewritten for JamesM's kernel development tutorials. - -[GLOBAL gdt_flush] ; Allows the C code to call gdt_flush(). - -gdt_flush: - mov eax, [esp+4] ; Get the pointer to the GDT, passed as a parameter. - lgdt [eax] ; Load the new GDT pointer - - mov ax, 0x10 ; 0x10 is the offset in the GDT to our data segment - mov ds, ax ; Load all data segment selectors - mov es, ax - mov fs, ax - mov gs, ax - mov ss, ax - jmp 0x08:.flush ; 0x08 is the offset to our code segment: Far jump! -.flush: - ret - -[GLOBAL tss_flush] ; Allows our C code to call tss_flush(). -tss_flush: - mov ax, 0x2B ; Load the index of our TSS structure - The index is - ; 0x28, as it is the 5th selector and each is 8 bytes - ; long, but we set the bottom two bits (making 0x2B) - ; so that it has an RPL of 3, not zero. - ltr ax ; Load 0x2B into the task state register. - ret - diff --git a/sortix/x86/gdt.s b/sortix/x86/gdt.s new file mode 100644 index 00000000..bb020982 --- /dev/null +++ b/sortix/x86/gdt.s @@ -0,0 +1,63 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. + + This file is part of Sortix. + + Sortix is free software: you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. + + Sortix is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + You should have received a copy of the GNU General Public License along with + Sortix. If not, see . + + x86/gdt.s + Handles initialization of the 32-bit global descriptor table. + +*******************************************************************************/ + +.section .text + +.global gdt_flush +.type gdt_flush, @function +gdt_flush: + # Load the new GDT pointer + mov 4(%esp), %eax + lgdtl (%eax) + + # 0x10 is the offset in the GDT to our data segment + mov $0x10, %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + mov %ax, %ss + + # Far jump to our new code segment! + movl $GDT_FLUSH_POSTJMP, %eax + ljmp *(%eax) +gdt_flush_postjmp: + ret + +.global tss_flush +.type tss_flush, @function +tss_flush: + # Load the index of our TSS structure - The index is 0x28, as it is the 5th + # selector and each is 8 bytes long, but we set the bottom two bits (making + # 0x2B) so that it has an RPL of 3, not zero. + mov $0x2B, %ax + + # Load the task state register. + ltr %ax + ret + +.section .data +GDT_FLUSH_POSTJMP: + .long gdt_flush_postjmp + .word 0x08 # 0x08 is the offset to our code segment diff --git a/sortix/x86/idt.asm b/sortix/x86/idt.asm deleted file mode 100644 index 99a6c7c3..00000000 --- a/sortix/x86/idt.asm +++ /dev/null @@ -1,13 +0,0 @@ -; -; idt.s -- contains global descriptor table and interrupt descriptor table -; setup code. -; Based on code from Bran's kernel development tutorials. -; Rewritten for JamesM's kernel development tutorials. - -[GLOBAL idt_flush] ; Allows the C code to call idt_flush(). - -idt_flush: - mov eax, [esp+4] ; Get the pointer to the IDT, passed as a parameter. - lidt [eax] ; Load the IDT pointer. - ret - diff --git a/sortix/x86/idt.s b/sortix/x86/idt.s new file mode 100644 index 00000000..39ee2fb7 --- /dev/null +++ b/sortix/x86/idt.s @@ -0,0 +1,33 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. + + This file is part of Sortix. + + Sortix is free software: you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. + + Sortix is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + You should have received a copy of the GNU General Public License along with + Sortix. If not, see . + + x86/idt.s + Handles initialization of the 32-bit IDT. + +*******************************************************************************/ + +.section .text + +.global idt_flush +.type idt_flush, @function +idt_flush: + # Load the IDT pointer. + mov 4(%esp), %eax + lidt (%eax) + ret