Initial commit
This commit is contained in:
		
							
								
								
									
										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; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user