Zephyr应用笔记:mcuboot引导Zephyr镜像

第一次写博客且本人文字组织水平一直很low,所以大家将就看吧。

博客的宗旨:看过这篇文章的人都能够顺利开发zephyr的boot。

boot采用mcuboot(version 1.1.0),Github地址:https://github.com/runtimeco/mcuboot

zephyr(version 1.10.0),Github地址:https://github.com/zephyrproject-rtos/zephyr


下面以我们最常用的hello world为例说明:

1、如果我们不用boot,直接根据zephyr指导说明:

http://docs.zephyrproject.org/getting_started/getting_started.html#building-and-running-an-application

将hello world下载到开发板(例如:nucleo_f401re)中也是可以运行的,但是这只是最基本的demo,只能说明跑起来,并不能直接应用到实际工程项目中,因为它还缺少一些关于程序的相关信息(比如没有版本号信息,编译时间,镜像长度等信息)。

2、为了解决上边的问题,我们需要想办法在某个地方加上我们想要的信息,我想到的办法是在镜像(zephyr.bin)的头加入一些说明信息,这样我们就需要将我们的镜像(zephyr.bin)做一个偏移,然后将我们需要的信息放到镜像起始的位置,供别人或者自己查询。

非常幸运的是,我发现mcuboot(上边的链接),提供了添加镜像头的功能,并且实现了对zephyr很好的支持,所以我决定测试一下,看看能不能跑通,结果自然是可以,haha。


干货登场:

1、假设你已经下载过上边的mcuboot和zephyr(zephyr已经配置好能编译zephyr/samples/hello_world),请详细研读mcuboot根目录下的 "README-zephyr.rst"。

2、下载zephyr的主要作用就是按照上边zephyr的指导说明(那个链接地址),成功编译并下载hello_world(zephyr自己的hello_world)。

3、编译mcuboot:进入zephyr所在目录,在根目录下执行source zephyr-env.sh配置好环境,然后回到mcuboot,按照 "README-zephyr.rst" 中 "Building the bootloader itself"说明编译boot并下载到开发板(我用的是nucleo_f401re)中,你会发现boot已经能够执行起来的,但是由于我们还没有下载合法的app,所以会打印 "Unable to find bootable image",至此我们已经把boot部分完成了。

4、编译app:编译之前请详细研读 "README-zephyr.rst" 中 "Building Applications for the bootloader" 部分,我们暂时先不用zephyr/samples/hello_world,先用mcuboot/samples/zephyr/hello-world(因为这个例程已经配置好了我们需要特别配置的东西),编译完之后看zephyr.bin镜像你会发现它的0x00~0x200都是0x00,至此我们的镜像文件已经生成;

5、标记app:通过第4部我们生成的zephyr.bin前0x200都是0x00,我们需要将我们想要的信息(比如版本号,镜像长度等)标记到0x00~0x200这部分地址中,具体操作步骤请详细研读 "README-zephyr.rst" 中 "Signing the application" 部分,这一步骤是比较麻烦的可能你会遇到一些问题(如果你熟悉python也许问题好解决,我一点也不懂(悲伤)),但是请不要放弃,下面说我的操作步骤:

1)进入到mcuboot/scripts文件夹,你会看到imgtool.py文件,我时直接在这个文件夹下执行的标记指令,指令如下:

    python3 ./imgtool.py sign \
        --header-size 0x200 \
        --align 8 \
        --version 1.0 \
        --included-header \
        --key ~liang/work/shared/mcuboot-master/root-rsa-2048.pem \

        ~liang/work/shared/mcuboot-master/samples/zephyr/hello-world/nucleo_f401re/zephyr/zephyr.bin signed.bin

指令示例(zephyr中提供的指令示例):

~/repos/mcuboot/scripts/imgtool.py sign \
    --header-size 0x200 \
    --align 8 \
    --version 1.0 \
    --included-header \
    --key ~/repos/mcuboot/root-rsa-2048.pem \
    <path-to-smp_svr-zephyr.bin> signed.img

注意:

如果你不是在mcuboot/scripts文件夹下运行上述指令,指令中的 ./imgtool.py 需要指定正确的位置;

上边的 --key ~liang/work/shared/mcuboot-master/root-rsa-2048.pem 你也需要根据自己存储的文件夹指定正确的位置;

上边的 ~liang/work/shared/mcuboot-master/samples/zephyr/hello-world/nucleo_f401re/zephyr/zephyr.bin signed.bin 你也需要根据自己存储的文件夹指定正确的位置;


执行完上边的指令后,你会发现在mcuboot-master/scripts文件下出现了signed.bin镜像,也就是是说,上边那条指令是将我们编译出来的zephyr.bin文件加上 标记 后输出到我们执行指令时所在的文件夹中,至此我们的镜像制作完成;


6、下载镜像:研读 "README-zephyr.rst" 中 "Flashing the application" 部分,我用的是STM32 ST-LINK Utility下载的镜像(注意偏移,我是下载到0x8020000中),下载完之后,复位开发板,串口输出一些打印信息,最后一段是

[MCUBOOT] [INF] main: Jumping to the first image slot
***** BOOTING ZEPHYR OS v1.10.0- - BUILD: Mar  7 2018 08:45:48 *****

Hello World from Zephyr on nucleo_f401re!


如果你已经做完了以上6步,恭喜你,可以进行后续开发了!


下一篇博客会记录mcuboot引导我们在zephyr/samples/hello_world编译的镜像,good luck!


2018年3月8日







猜你喜欢

转载自blog.csdn.net/u010018991/article/details/79475166