设置首页  |   加入收藏  |  联系我们   
您的位置: 主页>Linux知识>内核研究>正文
用户态和内核共享内存:最简单的例子
文章来源:  编辑:  发布时间:2007-10-29

2.6内核验证。

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


#include
#include 
#include 
#include 
 
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  
#include 
#include 
#include  
#include  
 
#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; 
} 

(e129)

 
Tags:简单 例子 内存 共享 用户 #include buf fd // void int
Google
 
上一篇: 何把内核中的信息打印到文件的方法   下一篇: 开发团队:Linux内核中的bug越来越多
【返回顶部】 【打印】 【大】 【中】 【小】 【关闭】

 我来说两句
用户名: 新注册) 密码: 匿名评论 [论坛讨论]
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 相关文章
 热门文章

 
版权所有  2005-2006  Linux集中营  闽ICP备07500055号