プラットフォームは 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 と同じです。とても奇妙!!原因がわかりません、どなたか教えてください。ありがとう...