Coding Spirit



Using some RTOS built-in mbedTLS to connect to AWS IoT Core might fail due to MBEDTLS_ERR_SSL_INVALID_RECORD(-0x7200 or -29184) during ssl handshake. There are several possible causes:

  • The task stack set for mbedTLS running is not enough. Increase task stack and try again.
  • MBEDTLS_SSL_MAX_CONTENT_LEN is not enough. Increase MBEDTLS_SSL_MAX_CONTENT_LEN to 16384 and try again.

When we have a build system like Yocto or Buildroot, cross compiling a CMake project is a simple task - We just need to create a simple CMake inherited recipe. If the SoC vendor only provides toolchain for you to cross compile a single CMake project, CMake toolchain file is a good approach.

Read more »

Sometimes we noticed that printf will only flush after there is a newline in the print string, this behavior is caused by stdout stream buffer, which is line buffered by default. This behavior has been mentioned in ISO C99 standard:

There are few options to make it to print immediately once you called it.

Read more »

SSH connection will automatically drop due to timeout if there is no operation for a period. To keep connection alive, we can config ssh client to send a keepalive periodically. In ~/.ssh/config, there is a parameter for this:

ServerAliveInterval 60

If we set this value to 60, SSH client will send a keepalive every 60 seconds.

Last week when I was trying to run tshark in a Docker container to capture http packets, tshark reported following error even with root user:

tshark: Couldn't run /usr/bin/dumpcap in child process: Operation not permitted

After searching, to access dumcap, we need to add --cap-add options when start container, then add user into wireshark group:

docker run --cap-add=NET_RAW --cap-add=NET_ADMIN $IMAGE
usermod -a -G wireshark $USER

Jenkins is running on port 8080 by default, thus user need to manually add :8080 when access Jenkins. If we make it running on port 80(default http port), user will no longer need to type port number manually.

Read more »