[ 永远的UNIX::UNIX技术资料的宝库 ]   GB | BIG5

首页 > 编程技术 > C/C++ > 正文
Unix编程/应用问答中文版 ---22.Linux Kernel Programming
本文出自:http://www.nsfocus.com 维护:小四 (2002-11-18 06:02:00)
22.   Linux Kernel Programming 
22.1  直接访问内存[显存]地址 
22.2   
-------------------------------------------------------------------------- 
23.   Linux相关问题 
23.1   
-------------------------------------------------------------------------- 


22. Linux Kernel Programming 

22.1 直接访问内存[显存]地址 

Q: 现在在修改linux内核,希望能访问一段地址(其实是显存)。但发觉不能直接访问 

A: Kongming <ymwei@263.net> (Luther <Luther@pku.edu> 整理) 

通过/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.fanqiang.com)
    进入【UNIX论坛

相关文章
Unix编程/应用问答中文版 ---20.shell script问题 (2002-11-15 11:20:03)
Unix编程/应用问答中文版 ---21.FreeBSD相关问题 (2002-11-15 06:02:00)
Unix编程/应用问答中文版 ---19.终端相关问题 (2002-11-14 10:33:14)
Unix编程/应用问答中文版 ---17.文件查看问题 18.补丁相关问题 (2002-11-06 06:02:01)
Unix编程/应用问答中文版 ---16.库相关问题 (2002-11-05 06:02:01)
Unix编程/应用问答中文版 ---14.一些小工具的使用 15.32-bit/64-bit相关问题 (2002-11-04 06:02:00)
Unix编程/应用问答中文版 ---12.日志相关问题 13.进程相关问题 (2002-11-01 06:02:00)
Unix编程/应用问答中文版 ---11. package相关问题 (2002-10-31 06:02:00)
Unix编程/应用问答中文版 ---10.网卡相关问题 (2002-10-30 06:02:01)
Unix编程/应用问答中文版 ---9.图形界面相关问题 (2002-10-29 06:02:00)

===更多相关===
 

★  樊强制作 欢迎分享  ★