我想在嵌入式linux應用程序中通過framebuffer快速移動一個矩形。我發現功能cfb_copyarea
可能會有用。但是我無法通過/ dev/fb設備找到任何調用該函數的ioctl。或者可以直接調用這個函數?直接訪問linux framebuffer - copyarea
6
A
回答
1
據我知道後研究了幾天,有一個調用這個函數沒有ioctl。我必須在內核模塊中編寫我自己的系統調用。或者從內核源複製算法,並通過nmaped內存在用戶空間中使用它。
7
這裏是初始化代碼並關閉幀緩衝
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 framebuffer?
- 2. 如何使用混亂直接渲染到linux framebuffer?
- 3. 如何使用OpenCL直接寫入到零拷貝的linux framebuffer?
- 4. Linux framebuffer viewer
- 5. 直接HDFS訪問
- 6. 直接URL訪問
- 7. 直接訪問SQLite3?
- 8. 直接訪問OSX
- 9. 從直接訪問Wordpress訪問功能
- 10. Linux:從C程序直接訪問硬盤(不含任何FS)
- 11. 在Windows/Linux下直接訪問內存設備
- 12. 直接從SPListItemCollection訪問SPListItem
- 13. 直接內存訪問
- 14. 直接訪問數據庫
- 15. 直接訪問硬盤?
- 16. 直接訪問硬盤
- 17. 多路訪問直接ByteBuffer
- 18. 直接從Android訪問MySQL
- 19. 訪問鏈接服務器直接
- 20. 直接訪問數據庫與間接訪問數據庫
- 21. Framebuffer對象問題
- 22. 訪問Linux上
- 23. Linux Framebuffer正確設置分辨率
- 24. 如何直接在opengl es2.0中渲染framebuffer?
- 25. 如何從Mongoid直接訪問MongoDB API?
- 26. 通過Twitter API訪問直接消息
- 27. Laravel阻止直接訪問ajax路由
- 28. iPhone Sdk可以直接訪問SQL Server
- 29. 直接訪問iPad照片庫
- 30. 國防部改寫直接.php訪問
比你的答案。但這不是我要求的。我不想將像素自己移動到nmaped內存中 - 我想爲此使用內核函數cfb_copyarea。 – danatel 2009-09-13 15:02:36
我喜歡這個答案。我在這裏創建了一個基於此的測試程序:https://gist.github.com/1482697 – 2011-12-15 20:23:30
@RafalRusin,很高興,它幫助你。 – SunnyShah 2011-12-18 08:09:22