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