Zephyr使用mcumgr
本文说明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命令行工具
go get github.com/apache/mynewt-mcumgr-cli/mcumgr
安装玩后执行
mcumgr --help
可以看见对应的子命令
mcumgr helps you manage remote devices
Usage:
mcumgr [flags]
mcumgr [command]
Available Commands:
config Read or write a config value on a device
conn Manage mcumgr connection profiles
crash Send a crash command to a device
datetime Manage datetime on a device
echo Send data to a device and display the echoed back data
fs Access files on a device
help Help about any command
image Manage images on a device
interactive Run mcumgr interactive mode (used for COAP only)
log Manage logs on a device
mpstat Read mempool statistics from a device
res Access a CoAP resource on a device
reset Perform a soft reset of a device
run Run test procedures on a device
stat Read statistics from a device
taskstat Read task statistics from a device
version Display the mcumgr version number
device端 链接到标题
在zepyhr应用的prj.conf添加如下配置项,编译后烧写入zephyr device
# 配置启动mcumgr
CONFIG_MCUMGR=y
# 配置SMP可以通过UART
CONFIG_MCUMGR_SMP_UART=y
# 配置SMP可以通过BT
CONFIG_MCUMGR_SMP_BT=y
# MCUMGR支援image管理
CONFIG_MCUMGR_CMD_IMG_MGMT=y
# MCUMGR支援OS管理
CONFIG_MCUMGR_CMD_OS_MGMT=y
# MCUMGR支援统计信息
CONFIG_MCUMGR_CMD_STAT_MGMT=y
# MCUMGR支援文件系统管理
CONFIG_MCUMGR_CMD_FS_MGMT=y
使用 链接到标题
命令说明 链接到标题
一个典型通过串口的命令如下:
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 也可以通过蓝牙进行操作
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使用量
task pri tid runtime csw stksz stkuse last_checkin next_checkin
idle 15 1 0 0 80 12 0 0
main 0 2 0 0 256 133 0 0
sysworkq 255 0 0 0 512 158 0 0
要获得task信息,编译image时还需要添加如下配置选项
CONFIG_THREAD_MONITOR=y
CONFIG_THREAD_STACK_INFO=y
CONFIG_THREAD_NAME=y
CONFIG_INIT_STACKS=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 可以看见
stat groups:
smp_svr_stats
显示指定模块的统计信息 mcumgr –conntype serial –connstring=/dev/ttyUSB0,baud=115200 stat smp_svr_stats 可以看到
stat group: smp_svr_stats
1286 s0
文件系统管理 链接到标题
文件系统可以通过主机向zephyr device上传和下载文件,前提是device必须支援文件系统,例如配置nffs
# 加入Flash文件系统
CONFIG_FLASH=y
CONFIG_FILE_SYSTEM=y
CONFIG_FILE_SYSTEM_NFFS=y
CONFIG_FS_NFFS_FLASH_DEV_NAME="NRF_FLASH_DRV_NAME"
上传文件 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 将看到
Connection profiles:
serial0: type=serial, connstring='/dev/ttyUSB0,baud=115200'
删除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