免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2304 | 回复: 7
打印 上一主题 下一主题

内存共享的问题??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-07 15:41 |只看该作者 |倒序浏览
我这个例子共享内存读出来的数据不对, 能帮我看看什么问题吗?? 谢谢
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);

}

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2009-03-07 16:57 |只看该作者

回复 #1 star316 的帖子

怎么不见你的映射?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
3 [报告]
发表于 2009-03-07 17:03 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2009-03-07 17:12 |只看该作者
汗,我就是参考那个改写的啊,  就是没有使用 /PROC ,

MAIN 函数里面有映射啊, map_addr=mmap(0,P_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,offset);

论坛徽章:
0
5 [报告]
发表于 2009-03-08 11:25 |只看该作者
汗,解决了, 原来只计算了偏移地址, 没有加上物理内存的基地址,

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2009-03-08 20:32 |只看该作者
原帖由 star316 于 2009-3-8 11:25 发表
汗,解决了, 原来只计算了偏移地址, 没有加上物理内存的基地址,


呵呵,看来我的例子应该把要注意的方面写的更详细一些啊,呵呵。

不过,自己遇上一次这样的问题并解决了,对个人的学习还是很有帮助啊。

论坛徽章:
0
7 [报告]
发表于 2009-03-09 00:37 |只看该作者
原帖由 Godbach 于 2009-3-8 20:32 发表


呵呵,看来我的例子应该把要注意的方面写的更详细一些啊,呵呵。

不过,自己遇上一次这样的问题并解决了,对个人的学习还是很有帮助啊。


god老大,我也用了你的例子实现了我需要的功能。。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2009-03-09 10:18 |只看该作者
原帖由 weily0000 于 2009-3-9 00:37 发表


god老大,我也用了你的例子实现了我需要的功能。。


很顺利的就实现了啊?:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP