写入物理内存地址的数据发生意外更改

时间:2015-04-21 08:35:04

标签: linux-kernel mips32 ioremap

平台是MIPS,内核是linux 2.6.31。

首先,我保留了8M RAM区域,在64M的总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),一个字节的数据错误,在0x83c00000(4M),一个字节的数据错误,在0x84000000(8M),一个字节的数据是错误的。但所有其他数据都是正确的,与buf相同!     这么奇怪!!我不知道原因,谁能帮帮我?感谢...

0 个答案:

没有答案