English 中文(简体)
直接接触铁道——复印机
原标题:Direct access to linux framebuffer - copyarea
  • 时间:2009-09-12 21:19:17
  •  标签:

我想很快地转而绕过一个嵌入式轴心应用中的 frame子。 我发现,<代码>cfb_copyarea可能有用。 但是,我找不到任何电离机,可以把这一功能用在“dev/fb”装置上。 还是可以直接称为这一职能?

最佳回答

我在经过几天的研究后知道,援引这一职能没有任何理由。 我不得不在纸浆模块中更喜欢用自己的系统书写。 或复制计算法,使用方言,在用户空间使用该计算法。

问题回答

这里是一部关于 in和关闭弗拉梅布的法典。

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 &lt; 0) {
        printf("Unable to open %s.
", FB_NAME);
        return 1;
    }
    /* Do Ioctl. Retrieve fixed screen info. */
    if (ioctl(m_FBFD, FBIOGET_FSCREENINFO, &m_FixInfo) &lt; 0) {
        printf("get fixed screen info failed: %s
",
              strerror(errno));
        close(m_FBFD);
        return 1;
    }
    /* Do Ioctl. Get the variable screen info. */
    if (ioctl(m_FBFD, FBIOGET_VSCREENINFO, &m_VarInfo) &lt; 0) {
        printf("Unable to retrieve variable screen info: %s
",
              strerror(errno));
        close(m_FBFD);
        return 1;
    }

    /* Calculate the size to mmap */
    iFrameBufferSize = m_FixInfo.line_length * m_VarInfo.yres;
    printf("Line length %d
", 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:
");
        close(m_FBFD);
        return 1;
    }
    return 0;
}

void CloseFB()
{
    munmap(m_FrameBuffer,0);
    close(m_FBFD);
}

};

请注意,该守则并不完全正确,尽管它将在很多气球装置上工作,但在某些装置上却取得了胜利。 a. 计算设计面积,不这样做:

iFrameBufferSize = m_FixInfo.line_length * m_VarInfo.yres;

相反的:

iFrameBufferSize = m_FixInfo.smem_len;

你们的法典将更加可行。





相关问题
热门标签