Initial commit
This commit is contained in:
commit
4be5ceeec6
52
Makefile
Normal file
52
Makefile
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# Aedrix root Makefile
|
||||||
|
# Copyright (C) 2012 Aaron Lindsay <aaron@aclindsay.com>
|
||||||
|
|
||||||
|
# Config options for the code itself (should be separated from the Makefile sometime)
|
||||||
|
ARCH = arm
|
||||||
|
|
||||||
|
# Config options concerning the build process itself
|
||||||
|
VERBOSE = 0 # 1 shows all compiler flags, 0 shows cleaner output
|
||||||
|
|
||||||
|
# Define the tools to be used
|
||||||
|
TOOL_PREFIX = arm-elf-
|
||||||
|
AS = $(TOOL_PREFIX)as
|
||||||
|
CC = $(TOOL_PREFIX)gcc
|
||||||
|
LD = $(TOOL_PREFIX)ld
|
||||||
|
|
||||||
|
# Define the flags we'll need for our tools
|
||||||
|
KCFLAGS = -Wall -Wextra -Werror -nostdlib -nostartfiles -ffreestanding -std=gnu99
|
||||||
|
KLDFLAGS = -T link.ld
|
||||||
|
|
||||||
|
KOBJS =
|
||||||
|
|
||||||
|
include boot/Makefile.inc
|
||||||
|
include kernel/Makefile.inc
|
||||||
|
|
||||||
|
all: aedrix-kernel
|
||||||
|
#all:
|
||||||
|
# @echo $(KOBJS)
|
||||||
|
|
||||||
|
aedrix-kernel: $(KOBJS)
|
||||||
|
$(if $(VERBOSE:1=),@echo ' LD $@')
|
||||||
|
$(if $(VERBOSE:1=),@)$(LD) $(KLDFLAGS) -o $@ $(KOBJS)
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(if $(VERBOSE:1=),@echo ' CC $@')
|
||||||
|
$(if $(VERBOSE:1=),@)$(CC) $(KCFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
# Assembly files without preprocessor directives
|
||||||
|
%.o: %.s
|
||||||
|
$(if $(VERBOSE:1=),@echo ' AS $@')
|
||||||
|
$(if $(VERBOSE:1=),@)$(AS) -o $@ $<
|
||||||
|
|
||||||
|
# Assembly files with preprocessor directives
|
||||||
|
%.o: %.S
|
||||||
|
$(if $(VERBOSE:1=),@echo ' AS $@')
|
||||||
|
$(if $(VERBOSE:1=),@)$(AS) -o $@ $<
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
clean:
|
||||||
|
@echo ' CLEAN *.o'
|
||||||
|
@rm -f $(KOBJS)
|
||||||
|
@echo ' CLEAN aedrix-kernel'
|
||||||
|
@rm -f aedrix-kernel
|
3
boot/Makefile.inc
Normal file
3
boot/Makefile.inc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
BOOT_PREFIX = boot
|
||||||
|
|
||||||
|
KOBJS += $(BOOT_PREFIX)/start.o
|
17
boot/start.s
Normal file
17
boot/start.s
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
interrupt_vector_table:
|
||||||
|
b . @ Reset
|
||||||
|
b .
|
||||||
|
b . @ SWI instruction
|
||||||
|
b .
|
||||||
|
b .
|
||||||
|
b .
|
||||||
|
b .
|
||||||
|
b .
|
||||||
|
|
||||||
|
.comm stack, 0x10000 @ Reserve 64k stack in the BSS
|
||||||
|
_start:
|
||||||
|
.globl _start
|
||||||
|
ldr sp, =stack+0x10000 @ Set up the stack
|
||||||
|
bl main @ Jump to the main function
|
||||||
|
1:
|
||||||
|
b 1b @ Halt
|
3
kernel/Makefile.inc
Normal file
3
kernel/Makefile.inc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
KERNEL_PREFIX = kernel
|
||||||
|
|
||||||
|
KOBJS += $(KERNEL_PREFIX)/hello.o
|
23
kernel/hello.c
Normal file
23
kernel/hello.c
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#define SERIAL_BASE 0x16000000
|
||||||
|
#define SERIAL_FLAG_REGISTER 0x18
|
||||||
|
#define SERIAL_BUFFER_FULL (1 << 5)
|
||||||
|
|
||||||
|
void putc (char c)
|
||||||
|
{
|
||||||
|
/* Wait until the serial buffer is empty */
|
||||||
|
while (*(volatile unsigned long*)(SERIAL_BASE + SERIAL_FLAG_REGISTER)
|
||||||
|
& (SERIAL_BUFFER_FULL));
|
||||||
|
/* Put our character, c, into the serial buffer */
|
||||||
|
*(volatile unsigned long*)SERIAL_BASE = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void puts (const char * str)
|
||||||
|
{
|
||||||
|
while (*str) putc (*str++);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
puts ("hello, world!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user