私はこのLinuxフレームバッファを初めて使用するので、フレームバッファに線グラフを描画するように誰かに案内してもらいます。そして、私はターボcでグラフを描くためのコードを持っていますが、今はLinuxです。だから私を助けてください。
ありがとう、ラフル
私はこのLinuxフレームバッファを初めて使用するので、フレームバッファに線グラフを描画するように誰かに案内してもらいます。そして、私はターボcでグラフを描くためのコードを持っていますが、今はLinuxです。だから私を助けてください。
ありがとう、ラフル
(例)open()
の右側のファイルで使用してから、を使用してメモリにマップします。マンページは、それらの使用方法がわからない場合に、これらのシステムコールに役立ちます。/dev
/dev/fb0
mmap()
ioctl()
次に、のいくつかのsにいくつかの構造と定数があり<linux/fb.h>
ます。多くのカーネルヘッダーと同様に、ファイルを参照するだけで多くのことを学ぶことができます。
特に興味深いのは、 。FBIOGET_VSCREENINFO
を使用したioctlstruct fb_var_screeninfo
です。これにはxres
、yres
(解像度)とが含まれていることに注意してくださいbits_per_pixel
。次に、とのFBIOGET_FSCREENINFO
ようstruct fb_fix_screeninfo
な詳細情報がtype
ありline_length
ます。
したがって、(x、y)のピクセルは。にある可能性がありますmmap_base_address + x * bits_per_pixel/8 + y * line_length
。ピクセルの正確な形式は、ioctlを介して取得する構造によって異なります。それらの読み取り/書き込み方法を決定するのはあなたの仕事です。
これを使ってからしばらく経ちましたので、詳細については少しぼんやりしています。
これは、それがどのように行われるかを説明するための簡単で汚いコードサンプルです...私はこれをテストしていません。
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
struct fb_var_screeninfo screen_info;
struct fb_fix_screeninfo fixed_info;
char *buffer = NULL;
size_t buflen;
int fd = -1;
int r = 1;
fd = open("/dev/fb0", O_RDWR);
if (fd >= 0)
{
if (!ioctl(fd, FBIOGET_VSCREENINFO, &screen_info) &&
!ioctl(fd, FBIOGET_FSCREENINFO, &fixed_info))
{
buflen = screen_info.yres_virtual * fixed_info.line_length;
buffer = mmap(NULL,
buflen,
PROT_READ|PROT_WRITE,
MAP_SHARED,
fd,
0);
if (buffer != MAP_FAILED)
{
/*
* TODO: something interesting here.
* "buffer" now points to screen pixels.
* Each individual pixel might be at:
* buffer + x * screen_info.bits_per_pixel/8
* + y * fixed_info.line_length
* Then you can write pixels at locations such as that.
*/
r = 0; /* Indicate success */
}
else
{
perror("mmap");
}
}
else
{
perror("ioctl");
}
}
else
{
perror("open");
}
/*
* Clean up
*/
if (buffer && buffer != MAP_FAILED)
munmap(buffer, buflen);
if (fd >= 0)
close(fd);
return r;
}
asveikauの答えの代わりに、 DirectFBを使用することもできます。これにより、作業が大幅に簡素化される可能性があります。