mirror of https://github.com/tailix/mrubyvisor.git
Compare commits
7 Commits
1e2d5631eb
...
d8ebd15e6d
Author | SHA1 | Date |
---|---|---|
Alex Kotov | d8ebd15e6d | |
Alex Kotov | e6b20be271 | |
Alex Kotov | e5f76a7d76 | |
Alex Kotov | 86d580e88a | |
Alex Kotov | ec3e68b9b4 | |
Alex Kotov | 42c7bbbbcf | |
Alex Kotov | 9feb7c884d |
|
@ -4,3 +4,6 @@
|
||||||
[submodule "vendor/mruby"]
|
[submodule "vendor/mruby"]
|
||||||
path = vendor/mruby
|
path = vendor/mruby
|
||||||
url = https://github.com/mruby/mruby.git
|
url = https://github.com/mruby/mruby.git
|
||||||
|
[submodule "vendor/drivers"]
|
||||||
|
path = vendor/drivers
|
||||||
|
url = https://github.com/tailix/drivers.git
|
||||||
|
|
40
Makefile
40
Makefile
|
@ -28,17 +28,21 @@ QEMU = qemu-system-i386
|
||||||
ABS_REPO = $(shell $(PWD))
|
ABS_REPO = $(shell $(PWD))
|
||||||
|
|
||||||
# Basic paths
|
# Basic paths
|
||||||
MRUBY_CONF = build_config.rb
|
MRUBY_CONF = build_config.rb
|
||||||
DEST_DIR = dest
|
DEST_DIR = dest
|
||||||
IMAGE = image.iso
|
IMAGE = image.iso
|
||||||
ROOTFS_DIR = rootfs
|
ROOTFS_DIR = rootfs
|
||||||
SRC_DIR = src
|
SRC_DIR = src
|
||||||
|
|
||||||
|
# Basic paths (dependencies)
|
||||||
LIBKERNAUX_DIR = vendor/libkernaux
|
LIBKERNAUX_DIR = vendor/libkernaux
|
||||||
|
DRIVERS_DIR = vendor/drivers
|
||||||
MRUBY_DIR = vendor/mruby
|
MRUBY_DIR = vendor/mruby
|
||||||
|
|
||||||
# Deeper paths
|
# Deeper paths
|
||||||
INCLUDE_DIR = $(DEST_DIR)/include
|
INCLUDE_DIR = $(DEST_DIR)/include
|
||||||
LIB_DIR = $(DEST_DIR)/lib
|
LIB_DIR = $(DEST_DIR)/lib
|
||||||
|
LIBDRIVERS = $(LIB_DIR)/libdrivers.a
|
||||||
LIBKERNAUX = $(LIB_DIR)/libkernaux.a
|
LIBKERNAUX = $(LIB_DIR)/libkernaux.a
|
||||||
LIBMRUBY = $(LIB_DIR)/libmruby.a
|
LIBMRUBY = $(LIB_DIR)/libmruby.a
|
||||||
GRUBCFG = $(ROOTFS_DIR)/boot/grub/grub.cfg
|
GRUBCFG = $(ROOTFS_DIR)/boot/grub/grub.cfg
|
||||||
|
@ -48,20 +52,29 @@ MRUBYVISOR = $(ROOTFS_DIR)/boot/mrubyvisor.multiboot2
|
||||||
# libkernaux #
|
# libkernaux #
|
||||||
##############
|
##############
|
||||||
|
|
||||||
LIBKERNAUX_ARGS = \
|
LIBKERNAUX_ARGS = \
|
||||||
--enable-freestanding \
|
--enable-freestanding \
|
||||||
--enable-split-libc \
|
--enable-split-libc \
|
||||||
--enable-debug \
|
--enable-debug \
|
||||||
--disable-float \
|
--disable-float \
|
||||||
--with-drivers \
|
|
||||||
--with-libc
|
--with-libc
|
||||||
|
|
||||||
|
###########
|
||||||
|
# drivers #
|
||||||
|
###########
|
||||||
|
|
||||||
|
DRIVERS_CFLAGS = \
|
||||||
|
-nostdlib \
|
||||||
|
-ffreestanding \
|
||||||
|
-fno-pic \
|
||||||
|
-fno-stack-protector
|
||||||
|
|
||||||
#########
|
#########
|
||||||
# mruby #
|
# mruby #
|
||||||
#########
|
#########
|
||||||
|
|
||||||
MRUBY_BUILD_NAME = mrubyvisor
|
MRUBY_BUILD_NAME = mrubyvisor
|
||||||
MRUBY_FLAGS = \
|
MRUBY_FLAGS = \
|
||||||
-DMRB_NO_BOXING \
|
-DMRB_NO_BOXING \
|
||||||
-DMRB_NO_FLOAT \
|
-DMRB_NO_FLOAT \
|
||||||
-DMRB_NO_STDIO
|
-DMRB_NO_STDIO
|
||||||
|
@ -91,6 +104,9 @@ clean-dest:
|
||||||
clean-mruby:
|
clean-mruby:
|
||||||
cd $(MRUBY_DIR) && $(RAKE) clean
|
cd $(MRUBY_DIR) && $(RAKE) clean
|
||||||
|
|
||||||
|
clean-drivers:
|
||||||
|
$(MAKE) -C $(DRIVERS_DIR) distclean || true
|
||||||
|
|
||||||
clean-libkernaux:
|
clean-libkernaux:
|
||||||
$(MAKE) -C $(LIBKERNAUX_DIR) distclean || true
|
$(MAKE) -C $(LIBKERNAUX_DIR) distclean || true
|
||||||
|
|
||||||
|
@ -101,7 +117,7 @@ clean-libkernaux:
|
||||||
$(IMAGE): $(GRUBCFG) $(MRUBYVISOR)
|
$(IMAGE): $(GRUBCFG) $(MRUBYVISOR)
|
||||||
$(GRUB_MKRESCUE) $(ROOTFS_DIR) -o $@
|
$(GRUB_MKRESCUE) $(ROOTFS_DIR) -o $@
|
||||||
|
|
||||||
$(MRUBYVISOR): $(LIBKERNAUX) $(LIBMRUBY)
|
$(MRUBYVISOR): $(LIBKERNAUX) $(LIBDRIVERS) $(LIBMRUBY)
|
||||||
$(MAKE) -C $(SRC_DIR) mrubyvisor.multiboot2 CCPREFIX='$(CCPREFIX)' DEST='$(ABS_REPO)/$(DEST_DIR)' MRUBY_FLAGS='$(MRUBY_FLAGS)'
|
$(MAKE) -C $(SRC_DIR) mrubyvisor.multiboot2 CCPREFIX='$(CCPREFIX)' DEST='$(ABS_REPO)/$(DEST_DIR)' MRUBY_FLAGS='$(MRUBY_FLAGS)'
|
||||||
$(CP) $(SRC_DIR)/mrubyvisor.multiboot2 $@
|
$(CP) $(SRC_DIR)/mrubyvisor.multiboot2 $@
|
||||||
|
|
||||||
|
@ -111,6 +127,12 @@ $(LIBKERNAUX):
|
||||||
cd $(LIBKERNAUX_DIR) && $(MAKE)
|
cd $(LIBKERNAUX_DIR) && $(MAKE)
|
||||||
cd $(LIBKERNAUX_DIR) && $(MAKE) install
|
cd $(LIBKERNAUX_DIR) && $(MAKE) install
|
||||||
|
|
||||||
|
$(LIBDRIVERS):
|
||||||
|
cd $(DRIVERS_DIR) && ./autogen.sh
|
||||||
|
cd $(DRIVERS_DIR) && ./configure --host='i386-elf' --prefix='$(ABS_REPO)/$(DEST_DIR)' CFLAGS='$(DRIVERS_CFLAGS)' AR='$(AR)' AS='$(AS)' CC='$(CC)' LD='$(LD)' RANLIB='$(RANLIB)'
|
||||||
|
cd $(DRIVERS_DIR) && $(MAKE)
|
||||||
|
cd $(DRIVERS_DIR) && $(MAKE) install
|
||||||
|
|
||||||
$(LIBMRUBY): $(LIBKERNAUX) $(MRUBY_CONF)
|
$(LIBMRUBY): $(LIBKERNAUX) $(MRUBY_CONF)
|
||||||
$(MAKE) clean-mruby
|
$(MAKE) clean-mruby
|
||||||
$(MKDIR) -p $(INCLUDE_DIR) $(LIB_DIR)
|
$(MKDIR) -p $(INCLUDE_DIR) $(LIB_DIR)
|
||||||
|
|
|
@ -35,7 +35,7 @@ clean:
|
||||||
rm -f $(MRUBYVISOR) $(OBJS)
|
rm -f $(MRUBYVISOR) $(OBJS)
|
||||||
|
|
||||||
$(MRUBYVISOR): $(OBJS)
|
$(MRUBYVISOR): $(OBJS)
|
||||||
$(CC) -T linker.ld -o $@ $^ -ffreestanding -nostdlib -lmruby -lkernaux -lc -lgcc -Wl,-L$(DEST)/lib
|
$(CC) -T linker.ld -o $@ $^ -ffreestanding -nostdlib -lmruby -ldrivers -lkernaux -lc -lgcc -Wl,-L$(DEST)/lib
|
||||||
grub-file --is-x86-multiboot2 $@
|
grub-file --is-x86-multiboot2 $@
|
||||||
|
|
||||||
%.c.o: %.c
|
%.c.o: %.c
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <kernaux/drivers/shutdown.h>
|
#include <drivers/shutdown.h>
|
||||||
#include <kernaux/generic/malloc.h>
|
#include <kernaux/generic/malloc.h>
|
||||||
#include <kernaux/free_list.h>
|
#include <kernaux/free_list.h>
|
||||||
#include <kernaux/libc.h>
|
#include <kernaux/libc.h>
|
||||||
|
@ -43,7 +43,7 @@ void my_abort()
|
||||||
void my_exit(const int status)
|
void my_exit(const int status)
|
||||||
{
|
{
|
||||||
logger_exit(status);
|
logger_exit(status);
|
||||||
kernaux_drivers_shutdown_poweroff();
|
drivers_shutdown_poweroff();
|
||||||
|
|
||||||
// TODO: libkernaux shutdown poweroff noreturn
|
// TODO: libkernaux shutdown poweroff noreturn
|
||||||
volatile int x = 0;
|
volatile int x = 0;
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
|
|
||||||
#include <kernaux/drivers/console.h>
|
#include <drivers/console.h>
|
||||||
|
|
||||||
void logger_assert(
|
void logger_assert(
|
||||||
const char *const file,
|
const char *const file,
|
||||||
const int line,
|
const int line,
|
||||||
const char *const str
|
const char *const str
|
||||||
) {
|
) {
|
||||||
kernaux_drivers_console_printf("panic: %s:%u: \"%s\"\n", file, line, str);
|
drivers_console_printf("panic: %s:%u: \"%s\"\n", file, line, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void logger_exit(const int status)
|
void logger_exit(const int status)
|
||||||
{
|
{
|
||||||
kernaux_drivers_console_printf("exit: %d\n", status);
|
drivers_console_printf("exit: %d\n", status);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,9 +7,10 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <kernaux/drivers/console.h>
|
|
||||||
#include <kernaux/multiboot2.h>
|
#include <kernaux/multiboot2.h>
|
||||||
|
|
||||||
|
#include <drivers/console.h>
|
||||||
|
|
||||||
#include <mruby.h>
|
#include <mruby.h>
|
||||||
#include <mruby/compile.h>
|
#include <mruby/compile.h>
|
||||||
#include <mruby/proc.h>
|
#include <mruby/proc.h>
|
||||||
|
@ -93,6 +94,6 @@ mrb_value ruby_console_puts(
|
||||||
) {
|
) {
|
||||||
const char *str = NULL;
|
const char *str = NULL;
|
||||||
mrb_get_args(mrb, "z", &str);
|
mrb_get_args(mrb, "z", &str);
|
||||||
kernaux_drivers_console_puts(str);
|
drivers_console_puts(str);
|
||||||
return mrb_nil_value();
|
return mrb_nil_value();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
#include "panic.h"
|
#include "panic.h"
|
||||||
|
|
||||||
|
#include <drivers/shutdown.h>
|
||||||
#include <kernaux/assert.h>
|
#include <kernaux/assert.h>
|
||||||
#include <kernaux/drivers/shutdown.h>
|
|
||||||
|
|
||||||
void panic_init()
|
void panic_init()
|
||||||
{
|
{
|
||||||
|
@ -12,5 +12,5 @@ void panic_init()
|
||||||
void assert(const char *const file, const int line, const char *const str)
|
void assert(const char *const file, const int line, const char *const str)
|
||||||
{
|
{
|
||||||
logger_assert(file, line, str);
|
logger_assert(file, line, str);
|
||||||
kernaux_drivers_shutdown_poweroff();
|
drivers_shutdown_poweroff();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <kernaux/drivers/console.h>
|
#include <drivers/console.h>
|
||||||
#include <kernaux/multiboot2.h>
|
#include <kernaux/multiboot2.h>
|
||||||
|
|
||||||
#include <kernaux/macro/packing_start.run>
|
#include <kernaux/macro/packing_start.run>
|
||||||
|
@ -34,7 +34,7 @@ void stack_trace_init(
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!elf_symbols_tag) {
|
if (!elf_symbols_tag) {
|
||||||
kernaux_drivers_console_puts("ELF symbols tag not found");
|
drivers_console_puts("ELF symbols tag not found");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,13 +44,13 @@ void stack_trace_init(
|
||||||
// (const struct SectionEntry*)KERNAUX_MULTIBOOT2_DATA(elf_symbols_tag);
|
// (const struct SectionEntry*)KERNAUX_MULTIBOOT2_DATA(elf_symbols_tag);
|
||||||
(const struct SectionEntry*)(&((uint8_t*)elf_symbols_tag)[20]);
|
(const struct SectionEntry*)(&((uint8_t*)elf_symbols_tag)[20]);
|
||||||
|
|
||||||
kernaux_drivers_console_puts("ELF symbols tag:");
|
drivers_console_puts("ELF symbols tag:");
|
||||||
KernAux_Multiboot2_ITag_ELFSymbols_print(
|
KernAux_Multiboot2_ITag_ELFSymbols_print(
|
||||||
elf_symbols_tag,
|
elf_symbols_tag,
|
||||||
kernaux_drivers_console_printf
|
drivers_console_printf
|
||||||
);
|
);
|
||||||
kernaux_drivers_console_printf(" data: 0x%p\n", (void*)section_headers);
|
drivers_console_printf(" data: 0x%p\n", (void*)section_headers);
|
||||||
kernaux_drivers_console_putc('\n');
|
drivers_console_putc('\n');
|
||||||
|
|
||||||
const struct SectionEntry *const shstrtab =
|
const struct SectionEntry *const shstrtab =
|
||||||
// FIXME: GRUB 2 doesn't conform the spec!
|
// FIXME: GRUB 2 doesn't conform the spec!
|
||||||
|
@ -71,8 +71,7 @@ void stack_trace_init(
|
||||||
const char *const section_name =
|
const char *const section_name =
|
||||||
&((const char*)shstrtab->vaddr)[section_header->name];
|
&((const char*)shstrtab->vaddr)[section_header->name];
|
||||||
|
|
||||||
kernaux_drivers_console_printf("section %lu: %s\n",
|
drivers_console_printf("section %lu: %s\n", index, section_name);
|
||||||
index, section_name);
|
|
||||||
|
|
||||||
if (strcmp(section_name, ".debug_info") == 0) {
|
if (strcmp(section_name, ".debug_info") == 0) {
|
||||||
debug_info_index = index;
|
debug_info_index = index;
|
||||||
|
@ -83,12 +82,12 @@ void stack_trace_init(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
kernaux_drivers_console_putc('\n');
|
drivers_console_putc('\n');
|
||||||
|
|
||||||
kernaux_drivers_console_printf(".debug_info: %lu\n", debug_info_index);
|
drivers_console_printf(".debug_info: %lu\n", debug_info_index);
|
||||||
kernaux_drivers_console_printf(".debug_abbrev: %lu\n", debug_abbrev_index);
|
drivers_console_printf(".debug_abbrev: %lu\n", debug_abbrev_index);
|
||||||
kernaux_drivers_console_printf(".debug_str: %lu\n", debug_str_index);
|
drivers_console_printf(".debug_str: %lu\n", debug_str_index);
|
||||||
kernaux_drivers_console_putc('\n');
|
drivers_console_putc('\n');
|
||||||
|
|
||||||
if (!debug_info_index || !debug_abbrev_index || !debug_str_index) return;
|
if (!debug_info_index || !debug_abbrev_index || !debug_str_index) return;
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -22,6 +22,6 @@ _start:
|
||||||
push %ebx // Multiboot information pointer
|
push %ebx // Multiboot information pointer
|
||||||
push %eax // Multiboot magic number
|
push %eax // Multiboot magic number
|
||||||
call main
|
call main
|
||||||
call kernaux_drivers_shutdown_poweroff
|
call drivers_shutdown_poweroff
|
||||||
|
|
||||||
.size _start, . - _start
|
.size _start, . - _start
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 29728ae2a669d3916385909df38d4bcc95d09b7e
|
|
@ -1 +1 @@
|
||||||
Subproject commit cb834226a73eda147c0f6d60ad14a63ad2a93628
|
Subproject commit b2c05b376773f5e6aaa5d5e2c57cd90d1d7a6dd9
|
Loading…
Reference in New Issue