像1989年一样生活
#include <linux/fb.h>
#define DEV_MEM "/dev/fb0"
/* Screen parameters (probably via ioctl() and /sys. */
#define YRES 240
#define XRES 320
#define BYTES_PER_PIXEL (sizeof(unsigned short)) /* 16 bit pixels. */
#define MAP_SIZE XRES*YRES*BYTES_PER_PIXEL
unsigned short *map_lbase;
if((fd = open(DEV_MEM, O_RDWR | O_SYNC)) == -1) {
fprintf(stderr, "cannot open %s - are you root?\n", DEV_MEM);
exit(1);
}
// Map that page.
map_lbase = (unsigned short *)mmap(NULL, MAP_SIZE,
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if((long)map_lbase == -1) {
perror("cannot mmap");
exit(1);
}
Humons- Framebuffer API 文档,Framebuffer Doc 目录。
Smart Humons -内部结构、延迟 I/O 文档或如何模拟内存映射视频。
您不能直接使用0xB8000和0xB0000,因为它们是物理地址。我假设您在用户空间中并且没有编写内核驱动程序。在 Linux 下,我们通常启用 MMU;换句话说,我们有虚拟内存。并非所有进程/用户都可以访问视频内存。但是,如果您被允许,您可以mmap
将帧缓冲设备添加到您的地址空间。最好让内核给你一个地址,而不是请求一个特定的地址。
或者看看专业人士是怎么 做的。
男:mmap
编辑:如果您不是root,您仍然可以在/dev/fb0
(或任何设备)上使用 Unix 权限来授予组读/写权限,或者使用某种登录过程来授予用户当前tty权限。