内存共享的问题???
我这个例子共享内存读出来的数据不对, 能帮我看看什么问题吗?? 谢谢
unsigned long addr=0;
static int init_mem()
{
unsigned long int i=0;
addr=__get_free_pages(GFP_KERNEL,0);
if (!addr){
printk("<1>error to get page\n");
return -1;
}
SetPageReserved(virt_to_page(addr));
printk("<1>the virtue address is 0x%08x\n",addr);
return 0;
}
static int exit_mem()
{
printk("the written bytes is %s\n",(char*)addr);
ClearPageReserved(virt_to_page(addr));
free_pages(addr,0);
}
module_init(init_mem);
module_exit(exit_mem);
==========================================
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <string.h>
#include <unistd.h>
#define VIRT_ADDR 0Xc3873000 // INSMOD模块后, 虚拟地址
#define P_SIZE 4096
int main(char argc,char** argv)
{
int fd;
unsigned long offset=0;
unsigned char * map_addr;
unsigned int i=0;
if ((fd=open("/dev/mem",O_RDWR))<0){
printf("open error\n");
exit(-1);
}
offset=VIRT_ADDR-0xc0000000;
map_addr=mmap(0,P_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,offset);
strcpy(map_addr,"hello,everyone");
munmap(map_addr,P_SIZE);
close(fd);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
怎么不见你的映射?
看看这个帖子:
http://blog.chinaunix.net/u/33048/showart_1271210.html
汗,我就是参考那个改写的啊, 就是没有使用 /PROC ,
MAIN 函数里面有映射啊, map_addr=mmap(0,P_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,offset);
汗,解决了, 原来只计算了偏移地址, 没有加上物理内存的基地址,
呵呵,看来我的例子应该把要注意的方面写的更详细一些啊,呵呵。
不过,自己遇上一次这样的问题并解决了,对个人的学习还是很有帮助啊。
god老大,我也用了你的例子实现了我需要的功能。。
很顺利的就实现了啊?:wink: