一个直接读写framebuffer的代码

来源:互联网 发布:科比总决赛得分数据 编辑:程序博客网 时间:2024/06/06 17:54
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/mman.h>int main(int argc, char const *argv[]){int len = 0;unsigned int color = 0;if (argc < 7){printf("Usage:%s fb_file lenght alpha reg green blue\n", argv[0]);printf("exp: %s /dev/fb2 8294400 0xff 0x55 0x66 0x77", argv[0]);return 0;}len = atoi(argv[2]);unsigned int alpha = strtol(argv[3], NULL, 16);unsigned int reg   = strtol(argv[4], NULL, 16);unsigned int green = strtol(argv[5], NULL, 16);unsigned int blue  = strtol(argv[6], NULL, 16);/* ATTENTION: the int will overflow for alpha=0xff, so use unsigend int */color = alpha<<24|reg<<16|green<<8|blue;   int fb = -1;unsigned char* fb_mem;fb = open(argv[1], O_RDWR);if (0 > fb){perror("open()");exit(-1);}fb_mem = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fb, 0);if (fb_mem == MAP_FAILED){perror("mmap()");close(fb);exit(-2);}int i = 0;for (i = 0; i < len/4; ++i) { memcpy((void*)((unsigned int*)fb_mem+i), &color, sizeof(unsigned int)); } int ret = munmap(fb_mem, len);if (ret != 0){perror("munmap");close(fb);exit(-3);}close(fb);return 0;}

原创粉丝点击