組み込みLinuxアプリケーションで、フレームバッファ上で非常に速く矩形を移動したいと考えています。私は、関数cfb_copyarea
が役に立つかもしれないことを発見しました。しかし、関数を呼び出すために/ dev/fbデバイス上にioctlを見つけることはできません。または、この関数を直接呼び出すことはできますか?ここでlinuxフレームバッファへの直接アクセス - コピーエリア
6
A
答えて
1
である限り、私は研究の数日後に知っているように、この関数を呼び出すためのioctlはありません。私は自分のシステムコールを優先的にカーネルモジュールに書く必要があります。あるいは、カーネルソースからアルゴリズムをコピーし、nmapされたメモリを介してユーザ空間で使用します。
7
はinitと近いフレームバッファへのコード
class CFrameBuffer
{
void* m_FrameBuffer;
struct fb_fix_screeninfo m_FixInfo;
struct fb_var_screeninfo m_VarInfo;
int m_FBFD;
int InitFB()
{
int iFrameBufferSize;
/* Open the framebuffer device in read write */
m_FBFD = open(FB_NAME, O_RDWR);
if (m_FBFD < 0) {
printf("Unable to open %s.\n", FB_NAME);
return 1;
}
/* Do Ioctl. Retrieve fixed screen info. */
if (ioctl(m_FBFD, FBIOGET_FSCREENINFO, &m_FixInfo) < 0) {
printf("get fixed screen info failed: %s\n",
strerror(errno));
close(m_FBFD);
return 1;
}
/* Do Ioctl. Get the variable screen info. */
if (ioctl(m_FBFD, FBIOGET_VSCREENINFO, &m_VarInfo) < 0) {
printf("Unable to retrieve variable screen info: %s\n",
strerror(errno));
close(m_FBFD);
return 1;
}
/* Calculate the size to mmap */
iFrameBufferSize = m_FixInfo.line_length * m_VarInfo.yres;
printf("Line length %d\n", m_FixInfo.line_length);
/* Now mmap the framebuffer. */
m_FrameBuffer = mmap(NULL, iFrameBufferSize, PROT_READ | PROT_WRITE,
MAP_SHARED, m_FBFD,0);
if (m_FrameBuffer == NULL) {
printf("mmap failed:\n");
close(m_FBFD);
return 1;
}
return 0;
}
void CloseFB()
{
munmap(m_FrameBuffer,0);
close(m_FBFD);
}
};
2
このコードは、多くのLinuxデバイスでは動作しますが、まったく正しいわけではないことに注意してください。 、代わりに
iFrameBufferSize = m_FixInfo.line_length * m_VarInfo.yres;
この操作を行います:フレームバッファのサイズを計算するには、これをしない
iFrameBufferSize = m_FixInfo.smem_len;
をそして、あなたのコードの移植になります。
関連する問題
- 1. Linuxのフレームバッファに直接書き込む方法は?
- 2. Herokuへの直接FTPアクセス?
- 3. CreateDIBitmapビットへの直接アクセス
- 4. azureファイルストレージへの直接アクセス
- 5. EF接合テーブルへの直接アクセス
- 6. 直接のByteBufferへの複数のアクセス
- 7. phpファイルへの直接アクセスの防止
- 8. jspページへの直接アクセスの拒否
- 9. オブジェクトのフルストリング表現への直接アクセス
- 10. STLの要素への直接アクセス
- 11. RecyclerViewから直接ViewHolderへのアクセス
- 12. Googleコンテナエンジン、ポッドへの直接アクセス
- 13. スリム3ファイルへの直接アクセス
- 14. C++ ATL COMオブジェクトへの直接アクセス
- 15. フレームバッファへのレンダリングモデル
- 16. Windowsのドライバのフレームバッファに直接書き込む方法
- 17. CのLinuxは、直接
- 18. CvCreateMatND直接アクセス
- 19. ブロックの直接アクセス
- 20. Linuxドライバへのアクセス
- 21. OpenCLを使用してゼロコピーでLinuxのフレームバッファに直接書き込む方法は?
- 22. 任意のMacOSアプリケーション用のフレームバッファへのアクセス
- 23. オブジェクトプロパティに直接アクセス
- 24. CのLinuxのフレームバッファにテキストを描画
- 25. フレームバッファへの書き込み
- 26. JSONオブジェクトのクライアント側のプロパティへの直接アクセス
- 27. Java配列:配列内のコンポーネントへの直接アクセス
- 28. インスタンス変数への直接アクセスとアクセッサメソッドの使用
- 29. AWS S3 - 画像URLへのブロックの直接アクセスが、モバイルAPPは
- 30. Railsコントローラメソッドへの直接URLアクセスの防止
あなたの答えよりも。しかし、これは私が求めたものではありません。私はnmapedメモリで自分自身のピクセルを移動したくないです - 私はこれにカーネル関数cfb_copyareaを使いたいと思います。 – danatel
私はこの答えが好きです。私はここに基づいてテストプログラムを作成しました:https://gist.github.com/1482697 –
@RafalRusin、喜んで、それはあなたを助けました。 – SunnyShah