Mistake on this page? Email us

Troubleshooting the tutorials

Problem: Linux deployment fails

Yocto deployment for Linux build is failing with:

[mbed] ERROR: Unable to clone repository (ssh: ....)

Solution

Releases before Client 3.2.0 and Edge 0.10.0 used git protocol based metalayer references. This works only, if your environment is properly authenticated to GitHub.

You can try this out by doing a manual git clone operation using the same git protocol, for example:

git clone [email protected]:PelionIoT/mbed-cloud-client.git

If this command fails, you know your authentication to GitHub is not correct.

As an alternative, you can change the metalayers to use HTTPS protocol instead. It does not require authentication (for public repositories).

Note: This also applies to Device Management Edge.

Problem: How do I enable debug logs?

Please see Error handling and debugging for details.

Problem: Client application errors in developer mode

When using the client application in developer mode, you may see one of these errors in your console:

Device not configured for Device Management - exit

Or

fcc_init() failed with Error 12!

Solution

Your SD card is corrupted. Use your computer to format the SD card with the FAT32 filesystem. If the error persists, you may have to use a new SD card.

Problem: Device Management Client (or Edge) seems to hang

The application seems to hang in Linux. It does not print out anything or connect, and just freezes. An example log looks like:

[INFO][fcc ]: key_config_manager.c:159:kcm_item_store:===> item name =  mbed.UseBootstrap len=17, data size=4
[INFO][fcc ]: key_config_manager.c:101:kcm_init:===>
[DBG ][fcc ]: storage.c:72:storage_init:===>
[INFO][esfs]: esfs_init - enter
[DBG ][fcc ]: storage.c:77:storage_init:<===
[INFO][fcc ]: key_config_manager.c:118:kcm_init:<===
[DBG ][fcc ]: key_config_manager.c:42:kcm_create_complete_name:===> name len=17
[DBG ][fcc ]: key_config_manager.c:65:kcm_create_complete_name:<=== kcm_buffer_size_allocated_out=  26
[DBG ][fcc ]: storage.c:258:storage_file_create:===> file_name_length=26
[INFO][esfs]: esfs_create - enter

Solution

Wait patiently; entropy collection on a freshly booted system can take up to 20 minutes. Alternatively, you can install and configure rng-tools to make the entropy collection faster.

Explanation:

The application is blocked while waiting for the entropy to be collected. The random reading from /dev/random or /dev/hwrng is a blocking call, and the reading will not take place until sufficient entropy is collected.

Note: This also applies to Device Management Edge.

Problem: ARM C 5.06 compiler fails to work in Linux (Internal fault:)

Starting the compilation with mbed compile -t ARMC5 just fails with:

Internal fault: [0x87ecef:5060750]

Solution:

Install the required libraries:

sudo apt-get install libc6:i386 libc6-i386

Explanation:

ARM C 5.06 compiler has some dependencies, that are not installed automatically when you install the compiler.

Problem: Device registers but is not visible in Portal

When you delete a device (in Portal or using API) that has registered with a valid developer certificate, it will no longer show in the devices list in Portal. However, the device can still connect to the LwM2M server and you can manage it using REST APIs.

This happens only to devices created with a developer certificate. You cannot delete devices that user production certificates.

Solution:

You need to force the device to bootstrap, so that the device gets a new identity. You can either restore the factory settings, which clears out the storage, or reflash the device.

This will make the device appear again in the devices list.

Problem: Client fails to compile with error: 'APPLICATION_ADDR' undeclared (first use in this function)

This error typically indicates a missing bootloader file. If mbed cli toolchain does not find the bootloader file, it automatically converts to non-bootloader mode for compilation, and APPLICATION_ADDR is not defined. This is reported in Mbed OS issue #11098.

Solution:

Ensure you have a valid bootloader binary in the location defined in your mbed_app.json target configuration.

Note: The configuration uses a relative path and must target the file location correctly. Due to this, mbed compile --app-config my-configs/my-config.json has a different relative base level than mbed compile --app-config my-config.json

Problem: Firmware update failed due to certificate not found (Pelion Device Management Client)

When you use a new example with new developer credentials, the device preserves certificates between device flashes (due to old certificates on KVstore that are not erased during flashing). This can lead to a certificate not found error when you update firmware.

Error code:

  • ARM_UC_ControlCenter_ReportUpdateResult: 208
  • ARM_UC_UPDATE_RESULT_MANIFEST_CERTIFICATE_NOT_FOUND = 208
[DBG ][UC  ]: [MMGR] .\mbed-cloud-client\update-client-hub\modules\manifest-manager\source\arm_uc_mmStateSelector.c:114: < ARM_UC_mmFSM CC:77 (ARM_UC_CM_ERR_NOT_FOUND)
[DBG ][UC  ]: [HUB ] .\mbed-cloud-client\update-client-hub\source\update_client_hub_event_handlers.c:209: ARM_UC_MM_RC_ERROR
[DBG ][UC  ]: [HUB ] .\mbed-cloud-client\update-client-hub\source\update_client_hub_error_handler.c:49: error: 4D430002 5
[DBG ][UC  ]: [HUB ] .\mbed-cloud-client\update-client-hub\source\update_client_hub_error_handler.c:413: ARM_UC_CM_ERR_NOT_FOUND: 4D430002
[DBG ][UC  ]: [CTRL] .\mbed-cloud-client\update-client-hub\modules\control-center\source\arm_uc_control_center.c:379: ARM_UC_ControlCenter_ReportUpdateResult: 208
[DBG ][UC  ]: [SRCE] .\mbed-cloud-client\update-client-hub\modules\lwm2m-mbed\source\firmware_update.c:280: firmware_update_send_update_result()
[DBG ][UC  ]: [HUB ] .\mbed-cloud-client\update-client-hub\source\update_client_hub_state_machine.c:949: ARM_UC_HUB_STATE_WAIT_FOR_ERROR_ACK
[DBG ][UC  ]: [MMGR] .\mbed-cloud-client\update-client-hub\modules\manifest-manager\source\arm_uc_mmStateSelector.c:127: < ARM_UC_mmCallbackFSMEntry CM:2 (ARM_UC_CM_ERR_NOT_FOUND)

Solution:

Erase the storage through the following command:

pyocd erase --mass-erase

Or compile as:

-DRESET_STORAGE

Note: RESET_STORAGE erases the KVstore at every reboot. To update firmware, you must recompile the update-candidate image without RESET_STORAGE. For a developer-mode device, this means generating a new device_id at every reboot.

Problem: pal-platform crashes with "'DynamicChoice' object has no attribute 'case_sensitive'"

This error is caused by pal-platform Python script incompatibility with changes to the Python module click. We have fixed the issue in Client release 4.4.0, but for earlier releases, you need to limit click version to 7.0.

Solution:

  • Use click version 7.0.
    • Modify the first line of requirements.txt under the pal-platform to be click==7.0.
    • We strongly recommend that you use Python virtual environments. Mbed OS 5.14 and later releases are asking for click version 7.0, too - but we do not know if they will later on request something different.
  • Alternatively, update your client to version 4.4.0 or newer. We recommend updating the client to the latest versions to receive the latest bug fixes.

Problem: Active firmware integrity check fails when flashing firmware in HEX format

This error can occur when you build an Mbed OS application in HEX format and flash the application using the pyocd tool:

Mbed Bootloader
[DBG ] Active firmware integrity check failed
No Update image
[ERR ] Active firmware invalid
Failed to jump to application!

For more details, see mbed-os issue #13831.

Solution:

Use DAPLInk to flash the firmware image or erase the internal flash by running:

pyocd erase --mass-erase