int fb_init(st_fb_info *fb_info) { struct fb_var_screeninfo vinfo; /* Open video memory */ if ((fb_info->fd = open("/dev/fb0", O_RDWR)) < 0) { printf("open fb error/n"); return -1; } /* Get variable display parameters */ if (ioctl(fb_info->fd, FBIOGET_VSCREENINFO, &vinfo)) { printf("Bad vscreeninfo ioctl/n"); return -2; } fb_info->width = vinfo.xres; fb_info->height = vinfo.yres; fb_info->bytes_per_pixel = vinfo.bits_per_pixel/8; fb_info->fbsize = fb_info->width * fb_info->height * fb_info->bytes_per_pixel; /* Map video memory */ if ((fb_info->fbbuf = mmap(0, fb_info->fbsize, PROT_READ | PROT_WRITE, MAP_SHARED, fb_info->fd, 0)) == (void *) -1) { return -3; } return 0; }
时间: 2024-04-26 18:25:04 浏览: 148
void_NVIC_Init--详细分析
4星 · 用户满意度95%
这是一个用于初始化 Linux framebuffer 的函数。Framebuffer 是指显卡中的一个内存区域,用于存储屏幕上的像素数据。程序首先打开 /dev/fb0 设备文件,然后通过 ioctl() 函数获取显卡的变量参数,如屏幕分辨率、像素位数等。接着,程序使用 mmap() 函数将显存映射到进程地址空间中的 fb_info->fbbuf 指针所指向的内存区域,使得程序可以直接访问显存中的像素数据。最后,函数返回 0 表示初始化成功,否则返回负数表示出现了错误。
阅读全文