描述:加载的内存缓冲首地址
图片:
当我从sd卡烧写根文件系统的时候,如果根文件系统大于300M,烧写就会出问题。
这里我先说一下,我uboot中烧写根文件系统的个人认识:
uboot烧文件系统的时候
第一步是从SD卡把根文件系统读到内存中
第二步是从内存中写入我们划分好的分区,把它写入到EMMC中的指定根文件系统分区。
那么对于上面的这两个步骤,我的问题出在了第一步,当烧写系统的时候,uboot先从SD卡中读我指定的根文件系统到内存中起始地址为0x5000_0000来,
{
这个地方,samsung默认指定的内存地址为0x5000_0000
对于这个0x5000_0000,为什么为这个地址,我也没找到官方稳定说明
}
前面的读入都很顺利,但读到文件的最后部分时,因为最后的文件大小不足一个block大小
而从SD卡中读,至少需要读入1block大小,所以这个地方,对最后一步的处理是,先开辟一个521字节的数组
然后读到这个数组中来,再把这个数组中,我们的文件最后剩下的真实数据大小,读入到我们指定的内存缓冲去
这个时候,问题出现了,一旦我往这个内存地址后面移动,程序就死了。
也就是说,对于内存0x5000_0000后面的>300M的内存的某个地址,我们不能碰,一旦写入,就会出问题。
于是我分析了下uboot的运行内存情况
uboot在内存中的地址为0x43e0_0000,但对于0x5000_0000以后的内存,我不知道放了些什么
于是我就尝试了下,将缓冲的地址0x5000_0000改为了0x6000_0000,但问题更加严重了,这个在烧系统的时候,连uboot都无法读完,然后程序就死掉了。
所以这个问题一直困扰着我。
希望有知道的人,帮个忙,一起分析下。
另:不知道exynos4412,sansumg有没有提供irom启动的datasheet,如果哪个朋友有的话,麻烦共享下。
谢谢各位!!!
[ 此帖被lihp1603在2014-07-03 17:42重新编辑 ]