我正在考虑在Yocto项目中开发一个embedded式Linux项目(一个工业应用程序),对于那些在embedded式Linux方面有经验的人来说,我有几个问题 – Yocto会遇到一些奖励。 只需要了解固件更新中常用的function。
我有一些要求,即身份validation,一个安全的通信协议,如果更新失败的某种types的回滚。 另外,如果有一种方法可以逐渐在整个设备上释放补丁,那么这也是一个有趣的现象,因为我想避免在现场使用设备。
如何将更新/修补程序部署到现场设备 – 开发它需要多长时间? 有什么其他的考虑我缺less?
在考虑安全的通信渠道和回滚机制之前,我认为你应该投入一些时间来研究下面这些从长远来看更为重要的主题:
版本控制:随着时间的推移,最终将会有不同的embedded式平台版本,而不是所有版本都具有相同的function。 您的设备需要能够检查它收到的升级是否兼容并且可以应用。
规划升级path:你不知道你的系统在5年后的样子,但是你希望今天的系统能够适应你将要开发的固件。 这样的升级可能需要多个步骤,应该logging。
不要忘记降级:在某个时候,你会介绍一些不可能降级的改变。 你想怎么处理?
这里有一些技术细节的想法:
身份validation和安全通信通道:只要您的设备具有validation所收到升级的机制,通信通道的确切属性就不那么重要了。 validation需要检查数据是否一致和兼容 。
回滚:一个简单的机制可以通过使用两个等长的分区来保存整个操作系统。 安排操作系统工作在只读位置和数据可以在单独的分区上更改是一个好主意。
引导程序需要一个引导标志来告诉它要引导哪个分区。 它会一直尝试从该分区首先启动,如果以某种方式失败,则会回退到其他分区。 该引导标志可以存储在引导加载程序有权访问的任何地方。
为了升级您的设备,您需要将新系统(一旦validation完成)复制到当前不活动的分区中,更改启动标志并重启。 在系统的init脚本中,检查是否从预期的分区启动。 如果没有,出了问题,你可以采取适当的措施。
你可以看看Yocto的Wiki,有一个关于更新的部分: