#include #include #include #include #include #include #include #include #include static char filename[] = "/dev/fb0"; int main(int argc, char *argv[]) { struct fb_var_screeninfo screeninfo; int fd = -1; int rc; unsigned char *fbuf; struct stat buf; int row, column; int i; int len; printf("Starting..[%s]\n", filename); fd = open(filename, O_RDWR); if (fd <= 0) { printf("Could not open; err: %d\n", errno); return errno; } if (stat(filename, &buf) != 0) { printf("Could not open; err: %d\n", errno); return errno; } printf("%s: len:%d\n", filename, buf.st_size); rc = ioctl(fd, FBIOGET_VSCREENINFO, &screeninfo); if (rc) { printf("Could not do ioctl. err: %d\n", errno); return errno; } printf("%s: bits/pixel%d\n", filename, screeninfo.bits_per_pixel); len = screeninfo.xres * screeninfo.yres; fbuf = mmap(0, len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0); if (fbuf == MAP_FAILED) { printf("Could not map: error: %d\n", errno); return errno; } if (argc > 1) { int outfd; outfd = open(argv[1], O_RDWR|O_CREAT, 0644); if (outfd != -1) { write(outfd, fbuf, len); close(outfd); } } printf("(%lx): Writting .. [%d:%d]\n", fbuf, screeninfo.xres,screeninfo.yres); i = 0; for (i = 0; i < len; i++) { fbuf[i] = (i % 255); } printf("Done!\n"); if (munmap(fbuf, len)) { printf("Could not unmap: %d\n", errno); return errno; } close(fd); return 0; }