Firefly Open Source Community

   Login   |   Register   |
New_Topic
Print Previous Topic Next Topic

frame buffer mmap error

68

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
68

frame buffer mmap error

Posted at 6/18/2019 10:54:27      View:10100 | Replies:5        Print      Only Author   [Copy Link] 1#
Hello.

I am trying to test linux frame buffer on the ubuntu 18.04 installed aio-3399j board.

On the console,

# cat /dev/urandom > /dev/fb0

Testing with this command works fine. (noise displayed on the screen)

However, when I test frame buffer with c code using mmap(), it fails.
(mmap returns -1 (EINVAL))

# ./fb
The framebuffer device was opened successfully.
1280x800, 32bpp
Error: failed to map framebuffer device to memory: Invalid argument


Can anyone help me to solve this problem?


c source code:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>

int main(int argc, char *argv[])
{
        int fbfd = 0;
        struct fb_var_screeninfo vinfo;
        struct fb_fix_screeninfo finfo;
        long int screensize = 0;
        char *fbp = 0;
        int x = 0, y = 0;
        long int location = 0;

        // Open the file for reading and writing
        fbfd = open("/dev/fb0", O_RDWR);
        if (fbfd == -1)
        {
                perror("Error: cannot open framebuffer device");
                exit(1);
        }
        printf("The framebuffer device was opened successfully.\n");

        // Get fixed screen information
        if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1)
        {
                perror("Error reading fixed information");
                exit(2);
        }
        // Get variable screen information
        if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1)
        {
                perror("Error reading variable information");
                exit(3);
        }

        printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);

        // Figure out the size of the screen in bytes
        screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;

        // Map the device to memory
        fbp = (char *) mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);
        if ((int) fbp == -1)
        {
                perror("Error: failed to map framebuffer device to memory");
                exit(4);
        }
        printf("The framebuffer device was mapped to memory successfully.\n");

        x = 300;
        y = 100;        // Where we are going to put the pixel

        // Figure out where in memory to put the pixel
        for (y = 100; y < 300; y++)
                for (x = 100; x < 300; x++)
                {

                        location = (x + vinfo.xoffset) * (vinfo.bits_per_pixel / 8) + (y + vinfo.yoffset) * finfo.line_length;

                        if (vinfo.bits_per_pixel == 32)
                        {
                                *(fbp + location) = 100;        // Some blue
                                *(fbp + location + 1) = 15 + (x - 100) / 2;     // A little green
                                *(fbp + location + 2) = 200 - (y - 100) / 5;    // A lot of red
                                *(fbp + location + 3) = 0;      // No transparency
                        } else
                        {       //assume 16bpp
                                int b = 10;
                                int g = (x - 100) / 6;  // A little green
                                int r = 31 - (y - 100) / 16;    // A lot of red
                                unsigned short int t = r << 11 | g << 5 | b;
                                *((unsigned short int *) (fbp + location)) = t;
                        }

                }
        munmap(fbp, screensize);
        close(fbfd);
        return 0;
}
Reply

Use props Report

1432

Credits

0

Prestige

0

Contribution

vip

Rank: 6Rank: 6

Credits
1432
Posted at 6/18/2019 15:49:57        Only Author  2#
Reply

Use props Report

92

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
92
Posted at 1/19/2026 20:43:59        Only Author  3#
現在IT行业競爭越來越激烈,通過Microsoft AZ-120認證考試可以有效的帮助你在现在这个竞争激烈的IT行业中稳固和提升自己的地位。在我們PDFExamDumps中你可以獲得關Microsoft AZ-120認證考試的培訓工具。我們PDFExamDumps的IT精英團隊會及時為你提供準確以及詳細的關Microsoft AZ-120認證考試的培訓材料。通過我們PDFExamDumps提供的學習材料以及考試練習題和答案,我們PDFExamDumps能確保你第一次參加Microsoft AZ-120认证考试時挑戰成功,而且不用花費大量時間和精力來準備考試。
Reply

Use props Report

96

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
96
Posted at 2/6/2026 13:47:39        Only Author  4#
I gained a ton of value from the article. Free examinations CCAS actual questions questions are shared. Good luck with your exam preparation!
Reply

Use props Report

95

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
95
Posted at 2/16/2026 16:51:46        Only Author  5#
ほぼ100%の通過率は我々のお客様からの最高のプレゼントです。我々は弊社のWGUのManaging-Cloud-Security試験の資料はより多くの夢のある人にWGUのManaging-Cloud-Security試験に合格させると希望します。我々のチームは毎日資料の更新を確認していますから、ご安心ください、あなたの利用しているソフトは最も新しく全面的な資料を含めています。
Reply

Use props Report

91

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
91
Posted at 2/21/2026 21:32:38        Only Author  6#
Truly a brilliant article, I’m so appreciative of your sharing. The 212-89 reliable study questions sheet helped me move up with a promotion and raise. It’s now free for everyone. Best wishes for your career growth!
Reply

Use props Report

You need to log in before you can reply Login | Register

This forum Credits Rules

Quick Reply Back to top Back to list