[ 永遠的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)

===更多相關===
 

★  樊強制作 歡迎分享  ★