荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: hayas.bbs@bbs.gliet.edu.cn (阿生), 信区: Linux
标  题: Unix编程/应用问答中文版 ---22.Linux Kernel Progra
发信站: 漓江夜话 (Mon Nov 25 22:08:04 2002)
转信站: SZU!news.tiaozhan.com!LiRiver


本文出自:http://www.nsfocus.com 维护:小四

22. Linux Kernel Programming
22.1 直接访问内存[显存]地址
22.2
--------------------------------------------------------------------------
23. Linux相关问题
23.1
--------------------------------------------------------------------------


22. Linux Kernel Programming

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

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

A: Kongming (Luther 整理)

通过/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地址空间映射到进程的地址空间。





--

※ 来源:.漓江夜话  WWW http://bbs.gliet.edu.cn  [FROM: 211.97.77.143]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店