We port Xhyp on your hardware, we port your
OS or application on Xhyp
read more
Howto: Running X-hyp binaries demo.
...read more
Howto: Run your own RTOS in X-hyp.
...read more
Howto use the X-hyp configurator.
...read more
FAQ: Frequently Asked Questions on Licensing.
...read more
Howto use the X-Hyp framework to port an RTOS to X-Hyp.
...read more
Source code example: a hello world domain for X-Hyp.
...read more
Binary testing: using X-Hyp ARINC like scheduling.
...read more
IST Project: OCERA, Open components for realtime applications.
...read more
|
A realtime hypervisor for embedded systems on ARM-9 and Cortex ready with paravirtualized FreeRTOS. |
CROSS_COMPILE := arm-linux-gnueabihf-
CROSS_COMPILE := arm-none-linux-gnueabi-
CC := $(CROSS_COMPILE)gcc
LDSCRIPT := xhyp.ld
LOADADDR := 0x02100000
INCLUDES := -I../../include -I include -nostdinc
WARNINGS := -Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wno-unused-parameter
CFLAGS := -fno-common -ffixed-r8 -msoft-float -D__KERNEL__ -DTEXT_BASE=${LD_ADDR} -fno-builtin -ffreestanding -pipe -DCONFIG_ARM -D__ARM__ -marm -mabi=aapcs-linux -mno-thumb-interwork -march=armv5te -Wall -Wstrict-prototypes -fno-stack-protector -Wall -Werror $(INCLUDES)
AFLAGS := -D__ASSEMBLY__ -Os -fno-common -ffixed-r8 -msoft-float -D__KERNEL__ -DTEXT_BASE=${LD_ADDR} -fno-builtin -ffreestanding -pipe -DCONFIG_ARM -D__ARM__ -marm -mabi=aapcs-linux -mno-thumb-interwork -march=armv5te $(INCLUDES)
LDFLAGS := -Bstatic -T $(LDSCRIPT) -nostartfiles -nostdlib
LIB := stdlib.c
LIB_OBJ := $(LIB:.c=.o)
OBJS := start.o xhyp.o main.o _udivsi3.o $(LIB_OBJ)
all: xhyp_hello
start.o: start.S
$(CC) -c $(AFLAGS) start.S
xhyp.o: xhyp.S
$(CC) -c $(AFLAGS) xhyp.S
xhyp_hello: $(OBJS)
$(CC) $(LDFLAGS) $(OBJS) -o xhyp_hello
clean:
rm -f $(OBJS)
rm -f xhyp_hello
MEMORY
{
ram : ORIGIN = 0x02100000, LENGTH = 0x00700000
}
__stack_end__ = 0x02800000 - 0x10;
SECTIONS
{
. = 0;
startup : { *(.startup)} >ram
prog :
{
*(.text)
*(.rodata)
*(.rodata*)
*(.glue_7)
*(.glue_7t)
*(.plt)
} >ram
__end_of_text__ = .;
.data :
{
__data_beg__ = .;
__data_beg_src__ = __end_of_text__;
*(.data)
__data_end__ = .;
} >ram
.bss :
{
__bss_beg__ = .;
*(.bss)
} >ram
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections. */
. = ALIGN(32 / 8);
_end = .;
_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;
PROVIDE (end = .);
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.note.gnu.build-id) }
}
/* * start.S * * Author: Pierre Morel* * $LICENSE: * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ .text .globl _start _start: /* setup stack */ ldr sp, =__stack_end__ /* Setup initial call frame */ mov lr, #4 mov r12, sp stmfd sp!, {r11-r12, lr-pc} sub r11, r12, #0x00000004 /* Jump to main entry point */ mov r0, #0 bl main do_hang: b do_hang
/* * very simple domain code * */ #include.globl _hyp_console _hyp_console: swi #_HYP_console mov pc, lr .globl _hyp_get_cp15 _hyp_get_cp15: swi #_HYP_cpuctrl mov pc, lr .globl _hyp_exit _hyp_exit: swi #_HYP_exit mov pc, lr .globl _hyp_syscall_request _hyp_syscall_request: swi #_HYP_syscall_request mov pc, lr .globl _hyp_syscall_return _hyp_syscall_return: swi #_HYP_syscall_return mov pc, lr .globl _hyp_irq_request _hyp_irq_request: swi #_HYP_irq_request mov pc, lr .globl _hyp_irq_enable _hyp_irq_enable: swi #_HYP_irq_enable mov pc, lr .globl _hyp_irq_disable _hyp_irq_disable: swi #_HYP_irq_disable mov pc, lr .globl _hyp_irq_return _hyp_irq_return: swi #_HYP_irq_return .globl _hyp_syscall _hyp_syscall: swi #_HYP_syscall .globl _hyp_pgfault_request _hyp_pgfault_request: swi #_HYP_pgfault_request .globl _hyp_undef_request _hyp_undef_request: swi #_HYP_undef_request .globl get_cpsr get_cpsr: @ mrs r0, cpsr mov pc, lr .globl _hyp_context_switch _hyp_context_switch: swi #_HYP_switch_task mov pc, lr .globl _hyp_event_send _hyp_event_send: swi #_HYP_event_send mov pc, lr .globl _hyp_io_open _hyp_io_open: swi #_HYP_io_open mov pc, lr .globl _hyp_io_close _hyp_io_close: swi #_HYP_io_close mov pc, lr .globl _hyp_io_read _hyp_io_read: swi #_HYP_io_read mov pc, lr .globl _hyp_io_write _hyp_io_write: swi #_HYP_io_write mov pc, lr .globl _hyp_io_ioctl _hyp_io_ioctl: swi #_HYP_io_ioctl mov pc, lr .space 1024
#include#include void main(void) { _hyp_console("startn", 6); printk("Hello worldn"); _hyp_exit(1); }
Howto use the X-Hyp framework to port an RTOS to X-Hyp.
...read more
Howto use the X-Hyp Assemblor Hypercall API.
...read more
Binary testing: using X-Hyp ARINC like scheduling.
...read more
Howto: Running X-hyp binaries demo.
...read more
Howto: Run your own RTOS in X-hyp.
...read more
Howto use the X-Hyp C hypercall API.
...read more
IST Project: OCERA, Open components for realtime applications.
...read more
Source code example: a hello world domain for X-Hyp.
...read more
Designed and built by M.N.I.S.
Using Bootstrap licensed under Apache V2 and Glyphicons Free licensed under CC BY 3.0.