中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 操作系统 > Linux > Linux综合
用户态和内核共享内存--最简单的例子
作者:wheelz 时间:2006-07-27 19:51 出处:www.chinaunix.net 责编:LOKI
              摘要:暂无
作者:wheelz
来自:
http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=linuxK&Number=587187&page=0&view=collapsed&sb=5&o=all&fpart=
例子中,用户态程序的KERNEL_VIRT_ADDR就是内核模块打印的地址p
这里是hard coding(先加载内核模块,再把打印的地址赋值给KERNEL_VIRT_ADDR),
可以采用其他的方式传递。

2.6内核验证。

内核模块-----------------------


#include <linux/config.h>

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/mm.h>



MODULE_LICENSE("GPL");

MODULE_AUTHOR("Wheelz");

MODULE_DESCRIPTION("mmap demo");



static unsigned long p = 0;



static int __init init(void)

{

//分配共享内存(一个页面)

p = __get_free_pages(GFP_KERNEL, 0);

SetPageReserved(virt_to_page(p));



printk("<1> p = 0x%08x\n", p);



//在共享内存中写上一个字符串

strcpy(p, "Hello world!\n");



return 0;

}



static void __exit fini(void)

{

ClearPageReserved(virt_to_page(p));

free_pages(p, 0);

}



module_init(init);

module_exit(fini);



用户态程序---------------------------------

#include <sys/mman.h> 

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h> 

#include <stdio.h> 



#define PAGE_SIZE (4*1024)



#define PAGE_OFFSET 0xc0000000

#define KERNEL_VIRT_ADDR 0xc5e3c000



int main() 



char *buf; 

int fd; 

unsigned long phy_addr; 



fd=open("/dev/mem",O_RDWR); 

if(fd == -1)

perror("open");

phy_addr=KERNEL_VIRT_ADDR - PAGE_OFFSET; 



buf=mmap(0, PAGE_SIZE, 

PROT_READ|PROT_WRITE, MAP_SHARED, 

fd, phy_addr); 

if(buf == MAP_FAILED)

perror("mmap");

puts(buf);//打印共享内存的内容

munmap(buf,PAGE_SIZE); 



close(fd); 

return 0; 

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有