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

X-HYP

A realtime hypervisor for embedded systems on ARM-9 and Cortex ready with paravirtualized FreeRTOS.

Download free trial »

X-HYP Hello world

The Makefile


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

The linker

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) }
}

The start assembler

/*
* 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

The hypercalls

/*
* 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

The main


#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.