#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;
}
一个直接读写framebuffer的代码
最新推荐文章于 2023-09-14 04:00:20 发布