SeVirt ™

Make it secure

Mesa Generic Buffer Management (GBM)

Sep 162016


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.


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


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

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,



Android Network 5+ vs 4+

May 142016

Dear Visitor,

By this post we are starting new company blog regarding Android OS specific tricks.

The first theme is related to network configuration.

Android 4+ static network configuration

First of all set the IP for device and GW:

ifconfig DEV [IP] netmask [NETMASK]
route add default gw [GATEWAY] dev DEV

Next DNS settings:

setprop net.eth0.dns1
setprop net.eth0.dns2

Android 5+ specifics

To be able to reach any external network resource you would need:

ip rule add from all lookup main

 Best regards,



Powered by SeVirt