mirror of
https://github.com/jserv/armv8-hello.git
synced 2025-05-22 02:43:17 +00:00
initial import of armv8-hello
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
armv8-hello is written by:
|
||||||
|
Jim Huang <jserv.tw@gmail.com>
|
||||||
|
|
||||||
|
Copyrighted by:
|
||||||
|
National Cheng Kung University, Taiwan
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
armv8-hello is freely redistributable under the two-clause BSD License:
|
||||||
|
|
||||||
|
Copyright (C) 2016 National Cheng Kung University, Taiwan.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
IMAGE := kernel.elf
|
||||||
|
|
||||||
|
CROSS_COMPILE = aarch64-linux-gnu-
|
||||||
|
|
||||||
|
CC = $(CROSS_COMPILE)gcc
|
||||||
|
LD = $(CROSS_COMPILE)ld
|
||||||
|
OBJDUMP = $(CROSS_COMPILE)objdump
|
||||||
|
|
||||||
|
CFLAGS = -Wall -fno-common -O0 -g \
|
||||||
|
-nostdlib -nostartfiles -ffreestanding \
|
||||||
|
-march=armv8-a
|
||||||
|
|
||||||
|
OBJS = hello.o
|
||||||
|
|
||||||
|
all: $(IMAGE)
|
||||||
|
|
||||||
|
boot.o: boot.S
|
||||||
|
$(CC) boot.S -c -o boot.o
|
||||||
|
|
||||||
|
$(IMAGE): kernel.ld boot.o $(OBJS)
|
||||||
|
$(LD) boot.o $(OBJS) -T kernel.ld -o $(IMAGE)
|
||||||
|
$(OBJDUMP) -d kernel.elf > kernel.list
|
||||||
|
$(OBJDUMP) -t kernel.elf | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernel.sym
|
||||||
|
|
||||||
|
qemu: $(IMAGE)
|
||||||
|
@qemu-system-aarch64 -M ? | grep virt >/dev/null || exit
|
||||||
|
@echo "Press Ctrl-A and then X to exit QEMU"
|
||||||
|
@echo
|
||||||
|
qemu-system-aarch64 -machine virt -cpu cortex-a57 \
|
||||||
|
-smp 4 -m 4096 \
|
||||||
|
-nographic -serial mon:stdio \
|
||||||
|
-kernel $(IMAGE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(IMAGE) *.o *.list *.sym
|
||||||
|
|
||||||
|
.PHONY: all qemu clean
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
Hello World for bare metal ARM using QEMU
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
-------------
|
||||||
|
- Install [Linaro toolchain](http://www.linaro.org/downloads/) for Aarch64 little-endian
|
||||||
|
```
|
||||||
|
sudo apt-get install gcc-aarch64-linux-gnu
|
||||||
|
```
|
||||||
|
- Install recent QEMU with Aarch64 target
|
||||||
|
```
|
||||||
|
sudo apt-get install qemu-system-arm
|
||||||
|
```
|
||||||
|
|
||||||
|
Building and Verification
|
||||||
|
-------------------------
|
||||||
|
* Changes the current working directory to the specified one and then
|
||||||
|
```
|
||||||
|
make
|
||||||
|
make qemu
|
||||||
|
```
|
||||||
|
|
||||||
|
Licensing
|
||||||
|
---------
|
||||||
|
`mini-arm-os` is freely redistributable under the two-clause BSD License.
|
||||||
|
Use of this source code is governed by a BSD-style license that can be found
|
||||||
|
in the `LICENSE` file.
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#include "reg.h"
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
.globl _start
|
||||||
|
_start:
|
||||||
|
/* init UART (38400 8N1) */
|
||||||
|
ldr x4, =UART_BASE // UART base
|
||||||
|
mov w5, #0x10 // IBRD
|
||||||
|
str w5, [x4, #0x24]
|
||||||
|
mov w5, #0xc300
|
||||||
|
orr w5, w5, #0x0001 // CR
|
||||||
|
str w5, [x4, #0x30]
|
||||||
|
|
||||||
|
/* check CPU ID */
|
||||||
|
mrs x0, mpidr_el1
|
||||||
|
tst x0, #15
|
||||||
|
b.ne other_cpu
|
||||||
|
b.eq boot_cpu
|
||||||
|
|
||||||
|
boot_cpu:
|
||||||
|
/* configure stack */
|
||||||
|
adrp x0, stacktop
|
||||||
|
mov sp, x0
|
||||||
|
|
||||||
|
b main
|
||||||
|
|
||||||
|
other_cpu:
|
||||||
|
b other_cpu
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#include "reg.h"
|
||||||
|
|
||||||
|
int puts(const char *str)
|
||||||
|
{
|
||||||
|
while (*str)
|
||||||
|
*((unsigned int *) UART_BASE) = *str++;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
puts("Hello\n");
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
OUTPUT_FORMAT("elf64-littleaarch64")
|
||||||
|
OUTPUT_ARCH(aarch64)
|
||||||
|
TARGET(binary)
|
||||||
|
|
||||||
|
STACKTOP = 0x51000000;
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = 0x40010000;
|
||||||
|
.text : { *(.text) }
|
||||||
|
.data : { *(.data) }
|
||||||
|
.bss : { *(.bss) }
|
||||||
|
|
||||||
|
. = STACKTOP;
|
||||||
|
stacktop = .;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user