您的位置:首页 > 其它

嵌入式专题: S5PV210 - s3c-mem设备节点的使用

2014-07-11 11:50 274 查看
/dev/s3c-mem这个设备节点,就是用来提供物理内存的,因为像FIMC这种设备的接口是需要物理地址的。。。反正这个平台就是号称什么硬件都有,但用起来都特别麻烦。

#ifndef _S3C_MEM_H
#define _S3C_MEM_H

#include <stdint.h>
#include <sys/ioctl.h>

#include "s3c_mem.h"

class S3CMem
{
public:
int open();
void close();

int aquire(s3c_mem_alloc* m);
void release(s3c_mem_alloc* m);

// 可能是要求物理地址
int dmacopy(void* dest, void* src, int size);

private:
int m_fd;
};

#endif
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>

#include "S3CMem.h"

int S3CMem::open()
{
m_fd = ::open("/dev/s3c-mem", O_RDWR);
if(m_fd < 0)
{
printf("failed to open s3c-mem !\n");
return -1;
}
return 0;
}

void S3CMem::close()
{
::close(m_fd);
}

int S3CMem::aquire(s3c_mem_alloc* m)
{
m->phy_addr = m->vir_addr = 0;
int ret = ioctl(m_fd, S3C_MEM_ALLOC, m);
if(ret < 0)
{
return -1;
}
return 0;
}

void S3CMem::release(s3c_mem_alloc* m)
{
int ret = ioctl(m_fd, S3C_MEM_FREE, m);
m->phy_addr = m->vir_addr = 0;
}

int S3CMem::dmacopy(void* dest, void* src, int size)
{
s3c_mem_dma_param p;
p.size = size;
p.src_addr = (unsigned int)src;
p.dst_addr = (unsigned int)dest;
p.cfg = 0;

int ret = ioctl(m_fd, S3C_MEM_DMA_COPY, &p);
if(ret != 0)
return -1;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: