[add] laos using xv6-riscv thought
This commit is contained in:
@@ -7,23 +7,54 @@ OD := $(LA_BIN_PATH)/$(LA_PREFIX)objdump
|
||||
OC := $(LA_BIN_PATH)/$(LA_PREFIX)objcopy
|
||||
RE := $(LA_BIN_PATH)/$(LA_PREFIX)readelf
|
||||
|
||||
NPROC := $(shell nproc)
|
||||
|
||||
CMAKE := cmake
|
||||
|
||||
BUILD_DIR := build
|
||||
BUILD_DIR := build
|
||||
ABS_BUILD := $(CURDIR)/$(BUILD_DIR)
|
||||
$(shell mkdir -p $(BUILD_DIR))
|
||||
|
||||
BIN := neula-os
|
||||
COMMON_DIR := COMMON
|
||||
BIN := neula-os
|
||||
BINARY := $(BUILD_DIR)/$(BIN)
|
||||
|
||||
FILES := $(shell find src -name *.c)
|
||||
TOP_SRC_DIR := src
|
||||
SOURCE_DIRS := $(shell ls $(TOP_SRC_DIR)/* -d)
|
||||
MK_DIRS := $(addprefix MAKE/,$(SOURCE_DIRS))
|
||||
ALL_SRCS := $(shell find . -name '*.c')
|
||||
LD_CSRIPT := kernel.ld
|
||||
|
||||
.PHONY: build clean
|
||||
EXTRA_MACRO := # NDEBUG
|
||||
|
||||
build:
|
||||
$(CC) $(FILES) -static --no-pic -march=loongarch32r -o $(BUILD_DIR)/$(BIN)
|
||||
$(OD) -D $(BUILD_DIR)/$(BIN) > $(BUILD_DIR)/$(BIN).dump
|
||||
$(RE) -a $(BUILD_DIR)/$(BIN) > $(BUILD_DIR)/$(BIN).info
|
||||
$(OC) $(BUILD_DIR)/$(BIN) -O binary $(BUILD_DIR)/$(BIN).bin
|
||||
EXTRA_FLAGS = -Wall -Werror -O -fno-omit-frame-pointer -ggdb -gdwarf-2
|
||||
EXTRA_FLAGS += -MD
|
||||
EXTRA_FLAGS += -ffreestanding -fno-common -nostdlib
|
||||
EXTRA_FLAGS += -I.
|
||||
EXTRA_FLAGS += -fno-pie -no-pie
|
||||
EXTRA_FLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector)
|
||||
|
||||
COMMONFLAGS := $(EXTRA_FLAGS) -march=loongarch32r
|
||||
CPPFLAGS += $(addprefix -D,$(EXTRA_MACRO)) -I$(CURDIR)/include
|
||||
CFLAGS += $(COMMONFLAGS) -O
|
||||
LDFLAGS += $(COMMONFLAGS) -z max-page-size=4096 -T$(LD_CSRIPT)
|
||||
|
||||
.PHONY: all build clean
|
||||
|
||||
all: build
|
||||
|
||||
$(MK_DIRS): MAKE/%:% $(shell find $(%) -name '*.c')
|
||||
@TOP_BUILD_DIR=$(ABS_BUILD) \
|
||||
CC=$(CC) \
|
||||
CPPFLAGS="$(CPPFLAGS)" \
|
||||
CFLAGS="$(CFLAGS)" \
|
||||
LDFLAGS="$(LDFLAGS)" \
|
||||
$(MAKE) -C $< -j$(NPROC)
|
||||
|
||||
build: $(MK_DIRS)
|
||||
@$(CC) -o $(BINARY) $(shell find $(BUILD_DIR) -name '*.o') $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
|
||||
@$(OD) -D $(BINARY) > $(BINARY).dump
|
||||
@$(RE) -a $(BINARY) > $(BINARY).info
|
||||
@$(OC) $(BINARY) -O binary $(BINARY).bin
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR)
|
||||
8
laos/include/asm.h
Normal file
8
laos/include/asm.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#include "defs.h"
|
||||
|
||||
#ifndef ASM_H__
|
||||
#define ASM_H__
|
||||
|
||||
#define CPUID 0x020
|
||||
|
||||
#endif
|
||||
@@ -1,5 +1,10 @@
|
||||
#include "defs.h"
|
||||
|
||||
#ifndef COMMON_H__
|
||||
#define COMMON_H__
|
||||
|
||||
void main();
|
||||
void start();
|
||||
void _entry() __attribute__ ((section (".entry")));
|
||||
|
||||
#endif // COMMON_H__
|
||||
6
laos/include/defs.h
Normal file
6
laos/include/defs.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef DEFS_H__
|
||||
#define DEFS_H__
|
||||
|
||||
#define NCPU 1
|
||||
|
||||
#endif
|
||||
0
laos/include/util.h
Normal file
0
laos/include/util.h
Normal file
41
laos/kernel.ld
Normal file
41
laos/kernel.ld
Normal file
@@ -0,0 +1,41 @@
|
||||
OUTPUT_ARCH( "loongarch32r" )
|
||||
ENTRY( _entry )
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
/*
|
||||
* ensure that entry.S / _entry is at 0x1C000000,
|
||||
*/
|
||||
. = 0x1C000000;
|
||||
|
||||
.text : {
|
||||
*(.entry)
|
||||
. = ALIGN(0x1000);
|
||||
*(.text .text.*)
|
||||
. = ALIGN(0x1000);
|
||||
PROVIDE(etext = .);
|
||||
}
|
||||
|
||||
.rodata : {
|
||||
. = ALIGN(16);
|
||||
*(.srodata .srodata.*) /* do not need to distinguish this from .rodata */
|
||||
. = ALIGN(16);
|
||||
*(.rodata .rodata.*)
|
||||
}
|
||||
|
||||
.data : {
|
||||
. = ALIGN(16);
|
||||
*(.sdata .sdata.*) /* do not need to distinguish this from .data */
|
||||
. = ALIGN(16);
|
||||
*(.data .data.*)
|
||||
}
|
||||
|
||||
.bss : {
|
||||
. = ALIGN(16);
|
||||
*(.sbss .sbss.*) /* do not need to distinguish this from .bss */
|
||||
. = ALIGN(16);
|
||||
*(.bss .bss.*)
|
||||
}
|
||||
|
||||
PROVIDE(end = .);
|
||||
}
|
||||
28
laos/src/kernel/Makefile
Normal file
28
laos/src/kernel/Makefile
Normal file
@@ -0,0 +1,28 @@
|
||||
CURNAME := kernel
|
||||
BUILD_DIR := $(TOP_BUILD_DIR)/$(CURNAME)
|
||||
|
||||
CSRC := $(wildcard *.c)
|
||||
OBJS := $(patsubst %.c,%.o,$(CSRC))
|
||||
BUILD_OBJS := $(addprefix $(BUILD_DIR)/,$(OBJS))
|
||||
|
||||
ASSRC := $(wildcard *.S)
|
||||
ASOBJ := $(patsubst %.S,%.o,$(ASSRC))
|
||||
BUILD_ASOBJ := $(addprefix $(BUILD_DIR)/,$(ASOBJ))
|
||||
|
||||
.PHONY: build all message
|
||||
|
||||
all: message build
|
||||
|
||||
$(BUILD_DIR):
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
|
||||
$(BUILD_OBJS): $(BUILD_DIR)/%.o:%.c $(BUILD_DIR)
|
||||
@$(CC) -c -o $@ $< $(CPPFLAGS) $(CFLAGS)
|
||||
|
||||
$(BUILD_ASOBJ): $(BUILD_DIR)/%.o:%.S $(BUILD_DIR)
|
||||
@$(CC) -c -o $@ $< $(CPPFLAGS) $(CFLAGS)
|
||||
|
||||
build: $(BUILD_OBJS) $(BUILD_ASOBJ)
|
||||
|
||||
message:
|
||||
@echo "building $(CURNAME)"
|
||||
20
laos/src/kernel/entry.S
Normal file
20
laos/src/kernel/entry.S
Normal file
@@ -0,0 +1,20 @@
|
||||
#include "asm.h"
|
||||
|
||||
.section .entry
|
||||
.global _entry
|
||||
_entry:
|
||||
# set up a stack for C.
|
||||
# stack0 is declared in start.c,
|
||||
# with a 4096-byte stack per CPU.
|
||||
# sp = stack0 + (hartid * 4096)
|
||||
la.global $sp, stack0
|
||||
lu12i.w $a0, (1024*4 >> 12) & 0xfffff
|
||||
addi.w $a0, $a0, 1024*4 & 0xfff
|
||||
csrrd $a1, CPUID
|
||||
addi.w $a1, $a1, 1
|
||||
mul.w $a0, $a0, $a1
|
||||
add.w $sp, $sp, $a0
|
||||
# jump to start() in start.c
|
||||
bl start
|
||||
spin:
|
||||
b spin
|
||||
1
laos/src/kernel/kalloc.c
Normal file
1
laos/src/kernel/kalloc.c
Normal file
@@ -0,0 +1 @@
|
||||
extern char end[];
|
||||
3
laos/src/kernel/main.c
Normal file
3
laos/src/kernel/main.c
Normal file
@@ -0,0 +1,3 @@
|
||||
void main() {
|
||||
|
||||
}
|
||||
7
laos/src/kernel/start.c
Normal file
7
laos/src/kernel/start.c
Normal file
@@ -0,0 +1,7 @@
|
||||
#include "common.h"
|
||||
|
||||
__attribute__ ((aligned (16))) char stack0[4096 * NCPU];
|
||||
|
||||
void start() {
|
||||
|
||||
}
|
||||
1
laos/src/kernel/vm.c
Normal file
1
laos/src/kernel/vm.c
Normal file
@@ -0,0 +1 @@
|
||||
extern char etext[];
|
||||
@@ -1,6 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main() {
|
||||
printf("%d", 123);
|
||||
return 0;
|
||||
}
|
||||
21
laos/src/util/Makefile
Normal file
21
laos/src/util/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
CURNAME := util
|
||||
BUILD_DIR := $(TOP_BUILD_DIR)/$(CURNAME)
|
||||
|
||||
CSRC := $(wildcard *.c)
|
||||
OBJS := $(patsubst %.c,%.o,$(CSRC))
|
||||
BUILD_OBJS := $(addprefix $(BUILD_DIR)/,$(OBJS))
|
||||
|
||||
.PHONY: build all message
|
||||
|
||||
all: message build
|
||||
|
||||
$(BUILD_DIR):
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
|
||||
$(BUILD_OBJS): $(BUILD_DIR)/%.o:%.c $(BUILD_DIR)
|
||||
@$(CC) -c -o $@ $< $(CPPFLAGS) $(CFLAGS)
|
||||
|
||||
build: $(BUILD_OBJS)
|
||||
|
||||
message:
|
||||
@echo "building $(CURNAME)"
|
||||
1
laos/src/util/memops.c
Normal file
1
laos/src/util/memops.c
Normal file
@@ -0,0 +1 @@
|
||||
#include <assert.h>
|
||||
Reference in New Issue
Block a user