{"id":50622066,"url":"https://github.com/ksachdeva/zephyr-upgrade-mcumgr","last_synced_at":"2026-06-06T13:01:40.297Z","repository":{"id":333784681,"uuid":"1138467203","full_name":"ksachdeva/zephyr-upgrade-mcumgr","owner":"ksachdeva","description":"An example to showcase upgrade of Zephyr Firmware using MCUMgr","archived":false,"fork":false,"pushed_at":"2026-01-21T01:36:01.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-21T12:50:03.299Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ksachdeva.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-20T17:56:03.000Z","updated_at":"2026-01-21T01:36:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ksachdeva/zephyr-upgrade-mcumgr","commit_stats":null,"previous_names":["ksachdeva/zephyr-upgrade-mcumgr"],"tags_count":null,"template":false,"template_full_name":"ksachdeva/zephyr-template","purl":"pkg:github/ksachdeva/zephyr-upgrade-mcumgr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksachdeva%2Fzephyr-upgrade-mcumgr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksachdeva%2Fzephyr-upgrade-mcumgr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksachdeva%2Fzephyr-upgrade-mcumgr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksachdeva%2Fzephyr-upgrade-mcumgr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ksachdeva","download_url":"https://codeload.github.com/ksachdeva/zephyr-upgrade-mcumgr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksachdeva%2Fzephyr-upgrade-mcumgr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33983046,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-06T13:01:33.049Z","updated_at":"2026-06-06T13:01:35.300Z","avatar_url":"https://github.com/ksachdeva.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zephyr Upgrade via MCUMgr\n\n## Setup\n\n```bash\nuv sync\n```\n\n```bash\n# need to do only once at the time of repo setup\nuv run pre-commit install\nuv run west update\nuv run west sdk install\n```\n\n## Generate key pair\n\n```bash\nuv run poe key-gen\n```\n\nThis would create RSA 2048 key pairs for MCUBoot \u0026 App Firmware\n\nSee `poe.toml` for exact commands\n\n## Multi stage build using `sysbuild` [Version 0.1.0+2]\n\n\u003e Note even though the doc/cmdline suggest that path to key files can be relative, it does not work; safer to provide full path!\n\n```bash\nuv run west build -b esp32_devkitc/esp32/procpu -p always example-app --sysbuild -- '-DSB_CONFIG_BOOT_SIGNATURE_KEY_FILE=\"/Users/kapil.sachdeva/Desktop/Dev/myoss/zephyr-upgrade-mcumgr/assets/bootloader-key.pem\"' '-DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"/Users/kapil.sachdeva/Desktop/Dev/myoss/zephyr-upgrade-mcumgr/assets/app-key.pem\"' '-DEXTRA_CONF_FILE=transport-serial.conf'\n```\n\n```bash\n# use this command to make sure that config from\n# transport-serial.conf made into the final config\ngrep CONFIG_BOOT_SIGNATURE_KEY_FILE build/mcuboot/zephyr/.config\ngrep CONFIG_MCUMGR_TRANSPORT_UART build/example-app/zephyr/.config\ngrep CONFIG_MCUBOOT_SIGNATURE_KEY_FILE build/example-app/zephyr/.config\n```\n\n**See the signature dump**\n\n```bash\nuv run poe sign-dump\n```\n\n### Flash \u0026 Monitor\n\n```bash\nuv run west flash\n```\n\n```bash\nuv run west espressif monitor\n```\n\n## Build a new image with version 0.2.0+3\n\n```bash\nuv run west build -b esp32_devkitc/esp32/procpu -p always example-app --sysbuild -- '-DSB_CONFIG_BOOT_SIGNATURE_KEY_FILE=\"/Users/kapil.sachdeva/Desktop/Dev/myoss/zephyr-upgrade-mcumgr/assets/bootloader-key.pem\"' '-DEXTRA_CONF_FILE=transport-serial.conf' '-DCONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION=\"0.2.0+3\"' '-DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"/Users/kapil.sachdeva/Desktop/Dev/myoss/zephyr-upgrade-mcumgr/assets/app-key.pem\"'\n```\n\n```bash\n# verify\ngrep CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION build/example-app/zephyr/.config\ngrep CONFIG_MCUMGR_TRANSPORT_UART build/example-app/zephyr/.config\n```\n\n### Upgrade using `smpmgr`\n\n```bash\n# Let's read the state of the image\n# You should only see slot0\nuv run smpmgr --port /dev/tty.usbserial-0001 --baudrate 115200 image state-read\n```\n\n```\n# example output\nImageState(\n    slot=0,\n    version='0.1.0.2',\n    image=None,\n    hash=HashBytes('3037020FA153516370291611B7EB03D4E268151D9D43736CEDEE4DAD9DA79050'),\n    bootable=True,\n    pending=False,\n    confirmed=True,\n    active=True,\n    permanent=False\n)\nsplitStatus: 0\n```\n\n```bash\n# upload the new image\nuv run smpmgr --port /dev/tty.usbserial-0001 --baudrate 115200 upgrade build/example-app/zephyr/zephyr.signed.bin\n```\n\n\n```bash\n# Let's read the state of the image\n# Now we should have slot0 and slot1\nuv run smpmgr --port /dev/tty.usbserial-0001 --baudrate 115200 image state-read\n```\n\n```\n# example output\nImageState(\n    slot=0,\n    version='0.1.0.2',\n    image=None,\n    hash=HashBytes('3037020FA153516370291611B7EB03D4E268151D9D43736CEDEE4DAD9DA79050'),\n    bootable=True,\n    pending=False,\n    confirmed=True,\n    active=True,\n    permanent=False\n)\nImageState(\n    slot=1,\n    version='0.2.0.3',\n    image=None,\n    hash=HashBytes('62828ECB3E52387A7D54C2733413C8438B3B0F9FAA67B991819E5341055333F9'),\n    bootable=True,\n    pending=False,\n    confirmed=False,\n    active=False,\n    permanent=False\n)\nsplitStatus: 0\n```\n\nNow we make the image slot1 active\n\n```bash\n# Change the hash to what you see in slot1\n# Note import to put \"\" around the hash (learned the hard way :())\nuv run smpmgr --port /dev/tty.usbserial-0001 --baudrate 115200 image state-write \"62828ECB3E52387A7D54C2733413C8438B3B0F9FAA67B991819E5341055333F9\"\n```\n\n```bash\n# use monitor to see the new version\nuv run west espressif monitor\n```\n\n```bash\n# or state-read to see that new image must be active\nuv run smpmgr --port /dev/tty.usbserial-0001 --baudrate 115200 image state-read\n```\n\n## Important Config items\n\n\n```bash\n# Defined in prj.conf\n\n# Direct dependencies of MCUMGR\nCONFIG_NET_BUF=y\nCONFIG_ZCBOR=y\n\nCONFIG_MCUMGR=y\n\n# This enables image management commands\nCONFIG_FLASH=y\nCONFIG_FLASH_MAP=y\nCONFIG_STREAM_FLASH=y\nCONFIG_IMG_MANAGER=y\nCONFIG_MCUMGR_GRP_IMG=y\n\n# we need to turn this ON otherwise smpmgr fails on state-write\n# confirmation\nCONFIG_MCUMGR_GRP_OS=y\n\n# Bootloader specific settings\nCONFIG_BOOTLOADER_MCUBOOT=y\nCONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION=\"0.1.0+2\"\n```\n\n```bash\n# Defined in transport-serial.conf\n\n# Deps of CONFIG_MCUMGR_TRANSPORT_UART\nCONFIG_CONSOLE=y\nCONFIG_BASE64=y\nCONFIG_CRC=y\n\nCONFIG_MCUMGR_TRANSPORT_UART=y\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fksachdeva%2Fzephyr-upgrade-mcumgr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fksachdeva%2Fzephyr-upgrade-mcumgr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fksachdeva%2Fzephyr-upgrade-mcumgr/lists"}