平台是MIPS,内核是linux 2.6.31。
首先,我在 64M 的总 RAM 中保留了 8M RAM 区域,因此内核仅使用 56M RAM 区域。其次,我使用该ioremap()
函数将物理地址转换为内核中的虚拟地址,然后写入我的数据。像这样:
void *virt_addr = (void *)ioremap(0x83800000,0x800000);//0x83800000 is the start physical address of 8M
memset_io(virt_addr,0,0x800000);
memcpy_toio(virt_addr,buf,0x800000);
iounmap(virt_addr);
然后我读取uboot中的数据:保持电源,重启系统,我进入uboot。Uboot使用的是物理地址,所以我从0x83800000开始读取数据。问题出在:0x83800000(0M)处,1字节数据错误,0x83c00000(4M)处,1字节数据错误,0x84000000(8M)处,1字节数据错误。但是其余的数据都是对的,和buf一样!!这么奇怪!!不知道是什么原因,谁能帮帮我?谢谢...