以下程序段来自我的一个实际项目。将物理地址转换成虚拟地址,之后就可以C语言指针在程序里面操作了。
#include<stdio.h>
#include<stdlib.h>
#include<sys/mman.h>
#include<fcntl.h>
unsigned int get_mmap_addr_auto( unsigned int addr ,unsigned int len ){
int fd = 0 ;
unsigned int r ;
fd = open("/dev/mem", O_RDWR|O_SYNC);// also not cached
if (fd == -1)
{
printf("fail to open mem!\n");
return (-1);
}
printf("OK to open mem!\n");
r = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd , addr);
if (r == 0) printf("NULL pointer!\n");else printf("mmap return address = 0x%08x \n",r);
return r ;
}
为了避免拷贝代码带来的错误。我这里再贴一下图: