使用mmap读取内存的内容,出现“Segmentation fault”错误,请帮看看原因。
这个程序的目的是用于功能调试的,正在读取一块网卡使用的dma内存空间,想看看里面的数据内容。
当我读取0x1b436c000 这个地址时,运行出现“Segmentation fault”错误。这个地址是网卡正在使用的地址。
当读取0x1c0004000这个地址时,就可以正常运行。这个地址是我在系统启动时保留下来的地址空间。
请问有什么区别吗? 难道是驱动正在使用的地址空间,其他程序就不能查看了吗?
谢谢!
int main()
{
unsigned char * map_base;
FILE *f;
int n, fd;
unsigned long addr;
unsigned char content;
int i = 0;
printf("step1\n");
fd = open("/dev/mem", O_RDWR|O_SYNC);
if (fd == -1)
{
return (-1);
}
printf("step2\n");
//rx buf
//map_base = mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x1c0004000); //run success
map_base = mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x1b436c000); //run fail
if (map_base == 0)
{
printf("NULL pointer!\n");
}
else
{
printf("Successfull!\n");
}
for (i=0;i
{
addr = (unsigned long)(map_base + i);
content = map_base[i];
if(i%16==0) {
printf("address: 0x%lx: content: 0x", addr );
}
printf("%02x", (unsigned int)content);
if(i%16==15) {
printf("\r\n" );
}
}
munmap(map_base, 0xff);