售后打电话说现场设备出问题了,嵌入式工程师最想干什么?
当然不是骂售后,尽管有时是这么想的!作为嵌入式系统开发人员,我最想做的就是能够能通过telnet或者ssh登录到设备上,看看设备系统还正常不正常,查看程序日志,看看程序TMD到底干什么去了!做软件的同学都知道,软件出问题,一定要保留现场,这样才容易查问题,特别是那种偶现的问题,现场以破坏,下次不知道什么时候出现了。下面给大家介绍下之前做过的一套嵌入式系统远程调试运维的软件。
嵌入式系统运维概述
提起运维,大家想到的可能都是服务器运维,各种linux服务器、windows服务器、交换机路由器配置、防火墙配置……不过,我这里所说的是嵌入式系统设备的运维,这个概念现在提的应该不多。这个也是最近几年,随着嵌入式(linux)设备的发展,使用不断增加而出现的,设备的量越来越大,特别是现在物联网爆发式增长,各行各业都会用到嵌入式系统,而这些设备,大部分都是用的嵌入式linux系统。
必要性
设备的量上去了,设备的运维问题也就是暴露出来了,设备一般使用现场偏远,有的是车载设备,随车满地跑,所以,维护起来并不像那些固定的服务器那样容易,这也就产生了嵌入式设备远程运维的概念。这里所说的远程运维,即是指可以像本地操作设备一样去操作与控制远程现场的嵌入式设备。
如果在物联网行业,一般嵌入式系统作为网关的形式存在,这样的话单个客户的用量并不会大,一般在10台以内的数量级,所以如果设备出了问题,一般还需要派人去现场,这样必然会增加额外的差旅费用。如果是车载设备,一般量就比较大了,一个地区可能会有成千上万台设备,这样就更需要建设远程运维系统了。
设计原则
作为远程运维程序,需要做的非常稳定,怎么才能尽可能稳定,不出bug?我们会将运维程序与正式的程序分开,并且运维程序在设备上做的尽可能简单,因为只有简单了,才能够稳定。这样也保证运维模块程序不受其他应用程序的影响。
如下图所示:
这里的运维平台用户对象主要是开发人员,开发人员在设备出问题时,通过运维平台可以远程登录到设备上面,可以查日志、下载日志、查看数据、查看系统状态等等。
实现思路
组成模块
和常规的平台通信类似,这里以典型的C/S架构为例(原来做的是C/S架构,当然也可以用B/S架构),需要三部分组成:
1.嵌入式设备程序
2.平台服务程序
3.客户端程序
嵌入式端与平台服务器端需要制定一套简单的协议,包括设备注册、心跳维持、ssh/telnet代理等,平台服务端会将注册上来的设备统一管理,可以分组织,以把不同地区、不同客户的设备分开,便于维护。客户端与平台服务端也有一套协议,主要是用于获取设备列表信息,还有ssh与telnet代理。
关键技术-远程登录
这里提到了ssh/telnet代理,大家可能都比较熟悉ssh和telnet,通常用于远程登录系统。像这种远程系统里,由于需要跨公网,并不能直接连接到设备,所以需要在平台服务端做ssh或者telnet的代理。这两种方式我们都用过,telnet是明文传输,存在安全问题;还有一点不能传输文件,ssh可以传输文件,也可以在xshell的登录终端直接利用xmodem协议传输文件。虽然说可以通过ftp服务传文件,但是在登录终端直接传输文件还是很方便的操作。
使用rz命令给设备下载文件,可以下载升级文件,下载配置文件等等,使用sz可以把设备的日志文件、数据发配置等送到自己的电脑上面。这样是不是很方便!