Zephyr多版本共存

Creative Commons
本作品采用知识共享署名

本文介绍如何让Zephyr多版本共存,并编译出自己想要的image。

Zephyr迭代速度非常快,大约每3个月一个release周期,同时zephyr目前又处于比较激进的变化的阶段,随时都在引进比较新的特性,这导致每过一段时间去更新代码后就会发现写的应用程序可能会编译不过。这对于一个没有多少时间的业余爱好者是个灾难。一直以来我都是更新代码后就去修正写的应用程序,然后升级自己添加的驱动,每次更新代码后都要前后捣腾。最近半年一直基于2.2.0-rc1做zephyr上的一些开发,最近想体验一下Zephyr最新的特性,但发现2.3.0之后的版本在设备树上变化太大,加上在2.2.0-rc上又对外部模块的hal改动不小,要同步谈何容易。因为并不是要在最新版本上跑原来写的app和驱动,因此就萌生了让2.2.0-rc和master共存的想法,这里记录在Linux上的操作方法:

前提:Linux系统上已经安装了Zephyr-sdk-0.11.3, zephyr 2.2.0-rc代码,并可以正常编译zephyr

安装最新的sdk

下载最新的sdk https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.11.4/zephyr-sdk-0.11.4-setup.run 进行安装,安装时注意不要去覆盖原来sdk的目录

1
./zephyr-sdk-0.11.4-setup.run -- -d ~/zephyr-sdk-0.11.4

下载全新的zephyr代码

1
2
3
west init ~/zephyrmaster
cd ~/zephyrmaster
west update

编译新版本zephyr

为了使用新的sdk,执行

1
export ZEPHYR_SDK_INSTALL_DIR=/mnt/e/westz/zephyr-sdk-0.11.4

在要使用最新的zephyr编译时在shell中执行

1
west -z /mnt/e/westz/zephyrmaster/zephyr/ build -b qemu_cortex_m3 shell_module/

-z将指定新的zephyr的base,因为shell_module是最新的app,在cmake文件中使用了cmake package管理,因此需要使用如此尴尬的处理。

后记

从2.3.0开始Zephyr已经引入了cmake package管理,可以下载多份不同版本的zephyr代码,通过cmake来管理,非常方便。
跨2.3.0的多版本管理可以使用本文方法。从2.3.0开始之后的多版本编译管理,完全可以使用该cmake package的管理方法,更为方便和合适。详细可以参考https://docs.zephyrproject.org/latest/guides/zephyr_cmake_package.html。