通过/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

评论