本文说明zephyr如何使用mcumgr
zephyr提供device管理功能,其功能通过MCUmgr的SMP(Simple Management Protocol )实现,zephyr在device端集成了mcumgr,在host PC端通过mcumgr命令行可以进行device管理,目前主要支援下面几种功能:
- image管理: DFU用
- 文件系统管理:读写操作文件
- OS管理:查看zephyr OS信息
- 统计信息:查看zephyr static信息
log管理: 目前zephyr占不支援log管理
host PC的mcumgr命令行通过BT或者串口向zephyr device传输数据或命令,zephyr device收到命令后做对应的回应。本文的操作基于host pc为ubuntu 18.04通过串讲通讯进行示例.
安装
host端
使用下面命令安装mcumgr命令行工具
1 | go get github.com/apache/mynewt-mcumgr-cli/mcumgr |
安装玩后执行
1 | mcumgr --help |
可以看见对应的子命令
1 | mcumgr helps you manage remote devices |
device端
在zepyhr应用的prj.conf添加如下配置项,编译后烧写入zephyr device
1 | # 配置启动mcumgr |
使用
命令说明
一个典型通过串口的命令如下:
1 | mcumgr --conntype serial --connstring=/dev/ttyUSB0,baud=115200 image list |
–conntype serial: 说明mcumgr SMP走串口
–connstring=/dev/ttyUSB0,baud=115200: 说明使用串口设备是/dev/ttyUSB0,符号率是115200
image list: 子命令,查看image
也可以通过蓝牙进行操作
1 | mcumgr --conntype ble --connstring ctlr_name=hci0,peer_name='Zephyr' image list |
–conntype ble : mcumgr SMP走蓝牙BLE
–connstring ctlr_name=hci0,peer_name=’Zephyr’ : 使用的BLE设备为hci0
后面的介绍均以串口命令示例,如果想用蓝牙,替换–conntype和–connstring即可
image管理
zephyr的DFU功能主要使用mcumgr的image管理功能完成,在zephyr使用DFU有详细介绍,这里列一下命令:
列出device内image
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 image list
将image下载到devie
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 image upload
设置下一次启动时的image
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 image test
设置当前image为主image
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 image confirm
将device上未使用(slot0)的image删除
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 image erase
OS管理
zephyr OS管理的命令只有一条用于查看OS状态
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 taskstat
可以看到运行了的zephyr有3个task,可以看到task name,优先级,tid,stack大小,stack使用量
1 | task pri tid runtime csw stksz stkuse last_checkin next_checkin |
要获得task信息,编译image时还需要添加如下配置选项
1 | CONFIG_THREAD_MONITOR=y |
由于mcumgr port目前还不完善,task name和stksz,stkuse都不能正常显示,之前提交的PR https://github.com/zephyrproject-rtos/mcumgr/pull/2 正在等待merge,之前大家可以自行merge使用
统计信息管理
zephyr有一个stats模块(subsys/stats/),可被用于其它模块进行统计,zephyr的mcumgr stats port实现会收集这些统计信息送个host,代码实例可以参考samples/subsys/mgmt/mcumgr/smp_svr,这里不做分析,是说明mcumgr命令行的使用
列出支援的统计信息列表
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 stat list
可以看见
1 | stat groups: |
显示指定模块的统计信息
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 stat smp_svr_stats
可以看到
1 | stat group: smp_svr_stats |
文件系统管理
文件系统可以通过主机向zephyr device上传和下载文件,前提是device必须支援文件系统,例如配置nffs
1 | # 加入Flash文件系统 |
上传文件
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 fs upload ./ver /nffs/upver
上面命令是上传本地文件ver到device的/nffs/为upver
下载文件
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 fs download /nffs/upver downver
上面命令是下载device的/nffs/upver为本地的downver
注意:无论上传还是下载,device的文件地址必须是device上fs的全路径。
其它命令
除了上面命令外,目前zephyr device还支援下面两个命令:
echo检查device mcumgr回应:下面命令如果device在线会回应hello
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 echo hello
重启device:
mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 reset
mcumgr配置管理
每次下mcumgr命令都加上–conntype serial –connstring=/dev/ttyUSB0,baud=115200是不是觉得很麻烦,mcumgr提供config profile解决该问题:
添加conn profile serial0:
mcumgr conn add serial0 type=serial connstring=”/dev/ttyUSB0,baud=115200”
查看image(等同于mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 image list):
mcumgr image list -c serial0
查看conn profile:
mcumgr conn show
将看到
1 | Connection profiles: |
删除profile serial0:
mcumgr conn delete serial0
参考
https://docs.zephyrproject.org/latest/guides/device_mgmt/index.html
https://github.com/apache/mynewt-mcumgr
https://github.com/apache/mynewt-mcumgr-cli