搞了一段时间的eboot,今天终于可以跑到主菜单这边了。
     想想这段时间,自己太委琐了。前段时间的问题是:每次eboot跑到mmu使能之后就挂掉了。在这里兜了很多圈,首先想是不是mmu映射的问题,但是通过看代码和比较几个文档,觉得是没有问题的。其次感觉是sdram设置的问题,但是经过几次更改之后还是老样子。
      由于资源问题和eboot比较大,烧写很慢的原因,这个问题拖了不少时间。前一段时间在对bootloader中加进度条的时候,对bootloader有了些了解(此处的bootloader用的是uboot,但是原理都是一样的)。通过对比,找出了原因所在。不管是uboot还eboot在执行之前都要执行nboot(至少在smdk上是这样的)。在设备上电后首先要跳到nboot中,(一般烧写在block0,大小4k)之后nboot做一些初始化操作(和uboot和eboot中的差不多),完了之后就将指定block上的uboot或者eboot拷贝到内存中指定的地址去,在这里的操作都是用的物理地址,所以比较爽。
      我的问题就是nboot中将eboot拷贝到的内存地址和在eboot中实际用的地址(在经过mmu之后)不是同一个地址,我用的不是和eboot一起的nboot,而是自己的。这样nboot就把eboot放到了一个内存中去,并跳到那里去执行。这时eboot当然可以正常执行了,但是当使能mmu之后,要跳到一个虚拟地址(该地址对应的是main)一些去执行,但是此时该地址所对应的物理地址上并不是所谓的main函数,故此系统就挂掉了。为此调整了下nboot中的地址就好了。目前eboot可以跑到主菜单,由于板子上用的是dm9000,但是armv4i下的lib库中并没有dm9000的,又得自己搞了。
      太土了,别人n年前都开始搞的东西,我现在才去搞。哎,这是差距啊!