直接访问linux framebuffer – copyarea

我想在嵌入式 Linux应用程序中快速移动一个矩形到帧缓冲区.我发现cfb_copyarea函数可能很有用.但我无法在/ dev / fb设备上找到任何ioctl来调用函数.或者可以直接调用函数吗?

解决方法

这是一个初始化和关闭FrameBuffer的代码
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);
}

};

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...