注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 获取当前页面路径,实现权..
 帮助

2440(wince5.0)eboot调试


2008-01-05 19:50:48
 标签:调试 wince5.0 eboot   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://bluefish.blog.51cto.com/214870/58114
     搞了一段时间的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年前都开始搞的东西,我现在才去搞。哎,这是差距啊!

本文出自 “bluefish” 博客,请务必保留此出处http://bluefish.blog.51cto.com/214870/58114





    文章评论
 
2008-04-21 13:11:24
"不管是uboot还eboot在执行之前都要执行nboot",这个不一定吧

2008-06-16 13:31:12
2440里的STEPLDR可能用吧?

2008-06-16 14:36:16
因为我所用的平台上没有norflash,所以要是直接从nandflash上启动的话,这个nboot是必须的,其实也就是2440bsp里的stepldr了,只是这个编译出来之后要远远大于4k。在网上有见到牛人修改到了小于4k的

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: