SeVirt ™

Make it secure

V8 introduction

Mar 222021

Dear Visitor,

Today I would like to introduce a new product called simply V8.

It is static Type 1 hypervisor for ARM64.

It relies on five pillars:

  1. Simplicity, namely core hypervisor code is below 8K LOC
  2. Predictability, all configuration is absolutely static and done at bootable image bind time
  3. Robustness, as the code follows the best coding practices and industry standards, V8 gives high resilience to handle potential error conditions
  4. Safety and security, coming from the architecture and product development lifecycle. All potential safety and security treats are transparently addressed in the design
  5. High performance, as a consequence of the pillars stated above, the V8 code gives very high boot performance and low operation expenses

Further information will be available soon.

Best regards,

Alex

Mesa Generic Buffer Management (GBM)

Sep 162016

Introduction

GBM is an minimalist API which provides a mechanism for allocating buffers for graphics rendering tied to Mesa. GBM is intended to be used as a native platform for EGL on drm. The handle it creates can be used to initialize EGL and to create render target buffers.

Traits

EGL/GBM does not support Pbuffers and Pixmaps.

Off-screen surface should be created by invocation of eglCreateWindowSurface and it would be always off-screen since GBM does not provide window management.

If you want to move it to the display you would need to use kernel KMS API.

Basic code

There is a simple example of application using DRM, GBM and EGL for initialization and cleanup of graphics state.

#include <stdlib.h>
#include <assert.h>

#include <fcntl.h>
#include <unistd.h>

#include <EGL/egl.h>
#include <EGL/eglext.h>

#include <gbm.h>

int main()
{
    assert( eglBindAPI( EGL_OPENGL_API ) == EGL_TRUE );

    int fd = open("/dev/dri/card0", O_RDWR);
    struct gbm_device * gbm = gbm_create_device( fd );
struct gbm_surface * gbm_surf = gbm_surface_create( gbm, 256, 256, GBM_FORMAT_XRGB8888, GBM_BO_USE_RENDERING); EGLDisplay dpy = eglGetPlatformDisplayEXT( EGL_PLATFORM_GBM_MESA, gbm, NULL ); eglInitialize( dpy , NULL , NULL ); EGLConfig config; EGLint n_of_configs; assert( eglGetConfigs( dpy , &config , 1 , &n_of_configs ) == EGL_TRUE ); EGLSurface srf = eglCreatePlatformWindowSurfaceEXT( dpy, config, gbm_surf, NULL ); assert( srf != EGL_NO_SURFACE ); EGLContext ctx = eglCreateContext( dpy , config , EGL_NO_CONTEXT , NULL ); assert( ctx != EGL_NO_CONTEXT ); assert( eglMakeCurrent( dpy , srf , srf , ctx ) == EGL_TRUE ); eglDestroySurface( dpy , srf ); eglDestroyContext( dpy , ctx ); eglTerminate( dpy ); gbm_device_destroy( gbm ); close( fd ); return EXIT_SUCCESS; }

 Reference

  1. EGL_MESA_platform_gbm

How to build Android 5.1 for x86_64

May 142016

Dear Visitor,

This post is intended to sum up basic steps to produce own bootable image for Android 5.1 on x86_64 system.

$ mkdir android-x86
$ cd android-x86
$ repo init -u git://gitscm.sf.net/gitroot/android-x86/manifest -b lollipop-x86
$ repo sync -c

In the end of synchronization you would have Android tree with all necessary packages needed to build Android 5.1.

To prepare build environment you would need to do:

. build/envsetup.sh

Now if you want to construct bootable iso image you would need to run:

make -j4 iso_img TARGET_PRODUCT=android_x86_64

-j4 could be replaced with relevant number of CPUs on your system.

Best regards,

Alex

 

Atom

Powered by SeVirt