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