Kernel: initial version

This commit is contained in:
Taku Shimosawa
2011-09-22 18:57:51 +09:00
parent 1b054d6e1e
commit 1311337438
9 changed files with 148 additions and 0 deletions

26
kernel/Makefile Normal file
View File

@ -0,0 +1,26 @@
BUILD_TARGET = mee knf
BUILD_DIR = ../../build/mcos
SRC = $PWD
KERNEL = kernel.img
KERNELS = $(addsuffix /$(KERNEL),$(addprefix $(BUILD_DIR)/,$(BUILD_TARGET)))
.PHONY: all clean
all: $(KERNELS)
%/kernel.img: %/Makefile
make -C $(dir $@)
%/Makefile: Makefile.build FORCE
@mkdir -p $(dir $@)
@echo 'SRC = $(PWD)' > $@
@echo 'TARGET = $(notdir $(patsubst %/,%,$(dir $@)))' >> $@
@cat Makefile.build >> $@
clean: $(addsuffix .clean,$(BUILD_TARGET))
%.clean: $(BUILD_DIR)/%/Makefile
make -C $(BUILD_DIR)/$(basename $@) clean
FORCE:

34
kernel/Makefile.build Normal file
View File

@ -0,0 +1,34 @@
AALBASE=$(SRC)/../../aal/manycore
AALDIR=$(AALBASE)/$(TARGET)
SRCS=$(wildcard $(SRC)/*.c)
OBJS=$(notdir $(patsubst %.c,%.o,$(SRCS)))
CFLAGS=-Wall -nostdlib -nostdinc -isystem $(shell $(CC) -print-file-name=include) -O3 -I$(AALBASE)/generic/include -I$(AALDIR)/include -I$(SRC)/include
LDFLAGS=-e arch_start
AALOBJ=$(AALDIR)/aal.o
-include $(SRC)/configs/config.$(TARGET)
all: depend kernel.img
kernel.img: $(OBJS) $(AALOBJ)
$(LD) $(LDFLAGS) -o $@.elf $^
[ -f $(SRC)/scripts/mkimage.$(TARGET) ] && sh $(SRC)/scripts/mkimage.$(TARGET) '$@.elf' '$@' '$(SRC)' || cp $@.elf $@
clean:
$(RM) $(OBJS) kernel.img kernel.img.elf Makefile.dep
make -C $(AALDIR) clean
depend: Makefile.dep
Makefile.dep: $(SRCS)
$(CC) $(CFLAGS) -MM $(SRCS) > Makefile.dep
$(AALOBJ): FORCE
make -C $(AALDIR) CC=$(CC) LD=$(LD)
%.o: $(SRC)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
FORCE:
-include Makefile.dep

View File

@ -0,0 +1,5 @@
CC = /home/shimosawa/cross.knf/bin/x86_64-l1om-linux-gcc
LD = /home/shimosawa/cross.knf/bin/x86_64-l1om-linux-ld
CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
LDFLAGS += -m elf_l1om

View File

@ -0,0 +1,2 @@
CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
LDFLAGS += -T $(SRC)/mee.lds

43
kernel/debug.c Normal file
View File

@ -0,0 +1,43 @@
#include <stdarg.h>
#include <string.h>
#include <kmsg.h>
#include <aal/debug.h>
struct aal_kmsg_buf kmsg_buf AAL_KMSG_ALIGN;
extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
/* TODO: lock */
void kputs(char *buf)
{
int len = strlen(buf);
if (len + kmsg_buf.tail > kmsg_buf.len) {
len = kmsg_buf.len - kmsg_buf.tail;
}
strncpy(kmsg_buf.str, buf, len);
kmsg_buf.tail += len;
}
int kprintf(const char *format, ...)
{
int len;
va_list va;
va_start(va, format);
len = vsnprintf(kmsg_buf.str + kmsg_buf.tail,
kmsg_buf.len - kmsg_buf.tail, format, va);
kmsg_buf.tail += len;
va_end(va);
return len;
}
void kmsg_init(void)
{
kmsg_buf.tail = 0;
kmsg_buf.len = sizeof(kmsg_buf.str);
}

9
kernel/include/kmsg.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef KMSG_H
#define KMSG_H
void kputs(char *buf);
int kprintf(const char *format, ...);
void kmsg_init(void);
#endif

3
kernel/mee.lds Normal file
View File

@ -0,0 +1,3 @@
MEMORY {
ram (rwx) : ORIGIN = 0x40001000, LENGTH = 4M
}

View File

@ -0,0 +1,3 @@
#!/bin/sh
cat $3/../elfboot/elfboot $1 > $2

23
kernel/setup.c Normal file
View File

@ -0,0 +1,23 @@
#include <kmsg.h>
#include <aal/cpu.h>
#include <aal/debug.h>
extern struct aal_kmsg_buf kmsg_buf;
extern void arch_init(void);
extern void kmsg_init(void);
int main(void)
{
kmsg_init();
kputs("MCK started.\n");
arch_init();
cpu_disable_interrupt();
while (1) {
cpu_halt();
}
return 0;
}