正文

直接访问内存[显存]地址2006-06-18 00:33:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/vfdff/15944.html

分享到:


通过/dev/mem设备文件和mmap系统调用,可以将线性地址描述的物理内存映射到进程
的地址空间,然后就可以直接访问这段内存了。

比如,标准VGA 16色模式的实模式地址是A000:0000,而线性地址则是A0000。设定显
存大小为0x10000,则可以如下操作

mem_fd = open( "/dev/mem", O_RDWR );
vga_mem = mmap( 0, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED,
mem_fd, 0xA0000 );
close( mem_fd );

然后直接对vga_mem进行访问,就可以了。当然,如果是操作VGA显卡,还要获得I/O
端口的访问权限,以便进行直接的I/O操作,用来设置模式/调色板/选择位面等等

在工控领域中还有一种常用的方法,用来在内核和应用程序之间高效传递数据:

1) 假定系统有64M物理内存,则可以通过lilo通知内核只使用63M,而保留1M物理内
存作为数据交换使用(使用 mem=63M 标记)。
2) 然后打开/dev/mem设备,并将63M开始的1M地址空间映射到进程的地址空间。 


http://www.fairysky.org/index_Article_Content.asp?fID_ArticleContent=48

阅读(6702) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册