mmap on /dev/fd0 on pc686 BSP not working at all.

Karel Gardas karel.gardas at
Sun Sep 20 20:43:19 UTC 2020


I'm attempting to get rtems-example/lvgl/hello working on pc686 BSP. I'm
using VESA framebuffer which is default on pc686, although I needed to
do few fixes here and there to ensure littlevgl library compiles well.
All patches here

Now, everthing is compiled and VESA fb is well initialized -- or seems
so. Now, vgl library tries to use that fb (/dev/fb0) and basically tries
to mmap it for its own use. The code looks:

void fbdev_init(void)
    // Open the file for reading and writing
    fbfd = open(FBDEV_PATH, O_RDWR);
    if(fbfd == -1) {
        perror("Error: cannot open framebuffer device");
    printf("The framebuffer device was opened successfully.\n");
    // Map the device to memory
    fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE,
MAP_SHARED, fbfd, 0);
    if((intptr_t)fbp == -1) {
        perror("Error: failed to map framebuffer device to memory");
    memset(fbp, 0, screensize);

    printf("The framebuffer device was mapped to memory successfully.\n");

The mmap above fails. Screensize is realistic and good looking number.

While debugging this mmap I see it fails on the call to function on line

    err = (*iop->pathinfo.handlers->mmap_h)(
        iop, &mapping->addr, len, prot, off );

it returns -1 and hence mmap failure since code below looks:

    if ( err != 0 ) {
      mmap_mappings_lock_release( );
      free( mapping );
      return MAP_FAILED;

when I try to step into the problematic function above, I end up  in
default_mmap.c:31 on:

rtems_set_errno_and_return_minus_one( ENOTSUP );

and as the function claims it really returns -1 to me.

Now, my obvious question is: how to make VESA fb mmappable? It looks
like the same library is working fine on BBB while using FreeBSD BBB
framebuffer driver, so there is probably some way how to convince RTEMS
mmap to work with fb0.

Any idea how to proceed with this is highly appreciated.


More information about the users mailing list