- 论坛徽章:
- 0
|
我这个例子共享内存读出来的数据不对, 能帮我看看什么问题吗?? 谢谢
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);
} |
|