mirror of https://github.com/tailix/mrubyvisor.git
Build Multiboot 2 file
This commit is contained in:
parent
d565cebb97
commit
466fde1d2c
23
Makefile
23
Makefile
|
@ -1,6 +1,4 @@
|
|||
.PHONY: $(MRUBYVISOR)
|
||||
|
||||
CCPREFIX = /home/kotovalexarian/repos/global/tailix/cross/root/bin/x86_64-elf-
|
||||
CCPREFIX = /home/kotovalexarian/repos/global/tailix/cross/root/bin/i386-elf-
|
||||
|
||||
AR = $(CCPREFIX)ar
|
||||
AS = $(CCPREFIX)as
|
||||
|
@ -8,12 +6,14 @@ CC = $(CCPREFIX)gcc
|
|||
LD = $(CCPREFIX)ld
|
||||
RAKE = rake
|
||||
RANLIB = $(CCPREFIX)ranlib
|
||||
QEMU = qemu-system-i386
|
||||
|
||||
ABS_REPO = $(shell pwd)
|
||||
|
||||
IMAGE = image.iso
|
||||
ROOTFS = rootfs
|
||||
DEST = dest
|
||||
SRC = src
|
||||
|
||||
GRUBCFG = $(ROOTFS)/boot/grub/grub.cfg
|
||||
LIBKERNAUX = $(DEST)/lib/libkernaux.a
|
||||
|
@ -22,29 +22,32 @@ MRUBYVISOR = $(ROOTFS)/boot/mrubyvisor.multiboot2
|
|||
|
||||
MRUBY_NAME = mrubyvisor
|
||||
|
||||
.PHONY: $(IMAGE) $(MRUBYVISOR)
|
||||
|
||||
all: runc
|
||||
|
||||
runc: $(IMAGE)
|
||||
qemu-system-x86_64 -cdrom $< -serial stdio -display none
|
||||
$(QEMU) -cdrom $< -serial stdio -display none
|
||||
|
||||
runw: $(IMAGE)
|
||||
qemu-system-x86_64 -cdrom $< -serial stdio
|
||||
$(QEMU) -cdrom $< -serial stdio
|
||||
|
||||
clean:
|
||||
rm -rf $(MRUBYVISOR) $(DEST)/*
|
||||
$(MAKE) -C $(SRC) clean
|
||||
|
||||
$(IMAGE): $(GRUBCFG) $(MRUBYVISOR)
|
||||
grub-mkrescue $(ROOTFS) -o $@
|
||||
|
||||
$(MRUBYVISOR): $(LIBKERNAUX) $(LIBMRUBY)
|
||||
make -C src mrubyvisor.multiboot2
|
||||
cp src/mrubyvisor.multiboot2 $@
|
||||
$(MAKE) -C $(SRC) mrubyvisor.multiboot2 CCPREFIX='$(CCPREFIX)' DEST='$(ABS_REPO)/$(DEST)'
|
||||
cp $(SRC)/mrubyvisor.multiboot2 $@
|
||||
|
||||
$(LIBKERNAUX):
|
||||
cd vendor/libkernaux && ./autogen.sh
|
||||
cd vendor/libkernaux && ./configure --host='x86_64-elf' --prefix='$(ABS_REPO)/$(DEST)' --enable-freestanding --with-drivers --with-libc AR='$(AR)' AS='$(AS)' CC='$(CC)' LD='$(LD)' RANLIB='$(RANLIB)'
|
||||
cd vendor/libkernaux && make
|
||||
cd vendor/libkernaux && make install
|
||||
cd vendor/libkernaux && ./configure --host='i386-elf' --prefix='$(ABS_REPO)/$(DEST)' --enable-freestanding --with-drivers --with-libc AR='$(AR)' AS='$(AS)' CC='$(CC)' LD='$(LD)' RANLIB='$(RANLIB)'
|
||||
cd vendor/libkernaux && $(MAKE)
|
||||
cd vendor/libkernaux && $(MAKE) install
|
||||
|
||||
$(LIBMRUBY): $(LIBKERNAUX)
|
||||
cd vendor/mruby && $(RAKE) MRUBY_CONFIG='$(ABS_REPO)/build_config.rb' CROSS_AR='$(AR)' CROSS_CC='$(CC)' CROSS_LD='$(LD)'
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
*.o
|
||||
|
||||
/mrubyvisor.multiboot2
|
37
src/Makefile
37
src/Makefile
|
@ -0,0 +1,37 @@
|
|||
AR = $(CCPREFIX)ar
|
||||
AS = $(CCPREFIX)as
|
||||
CC = $(CCPREFIX)gcc
|
||||
LD = $(CCPREFIX)ld
|
||||
RANLIB = $(CCPREFIX)ranlib
|
||||
|
||||
MRUBYVISOR = mrubyvisor.multiboot2
|
||||
|
||||
CFLAGS = \
|
||||
-std=gnu99 \
|
||||
-pedantic \
|
||||
-Wall \
|
||||
-Wextra \
|
||||
-ffreestanding \
|
||||
-fno-builtin \
|
||||
-fno-stack-protector \
|
||||
-I$(DEST)/include
|
||||
|
||||
CPPFLAGS = \
|
||||
-DKERNAUX_DEBUG
|
||||
|
||||
OBJS = start.S.o
|
||||
|
||||
all: $(MRUBYVISOR)
|
||||
|
||||
clean:
|
||||
rm -f $(MRUBYVISOR) $(OBJS)
|
||||
|
||||
$(MRUBYVISOR): $(OBJS)
|
||||
$(CC) -T linker.ld -o $@ $^ -ffreestanding -nostdlib -lkernaux -lmruby -lgcc -Wl,-L$(DEST)/lib
|
||||
grub-file --is-x86-multiboot2 $@
|
||||
|
||||
%.c.o: %.c
|
||||
$(CC) -c $< -o $@ $(CFLAGS) $(CPPFLAGS)
|
||||
|
||||
%.S.o: %.S
|
||||
$(AS) $< -o $@
|
|
@ -0,0 +1,38 @@
|
|||
OUTPUT_ARCH("i386")
|
||||
ENTRY(_start)
|
||||
|
||||
_kernel_offset = 0xC0000000; /* 3 GB */
|
||||
|
||||
_kernel_phys_base = 4M;
|
||||
_kernel_virt_base = (_kernel_phys_base + _kernel_offset);
|
||||
|
||||
_kernel_stack_size = _kernel_stack_end - _kernel_stack_start;
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = _kernel_phys_base;
|
||||
|
||||
.text BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.multiboot)
|
||||
*(.text)
|
||||
}
|
||||
|
||||
.rodata BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.rodata)
|
||||
}
|
||||
|
||||
.data BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(.data)
|
||||
}
|
||||
|
||||
.bss BLOCK(4K) : ALIGN(4K)
|
||||
{
|
||||
*(COMMON)
|
||||
*(.bss)
|
||||
}
|
||||
|
||||
_kernel_size = . - _kernel_phys_base;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
.set MULTIBOOT_MAGIC, 0xE85250D6
|
||||
.set MULTIBOOT_ARCH, 0
|
||||
.set MULTIBOOT_LENGTH, 16 + 8
|
||||
.set MULTIBOOT_CHECKSUM, -(MULTIBOOT_MAGIC + MULTIBOOT_ARCH + MULTIBOOT_LENGTH)
|
||||
|
||||
|
||||
|
||||
.section .multiboot
|
||||
.align 4
|
||||
.long MULTIBOOT_MAGIC
|
||||
.long MULTIBOOT_ARCH
|
||||
.long MULTIBOOT_LENGTH
|
||||
.long MULTIBOOT_CHECKSUM
|
||||
.long 0
|
||||
.long 8
|
||||
|
||||
|
||||
|
||||
.section .bss
|
||||
|
||||
.global _kernel_stack_start
|
||||
.global _kernel_stack_end
|
||||
|
||||
.align 16
|
||||
_kernel_stack_start:
|
||||
.skip 16384 # 16 KiB
|
||||
_kernel_stack_end:
|
||||
|
||||
|
||||
|
||||
.section .text
|
||||
|
||||
.global _start
|
||||
|
||||
.type _start, @function
|
||||
|
||||
_start:
|
||||
mov $_kernel_stack_end, %esp // Initialize stack
|
||||
|
||||
push %ebx // Multiboot information pointer
|
||||
push %eax // Multiboot magic number
|
||||
//call main
|
||||
|
||||
.size _start, . - _start
|
Loading…
Reference in New Issue