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 doc、Framebuffer Doc dir .
Smart Humons - Internals、Deferred I/O ドキュメント、またはメモリ マップされたビデオをエミュレートする方法。
0xB8000と0xB0000は物理アドレスであるため、直接使用することはできません。あなたはユーザー空間にいて、カーネルドライバーを書いていないと思います。Linux では、通常 MMU を有効にします。つまり、仮想メモリがあります。すべてのプロセス/ユーザーがビデオ メモリにアクセスできるわけではありません。ただし、許可されている場合はmmap
、フレームバッファデバイスをアドレス空間に追加できます。特定のアドレスを要求するのではなく、カーネルにアドレスを提供させるのが最善です。
または、プロ が行う方法をご覧ください。
男:mmap
編集: rootでない場合でも、Unix アクセス許可を(または任意のデバイスで) 使用して、読み取り/書き込みのグループ アクセス許可を与えるか、現在のtty/dev/fb0
アクセス許可のユーザーに何らかのログインプロセスを使用することができます。