在stm32移植ecos #4,移植redboot(ROM启动方式)上篇和stm32移植ecos #5,移植redboot(ROM启动方式)下篇两篇中,详细介绍了redboot的移植过程,且烧写到内部flash后可正常启动。从整个移植过程来看,移植是很简单的。借助ecos模板,几乎不需要太多修改就可以让redboot运行起来。
简单地让redboot运行起来是不够的,我们知道,作为bootloader,其最基本的功能就是用来引导OS,这里就是用来引导ecos系统。那么怎样让redboot来引导我们的ecos系统呢?还有一个我在思考的问题:redboot只是ecos的一个单线程最小系统,而ecos最终是与我们的应用程序链接在一起的,那么,redboot是必需的吗?我们是否不需要redboot就可以一上电直接运行我们的最终目标程序(ecos+应用程序)呢?
怎样让redboot来引导我们的ecos系统
根据我现有ecos的项目经验和嵌入式linux的项目经验,在我看来,redboot引导ecos需要以下几步:
- 执行flash的初始化,并创建相应分区;
- 把映像文件通过网络或串口下载到内存,再从内存下载到flash。或者直接使用串口或者J-LINK烧写到flash中;注,这里最重要的是创建一个引导入口;
- 编辑redboot的启动脚本;
虽然步骤很清晰,但当我在redboot中执行fis init即在flash中建立分区后,再重新上电,redboot就起不来了;当把所有flash(包括外部norfalsh)擦除再重新烧写redboot到内部flash后,又可正常启动了。
我再试了另一种方法,想直接引导内存中的程序(helloworld程序,ecos中的一个最简单应用例子),但是用xmodem下载到一半的时候居然不能下载了。囧……
由以上看,要想真正用起redboot并引导OS,还是有很多知识需要了解和很多工作需要做。这个问题先到这里,再来看看第2个问题。
redboot是必需的吗
这个问题,实际上我们想想:在stm32中,如果必需要有redboot作为引导,无形中会给我们的应用带来复杂性。相反,如果不需要,将大大简化ecos在stm32中的应用与开发。
作为这个问题的引子,前几天我在ecos的讨论邮件列表中,看到有人在问“RedBoot necessary for porting ecos?”,而相关回复是:redboot可以不需要。看如下图的原文:
当然,redboot也是有其大用的,如考虑远程固件时,使用redboot就很有用了。另外,redboot中可用作GDBServer,这对于使用GDB来调试程序就很有用了。
推荐阅读相关文章:
- stm32移植ecos #5,移植redboot(ROM启动方式)下篇
- stm32移植ecos #4,移植redboot(ROM启动方式)上篇
- stm32移植ecos系列文章归档
- stm32移植ecos #12,redboot引导启动flash中的应用程序映像文件(上)
- stm32移植ecos #9,移植ecos并成功运行helloworld程序,使用redboot引导运行内存中的helloworld程序
- stm32移植ecos #21,触摸屏tsc2046驱动移植
- stm32移植ecos #13,redboot引导启动flash中的应用程序映像文件(下)
- stm32移植ecos #11,使用自己的模板(Template)