int mread(unsigned int addr,unsigned int len,char *name)
{
unsigned int va, pa_s, pa_e, of;
FILE *fd_out;
unsigned int size;

printf("read memory(0x%x,%d) to file(%s)\n",addr,len,name);

fd = open("/dev/mem",O_RDONLY);
fd_out = fopen(name,"w+b");
while( len ){
size = (len > MMAP_SIZE_MAX)? MMAP_SIZE_MAX:len;
pa_s = addr & ~0xfff; /* 4K alignment for mmaped address. */
of = (addr - pa_s) & ~0xf;
pa_e = (addr + size + 0xf) & ~0xf;
va = (unsigned int) mmap((void *) 0, (pa_e - pa_s + 0xfff) & ~0xfff, PROT_READ, MAP_SHARED, fd, pa_s);
fwrite((void *)(va+of),size,1,(void *)fd_out);
munmap((void *)(va), (pa_e - pa_s + 0xfff) & ~0xfff);
addr += size;
len -= size;
}

fclose(fd_out);
close(fd);
return 0;
}
arrow
arrow
    全站熱搜

    BB 發表在 痞客邦 留言(0) 人氣()