boards: remove x86-multiboot-common
This commit is contained in:
parent
99009af25e
commit
b3eb9b8cf2
@ -1,3 +0,0 @@
|
||||
MODULE = x86-multiboot-common
|
||||
|
||||
include $(RIOTBASE)/Makefile.base
|
||||
@ -1,67 +0,0 @@
|
||||
ifeq (, $(NEWLIB_BASE))
|
||||
NEWLIB_BASE := $(RIOTBASE)/toolchain/x86/i586-none-elf
|
||||
endif
|
||||
|
||||
ifneq (0, $(shell test -e "$(NEWLIB_BASE)/lib/libc.a" && echo $$?))
|
||||
NEWLIB_PRECOMPILED_NAME := i586-newlib_2.2.0.20150623_tlsf-3337.tar.bz2
|
||||
NEWLIB_PRECOMPILED := http://download.riot-os.org/$(NEWLIB_PRECOMPILED_NAME)
|
||||
NEWLIB_PRECOMPILED_MD5 := 8090a768cf0294b259fe7ad904d085c7
|
||||
|
||||
$(warning Precompiled newlib is missing in $(NEWLIB_BASE))
|
||||
$(warning Downloading from $(NEWLIB_PRECOMPILED))
|
||||
|
||||
$(shell cd $(RIOTBASE) && $(DLCACHE) "$(NEWLIB_PRECOMPILED)" 8090a768cf0294b259fe7ad904d085c7 - | tar xj)
|
||||
endif
|
||||
|
||||
ifeq (,$(BUILD_INCLUDE_BASE))
|
||||
GCC_BUILD_TRIPLET ?= $(shell gcc -dumpmachine)
|
||||
GCC_BUILD_VERSION ?= $(shell gcc -dumpversion)
|
||||
BUILD_INCLUDE_BASE = /usr/lib/gcc/$(GCC_BUILD_TRIPLET)/$(GCC_BUILD_VERSION)
|
||||
|
||||
ifeq (,$(shell echo $(GCC_BUILD_TRIPLET) | sed -e 's,-.*,,' | grep -e '\(x\|i[3-7]\)86'))
|
||||
$(warning Your build machine is a(n) $(GCC_BUILD_TRIPLET).)
|
||||
$(warning Since this is not IA32 compatible, you must set BUILD_INCLUDE_BASE explicitly!)
|
||||
endif
|
||||
endif
|
||||
|
||||
export INCLUDES += -isystem $(BUILD_INCLUDE_BASE)/include \
|
||||
-isystem $(NEWLIB_BASE)/include \
|
||||
-isystem $(NEWLIB_BASE)/sys-include \
|
||||
-isystem $(BUILD_INCLUDE_BASE)/include-fixed \
|
||||
-I$(RIOTBOARD)/x86-multiboot-common/include
|
||||
export CPU = x86
|
||||
|
||||
# toolchain config
|
||||
export CC ?= $(PREFIX)gcc
|
||||
ifeq ($(LTO),1)
|
||||
export AR = $(PREFIX)gcc-ar
|
||||
else
|
||||
export AR = $(PREFIX)ar
|
||||
endif
|
||||
export AS ?= $(PREFIX)as
|
||||
export RANLIB ?= $(PREFIX)ranlib
|
||||
export LINK ?= $(RIOTBASE)/boards/x86-multiboot-common/dist/link $(PREFIX)gcc
|
||||
export SIZE ?= $(PREFIX)size
|
||||
export OBJCOPY ?= $(PREFIX)objcopy
|
||||
|
||||
export CFLAGS += -m32 -mfpmath=387 -ffreestanding -nostdlib -nostdinc -fno-builtin
|
||||
export OFLAGS = -O binary
|
||||
|
||||
LINKFLAGS += -m32 -nostdlib -nostdinc -nostartfiles -nodefaultlibs \
|
||||
--prefix=$(NEWLIB_BASE) \
|
||||
-Wl,-rpath,$(NEWLIB_BASE)/lib \
|
||||
-T$(RIOTBASE)/boards/x86-multiboot-common/linker.ld
|
||||
|
||||
# clean up unused functions
|
||||
export CFLAGS += -ffunction-sections -fdata-sections
|
||||
export LINKFLAGS += -Wl,--gc-sections
|
||||
|
||||
UNDEF += $(BINDIR)/x86-multiboot-common/startup.o
|
||||
|
||||
BASELIBS += $(NEWLIB_BASE)/lib/libc.a \
|
||||
$(NEWLIB_BASE)/lib/libm.a
|
||||
|
||||
all:
|
||||
|
||||
all-debug: export CFLAGS += -ggdb3 -O0
|
||||
all-debug: all
|
||||
14
boards/x86-multiboot-common/dist/link
vendored
14
boards/x86-multiboot-common/dist/link
vendored
@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
args=($@)
|
||||
|
||||
for ((i = 0; i < ${#args[@]}; ++i))
|
||||
do
|
||||
if [[ "${args[i]}" == '-lm' ]]
|
||||
then
|
||||
unset args[i]
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
exec "${args[@]}"
|
||||
@ -1,238 +0,0 @@
|
||||
/* Copyright (C) 1999,2003,2007,2008,2009 Free Software Foundation, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY
|
||||
* DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
||||
* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup boards_x86-multiboot i586 multiboot common
|
||||
* @ingroup boards
|
||||
* @brief Common files for multiboot enabled kernels
|
||||
*
|
||||
* @ingroup x86-multiboot
|
||||
* @{
|
||||
* @file
|
||||
* @brief Architecture specific definitions for multiboot enabled kernels
|
||||
*/
|
||||
|
||||
#ifndef MULTIBOOT_H
|
||||
#define MULTIBOOT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** How many bytes from the start of the file we search for the header. */
|
||||
#define MULTIBOOT_SEARCH 8192
|
||||
|
||||
/** The flags for the Multiboot header. */
|
||||
#define MULTIBOOT_HEADER_FLAGS 0x00010003
|
||||
|
||||
/** The magic field should contain this. */
|
||||
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002
|
||||
|
||||
/** This should be in %eax. */
|
||||
#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
|
||||
|
||||
/** The bits in the required part of flags field we don't support. */
|
||||
#define MULTIBOOT_UNSUPPORTED 0x0000fffc
|
||||
|
||||
/** Alignment of multiboot modules. */
|
||||
#define MULTIBOOT_MOD_ALIGN 0x00001000
|
||||
|
||||
/** Alignment of the multiboot info structure. */
|
||||
#define MULTIBOOT_INFO_ALIGN 0x00000004
|
||||
|
||||
/** Flags set in the 'flags' member of the multiboot header. */
|
||||
|
||||
/** Align all boot modules on i386 page (4KB) boundaries. */
|
||||
#define MULTIBOOT_PAGE_ALIGN 0x00000001
|
||||
|
||||
/** Must pass memory information to OS. */
|
||||
#define MULTIBOOT_MEMORY_INFO 0x00000002
|
||||
|
||||
/** Must pass video information to OS. */
|
||||
#define MULTIBOOT_VIDEO_MODE 0x00000004
|
||||
|
||||
/** This flag indicates the use of the address fields in the header. */
|
||||
#define MULTIBOOT_AOUT_KLUDGE 0x00010000
|
||||
|
||||
/** Flags to be set in the 'flags' member of the multiboot info structure. */
|
||||
|
||||
/** is there basic lower/upper memory information? */
|
||||
#define MULTIBOOT_INFO_MEMORY 0x00000001
|
||||
/** is there a boot device set? */
|
||||
#define MULTIBOOT_INFO_BOOTDEV 0x00000002
|
||||
/** is the command-line defined? */
|
||||
#define MULTIBOOT_INFO_CMDLINE 0x00000004
|
||||
/** are there modules to do something with? */
|
||||
#define MULTIBOOT_INFO_MODS 0x00000008
|
||||
|
||||
/** These next two are mutually exclusive */
|
||||
|
||||
/** is there a symbol table loaded? */
|
||||
#define MULTIBOOT_INFO_AOUT_SYMS 0x00000010
|
||||
/** is there an ELF section header table? */
|
||||
#define MULTIBOOT_INFO_ELF_SHDR 0X00000020
|
||||
|
||||
/** is there a full memory map? */
|
||||
#define MULTIBOOT_INFO_MEM_MAP 0x00000040
|
||||
|
||||
/** Is there drive info? */
|
||||
#define MULTIBOOT_INFO_DRIVE_INFO 0x00000080
|
||||
|
||||
/** Is there a config table? */
|
||||
#define MULTIBOOT_INFO_CONFIG_TABLE 0x00000100
|
||||
|
||||
/** Is there a boot loader name? */
|
||||
#define MULTIBOOT_INFO_BOOT_LOADER_NAME 0x00000200
|
||||
|
||||
/** Is there a APM table? */
|
||||
#define MULTIBOOT_INFO_APM_TABLE 0x00000400
|
||||
|
||||
/** Is there video information? */
|
||||
#define MULTIBOOT_INFO_VIDEO_INFO 0x00000800
|
||||
|
||||
#ifndef ASM_FILE
|
||||
|
||||
typedef unsigned short multiboot_uint16_t;
|
||||
typedef unsigned int multiboot_uint32_t;
|
||||
typedef unsigned long long multiboot_uint64_t;
|
||||
|
||||
typedef struct multiboot_header {
|
||||
/** Must be MULTIBOOT_MAGIC - see above. */
|
||||
multiboot_uint32_t magic;
|
||||
|
||||
/** Feature flags. */
|
||||
multiboot_uint32_t flags;
|
||||
|
||||
/** The above fields plus this one must equal 0 mod 2^32. */
|
||||
multiboot_uint32_t checksum;
|
||||
|
||||
/** These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */
|
||||
multiboot_uint32_t header_addr;
|
||||
multiboot_uint32_t load_addr;
|
||||
multiboot_uint32_t load_end_addr;
|
||||
multiboot_uint32_t bss_end_addr;
|
||||
multiboot_uint32_t entry_addr;
|
||||
|
||||
/** These are only valid if MULTIBOOT_VIDEO_MODE is set. */
|
||||
multiboot_uint32_t mode_type;
|
||||
multiboot_uint32_t width;
|
||||
multiboot_uint32_t height;
|
||||
multiboot_uint32_t depth;
|
||||
} multiboot_header_t;
|
||||
|
||||
/** The symbol table for a.out. */
|
||||
struct multiboot_aout_symbol_table {
|
||||
multiboot_uint32_t tabsize;
|
||||
multiboot_uint32_t strsize;
|
||||
multiboot_uint32_t addr;
|
||||
multiboot_uint32_t reserved;
|
||||
};
|
||||
typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t;
|
||||
|
||||
/** The section header table for ELF. */
|
||||
struct multiboot_elf_section_header_table {
|
||||
multiboot_uint32_t num;
|
||||
multiboot_uint32_t size;
|
||||
multiboot_uint32_t addr;
|
||||
multiboot_uint32_t shndx;
|
||||
};
|
||||
typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t;
|
||||
|
||||
struct multiboot_info {
|
||||
/** Multiboot info version number */
|
||||
multiboot_uint32_t flags;
|
||||
|
||||
/** Available memory from BIOS */
|
||||
multiboot_uint32_t mem_lower;
|
||||
multiboot_uint32_t mem_upper;
|
||||
|
||||
/** "root" partition */
|
||||
multiboot_uint32_t boot_device;
|
||||
|
||||
/** Kernel command line */
|
||||
multiboot_uint32_t cmdline;
|
||||
|
||||
/** Boot-Module list */
|
||||
multiboot_uint32_t mods_count;
|
||||
multiboot_uint32_t mods_addr;
|
||||
|
||||
union {
|
||||
multiboot_aout_symbol_table_t aout_sym;
|
||||
multiboot_elf_section_header_table_t elf_sec;
|
||||
} u;
|
||||
|
||||
/** Memory Mapping buffer */
|
||||
multiboot_uint32_t mmap_length;
|
||||
multiboot_uint32_t mmap_addr;
|
||||
|
||||
/** Drive Info buffer */
|
||||
multiboot_uint32_t drives_length;
|
||||
multiboot_uint32_t drives_addr;
|
||||
|
||||
/** ROM configuration table */
|
||||
multiboot_uint32_t config_table;
|
||||
|
||||
/** Boot Loader Name */
|
||||
multiboot_uint32_t boot_loader_name;
|
||||
|
||||
/** APM table */
|
||||
multiboot_uint32_t apm_table;
|
||||
|
||||
/** Video */
|
||||
multiboot_uint32_t vbe_control_info;
|
||||
multiboot_uint32_t vbe_mode_info;
|
||||
multiboot_uint16_t vbe_mode;
|
||||
multiboot_uint16_t vbe_interface_seg;
|
||||
multiboot_uint16_t vbe_interface_off;
|
||||
multiboot_uint16_t vbe_interface_len;
|
||||
};
|
||||
typedef struct multiboot_info multiboot_info_t;
|
||||
|
||||
struct multiboot_mmap_entry {
|
||||
multiboot_uint32_t size;
|
||||
multiboot_uint64_t addr;
|
||||
multiboot_uint64_t len;
|
||||
#define MULTIBOOT_MEMORY_AVAILABLE 1
|
||||
#define MULTIBOOT_MEMORY_RESERVED 2
|
||||
multiboot_uint32_t type;
|
||||
} __attribute__((packed));
|
||||
typedef struct multiboot_mmap_entry multiboot_memory_map_t;
|
||||
|
||||
struct multiboot_mod_list {
|
||||
/** the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */
|
||||
multiboot_uint32_t mod_start;
|
||||
multiboot_uint32_t mod_end;
|
||||
|
||||
/** Module command line */
|
||||
multiboot_uint32_t cmdline;
|
||||
|
||||
/** padding to take it to 16 bytes (must be zero) */
|
||||
multiboot_uint32_t pad;
|
||||
};
|
||||
typedef struct multiboot_mod_list multiboot_module_t;
|
||||
|
||||
#endif /** ! ASM_FILE */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* MULTIBOOT_H */
|
||||
/** @} */
|
||||
@ -1,117 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 René Kijewski <rene.kijewski@fu-berlin.de>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* The bootloader will look at this image and start execution at the symbol
|
||||
designated as the entry point. */
|
||||
ENTRY(_start)
|
||||
|
||||
/* Tell where the various sections of the object files will be put in the final
|
||||
kernel image. */
|
||||
SECTIONS
|
||||
{
|
||||
/* Begin putting sections at 1 MiB, a conventional place for kernels to be
|
||||
loaded at by the bootloader. */
|
||||
. = 1M;
|
||||
_kernel_memory_start = .;
|
||||
|
||||
/* First put the multiboot header, as it is required to be put very early
|
||||
early in the image or the bootloader won't recognize the file format.
|
||||
Next we'll put the .text section. */
|
||||
._multiboot_header :
|
||||
{
|
||||
KEEP(*(._multiboot_header))
|
||||
}
|
||||
|
||||
.note.gnu.build-id :
|
||||
{
|
||||
*(.note.gnu.build-id)
|
||||
}
|
||||
|
||||
.text :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_section_text_start = .;
|
||||
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
|
||||
*(.gnu.linkonce.t)
|
||||
*(.gnu.linkonce.t.*)
|
||||
|
||||
_section_text_end = .;
|
||||
}
|
||||
. = ALIGN(0x1000);
|
||||
|
||||
/* Read-only data. */
|
||||
.rodata :
|
||||
{
|
||||
_section_rodata_start = .;
|
||||
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
|
||||
*(.gnu.linkonce.r)
|
||||
*(.gnu.linkonce.r.*)
|
||||
|
||||
_section_rodata_end = .;
|
||||
}
|
||||
. = ALIGN(0x1000);
|
||||
|
||||
/* Read-write data (initialized) */
|
||||
.data :
|
||||
{
|
||||
_section_data_start = .;
|
||||
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
|
||||
*(.gnu.linkonce.d)
|
||||
*(.gnu.linkonce.d.*)
|
||||
|
||||
. = ALIGN(4);
|
||||
_section_data_end = .;
|
||||
/* no need to align between .data and .bss */
|
||||
}
|
||||
|
||||
/* Read-write data (uninitialized) and stack */
|
||||
.bss :
|
||||
{
|
||||
_section_bss_start = .;
|
||||
|
||||
*(COMMON)
|
||||
*(COMMON.*)
|
||||
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
|
||||
*(.gnu.linkonce.b)
|
||||
*(.gnu.linkonce.b.*)
|
||||
|
||||
_section_bss_end = .;
|
||||
}
|
||||
|
||||
. = ALIGN(0x1000);
|
||||
_kernel_memory_end = .;
|
||||
|
||||
. += 0x1000;
|
||||
. = ALIGN(0x10000);
|
||||
_heap_start = .;
|
||||
|
||||
/* The compiler may produce other sections, by default it will put them in
|
||||
a segment with the same name. Simply add stuff here as needed. */
|
||||
}
|
||||
@ -1,144 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 René Kijewski <rene.kijewski@fu-berlin.de>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup boards_x86-multiboot
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Startup code to be loaded by multiboot enabled bootloaders.
|
||||
*
|
||||
* @author René Kijewski <rene.kijewski@fu-berlin.de>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include <cpu.h>
|
||||
#include <multiboot.h>
|
||||
#include <x86_kernel_memory.h>
|
||||
#include <x86_memory.h>
|
||||
#include <x86_reboot.h>
|
||||
#include <x86_videoram.h>
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifndef BREAK_STARTUP
|
||||
# define BREAK_STARTUP (0)
|
||||
#endif
|
||||
|
||||
static void __attribute__((noreturn)) startup(uint32_t multiboot_magic, const multiboot_info_t *multiboot_info);
|
||||
void __attribute__((noreturn, optimize("Os", "omit-frame-pointer"), no_instrument_function)) _start(void);
|
||||
|
||||
extern const multiboot_header_t multiboot_header __attribute__((section("._multiboot_header")));
|
||||
const multiboot_header_t multiboot_header = {
|
||||
.magic = MULTIBOOT_HEADER_MAGIC,
|
||||
.flags = MULTIBOOT_HEADER_FLAGS,
|
||||
.checksum = (-(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)),
|
||||
.header_addr = (uintptr_t) &multiboot_header,
|
||||
.load_addr = (uintptr_t) &_kernel_memory_start,
|
||||
.load_end_addr = (uintptr_t) &_section_data_end,
|
||||
.bss_end_addr = (uintptr_t) &_section_bss_end,
|
||||
.entry_addr = (uintptr_t) &_start,
|
||||
};
|
||||
|
||||
void __attribute__((noreturn, optimize("Os", "omit-frame-pointer"), no_instrument_function)) _start(void)
|
||||
{
|
||||
__asm__ volatile ("xor %ebp, %ebp");
|
||||
__asm__ volatile ("push %ebp");
|
||||
__asm__ volatile ("push %ebx");
|
||||
__asm__ volatile ("push %eax");
|
||||
__asm__ volatile ("push %ebp");
|
||||
__asm__ volatile ("jmp *%0" :: "r"(&startup));
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
static const multiboot_info_t *multiboot_info;
|
||||
|
||||
bool x86_get_memory_region(uint64_t *start, uint64_t *len, unsigned long *pos)
|
||||
{
|
||||
while (1) {
|
||||
if (*pos >= multiboot_info->mmap_length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const multiboot_memory_map_t *mmap = (void *)(multiboot_info->mmap_addr + *pos);
|
||||
*pos += mmap->size + 4;
|
||||
|
||||
*start = mmap->addr;
|
||||
*len = mmap->len;
|
||||
|
||||
uint64_t end = *start + *len;
|
||||
printf(" %08lx%08lx - %08lx%08lx ", (long) (*start >> 32), (long) *start, (long) (end >> 32), (long) end);
|
||||
|
||||
if (mmap->type != 1) {
|
||||
// not free (ignore reclaimable RAM)
|
||||
const char *msg;
|
||||
switch (mmap->type) {
|
||||
case 2: msg = "reseved"; break;
|
||||
case 3: msg = "ACPI [reclaimable]"; break;
|
||||
case 4: msg = "ACPI [NVS]"; break;
|
||||
case 5: msg = "bad memory"; break;
|
||||
default: msg = "unknown";
|
||||
}
|
||||
printf("(unusable: %s)\r\n", msg);
|
||||
}
|
||||
else {
|
||||
puts("(usable)");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void have_a_break(void)
|
||||
{
|
||||
volatile bool cnt = false;
|
||||
while (!cnt) {
|
||||
__asm__ volatile ("pause");
|
||||
}
|
||||
}
|
||||
|
||||
static void __attribute__((noreturn)) startup(uint32_t multiboot_magic, const multiboot_info_t *multiboot_info_)
|
||||
{
|
||||
x86_init_gdt(); /* load GDT early */
|
||||
x86_load_empty_idt(); /* just a safeguard to cause a tripple fault, not really needed */
|
||||
|
||||
#if BREAK_STARTUP
|
||||
have_a_break();
|
||||
#else
|
||||
(void) have_a_break;
|
||||
#endif
|
||||
|
||||
memset(&_section_bss_start, 0, &_section_bss_end - &_section_bss_start + 1);
|
||||
|
||||
videoram_puts(" Booting RIOT \r\n");
|
||||
if (multiboot_magic != MULTIBOOT_BOOTLOADER_MAGIC) {
|
||||
videoram_puts(" Multiboot magic is wrong \r\n");
|
||||
x86_hlt();
|
||||
}
|
||||
else if (!(multiboot_info->flags && MULTIBOOT_INFO_MEM_MAP)) {
|
||||
videoram_puts(" Multiboot is lacking memory map information \r\n");
|
||||
x86_hlt();
|
||||
}
|
||||
|
||||
multiboot_info = multiboot_info_;
|
||||
x86_startup();
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user