Chinaunix
标题:
如何在应用程序里访问物理内存呢?
[打印本页]
作者:
fishrei
时间:
2008-12-04 16:40
标题:
如何在应用程序里访问物理内存呢?
如题!
比如我的物理内存地址是0x30000000开始,我想在应用程序里访问这段地址,我该怎么做??
goole了一下,给的都是
/**********************************/
int fd=0;
char *mem=null;
int size = 1000;
fd = open("/dev/mem", O_RDWR);
mem=(char *)mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x30000000>>
;
/*****************************************************************************/
说用这种方法就能直接访问内存。
但是执行open时是OK的,但是执行mmap就不行,返回值是-1,请问是怎么回事??
还有,还有没有其他方式能直接访问内存呢?
高手们给讲讲啊……
作者:
T-bagwell
时间:
2008-12-04 20:16
你的文件系统是什么的?
是在PC机上作的实验吗?
还是在开发板上做的?
[
本帖最后由 T-bagwell 于 2008-12-4 20:17 编辑
]
作者:
emmoblin
时间:
2008-12-04 23:44
好像不能直接访问物理内存吧?只有操作系统内核才能这么做,否则就没有内存管理的必要了。
当然如果是设备的地址空间通过地址映射是可以访问的
作者:
fishrei
时间:
2008-12-05 12:38
标题:
回复 #2 T-bagwell 的帖子
是板子上
作者:
fishrei
时间:
2008-12-05 12:45
标题:
回复 #3 emmoblin 的帖子
其实我的本意也不是想直接访问,毕竟不太合乎规则。
我在做一个camera采集和播放的测试代码,系统把ram最后一部分留出几M给采集的视频数据放,且这部分空间没有接收内存管理(free命令得到的内存总量就不包含这部分空间)。
我应该怎么获得那片区域的映射呢?
作者:
xiangyu1986
时间:
2008-12-05 14:37
标题:
回复 #5 fishrei 的帖子
你这个是什么的板子?
[
本帖最后由 xiangyu1986 于 2008-12-5 14:52 编辑
]
作者:
xiangyu1986
时间:
2008-12-05 14:59
标题:
回复 #5 fishrei 的帖子
你可以把errno打出来看看吧
用perror看看到底是为什么不能映射这段内存
作者:
fishrei
时间:
2008-12-05 15:00
标题:
回复 #6 xiangyu1986 的帖子
/dev/mem是内存设备,是针对我访问内存的提问使用的,对camera则是/dev/video设备。
跟framebuffer不一样,打开framebuffer设备以后,我可以使用mmap可以获得显示区域的那片映射,望映射地址写数据,可以在屏上显示。
而针对camera设备,好像不能够用mmap来获取camera采集数据的那片空间,所以想直接去读内存。
但是好像那部分空间被放在内存管理以外了,即是说/proc/meminfo里,内存那部分不包括这段地址,而且这段地址也没有出现在该文件里。
还在看,不知道怎么回事??
有知道的哥们给指导一下……
作者:
xiangyu1986
时间:
2008-12-05 15:14
标题:
回复 #8 fishrei 的帖子
是不是因为你这部分存储空间还没有挂载到系统上去??
作者:
xiangyu1986
时间:
2008-12-05 15:24
标题:
回复 #8 fishrei 的帖子
那你这里是i/o空间的访问啊
应该是做ioremap才对吧
作者:
fishrei
时间:
2008-12-05 15:42
标题:
回复 #10 xiangyu1986 的帖子
好像是没有挂到系统里,因为我从任何角度都看不到这个空间。但是目前还不知道怎么弄。
ioremap好像只能在内核才能用,app调用应该不行??
不知道我的理解对不对??
作者:
xiangyu1986
时间:
2008-12-05 16:03
标题:
回复 #11 fishrei 的帖子
好像用户空间是不能随便访问I/O空间的
可能要改下驱动
不知道有没有更好的办法了
我这里也产生了一个疑问
你这个板子是什么架构的?
内存空间和I/O空间是统一编址的么?
比如像ARM这样的架构
如果是统一编址的话访问内存和访问I/O是一样的啊
那应该是可以看到的
在ARM中那不是就不需要像ioremap这样的函数了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2