发新帖我要提问
12
返回列表
[应用相关]

stm32移植ecos #1,为什么要把ecos移植到stm32平台上

[复制链接]
楼主: Diyer2015
手机看帖
扫描二维码
随时随地手机跟帖
Diyer2015|  楼主 | 2018-9-21 12:41 | 显示全部楼层
首先确定redboot的启动类型(上右图中的Startup type配置项),根据我们导入的最小配置文件,默认情况下是ROM,所以不需要修改,这里我们需要修改下串口波特率(上右图中的Console serial port baud rate配置项),修改为115200。

至此,我们完成了redboot的配置。配置完成后,在ecos图形配置工具configtool菜单栏中点击保存按钮,选择好路径,并拟定好配置文件的名称,我取名为redboot.ecc。

保存后,会在保存路径下产生两个文件夹,其中,xxx_build用于存放编译的目标文件;xxx_install存放最终产生的目标文件和库文件等(xxx表示你保存时取得配置文件名称),如下图所示。

719635ba47673e9150.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:41 | 显示全部楼层
7,编译

首先,确定你的编译器的位置。在ecos图形配置工具configtool界面中,如下图所示。

519615ba476816c647.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:42 | 显示全部楼层
设定编译器,在ecos图形配置工具configtool界面中,点击Build->Library或者直接按F7,开始编译。在configtool的底部窗口,可以看到编译进展,最后看到finish提示时,表示编译完成,如下图所示。

224195ba476a5c9596.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:42 | 显示全部楼层
这时会在redboot_install文件夹下的bin目录下有目标文件,如下图所示:

921935ba476b29003b.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:42 | 显示全部楼层
8.,烧写redboot.bin到stm32 CPU内部flash

接好J-Link,然后给板子上电,打开J-Link的J-flash ARM软件。如下图所示。

418175ba476c4b2dc9.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:43 | 显示全部楼层
然后点击File->Open data file…,选择产生的redboot.bin文件,会提示你输入开始烧写地址。默认起始地址是0,由于STM32 CPU内部flash起始地址是0x08000000,因此,这里我们输入这个地址,设定后,点击OK按钮。如下图所示。

232295ba476da3def2.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:43 | 显示全部楼层
点击Target->Connect,连接J-Link,然后点击Target->Auto或者直接按F7开始烧写redboot.bin。

9. 启动redboot

烧写好redboot.bin后,就可以启动redboot了,如下图所示。

493115ba476f1c99a1.png

到此,初步完成了redboot的移植。别看上面步骤很多,实际上很简单,只是说起来比较繁琐些。如果你按照上述的步骤进行操作,一般不会出现问题,可以很顺利的看到redboot的启动信息。

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:43 | 显示全部楼层


在stm32移植ecos #4,移植redboot(ROM启动方式)上篇和stm32移植ecos #5,移植redboot(ROM启动方式)下篇两篇中,详细介绍了redboot的移植过程,且烧写到内部flash后可正常启动。从整个移植过程来看,移植是很简单的。借助ecos模板,几乎不需要太多修改就可以让redboot运行起来。

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:44 | 显示全部楼层
简单地让redboot运行起来是不够的,我们知道,作为bootloader,其最基本的功能就是用来引导OS,这里就是用来引导ecos系统。那么怎样让redboot来引导我们的ecos系统呢?还有一个我在思考的问题:redboot只是ecos的一个单线程最小系统,而ecos最终是与我们的应用程序链接在一起的,那么,redboot是必需的吗?我们是否不需要redboot就可以一上电直接运行我们的最终目标程序(ecos+应用程序)呢?

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:44 | 显示全部楼层
怎样让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个问题。

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:44 | 显示全部楼层
redboot是必需的吗

这个问题,实际上我们想想:在stm32中,如果必需要有redboot作为引导,无形中会给我们的应用带来复杂性。相反,如果不需要,将大大简化ecos在stm32中的应用与开发。

作为这个问题的引子,前几天我在ecos的讨论邮件列表中,看到有人在问“RedBoot necessary for porting ecos?”,而相关回复是:redboot可以不需要。看如下图的原文:

263465ba4773bbeb18.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:45 | 显示全部楼层
当然,redboot也是有其大用的,如考虑远程固件时,使用redboot就很有用了。另外,redboot中可用作GDBServer,这对于使用GDB来调试程序就很有用了。

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:45 | 显示全部楼层
接下来移植ecos,在此基础上运行一个最基本的helloworld程序。在移植过程中,我先后采用了两种方法并都成功运行。一种方法是在redboot下引导运行内存中的helloworld程序;另一种方法是把映像烧写到内部flash中直接运行它。这两种方式对于ecos而言,只是它的启动类型配置不同而已。

为叙述方便并使读者有的放矢,把ecos的移植步骤分为几个章节分别介绍,读者可以选择的阅读。

本节主要介绍如何配置ecos并编译生成静态链接库文件。

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:45 | 显示全部楼层
引子

不像linux编译后会产生内核镜像文件,ecos本身被编译为一个静态链接库文件,最终与用户应用程序链接在一起,生成一个二进制烧写文件。redboot是一个特例,它编译后直接生成二进制烧写文件。这点需要明确并区别开来。

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:46 | 显示全部楼层
移植和配置ecos

前面章节中,我们在STM32平台上成功地移植了redboot。ecos本身设计为一个高度可配置的嵌入式OS,因此,移植和配置ecos本身就相对容易多了,只需要在ecos的图形配置工具中,把Templates中的Packages从redboot改为default即可。如下图所示。

72645ba47790b7b64.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:46 | 显示全部楼层
其它步骤包括编译等参考stm32移植ecos #4,移植redboot(ROM启动方式)上篇和stm32移植ecos #5,移植redboot(ROM启动方式)下篇两篇**的详细说明。

另外注意的就是启动类型和debug串品波特率的配置,其它的配置先暂时不用管。如下图所示。

796715ba4779febc05.png

使用特权

评论回复
Diyer2015|  楼主 | 2018-9-21 12:46 | 显示全部楼层
当用redboot引导运行内存中的helloworld程序时,启动类型必须配置为RAM类型;当烧写到内部flash直接运行时,启动类型必须配置为ROM类型。这点必须十分注意。

配置并设置好编译路径后,就可编译出ecos静态库文件了。生成的静态链接库文件在生成路径下的ecos_install/lib目录,如下图所示。

821215ba477afb3aed.png

其中,libtarget.a就是生成的ecos静态链接库文件,target.ld是链接说明文件,用于告诉编译器如何链接该库文件。

从上所述,把ecos生成静态链接库文件是相当容易的。相比其它OS,如UCOS、linux等,更加简洁明了。

使用特权

评论回复
漫别离| | 2018-11-6 09:40 | 显示全部楼层
楼主,按照您的教程把redboot下载到stm32后,没有出现retboot启动界面,请问这是什么原因呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则