歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Unix編程/應用問答中文版 ---22.Linux Kernel Programming

  本文出自: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地址空間映射到進程的地址空間。




Copyright © Linux教程網 All Rights Reserved