Difficulty: Beginner
Estimated Time: 15-30 minutes

Prerequisites: experience with C/C++ and Unix shell.

Since recently the develop branch of Sming Framework comes with a Host Emulator. The Sming Host Emulator(SHE) allows Sming applications to be built as an executable to run on the development host (Windows or Linux).

This is a source-level emulator for developing and testing new framework code prior to flashing a real device.

This is not a machine emulator; if you need something operating at a lower level take a look at QEMU.

This tutorial will demonstrate how SHE can be used during development for finding and analyzing problems easier and for testing your code before flashing it on a real device.

Congratulations! You are now a Sming Host Emulator expert! Further information can be found in the Host Emulator documentation.

We thank you for your time and hope to see you as a user or even contributor to Sming Framework.

If you like Sming, give it a star, or fork it and contribute!

GitHub stars GitHub forks

Sming Host Emulator

Step 1 of 4

Step 1 - Preparing the environment.

Source code

Let's get the latest source code from the develop branch. To do this just clone the repository using the following command git clone https://github.com/SmingHub/Sming.git

Environmental variables


We must set SMING_HOME to the location of the Sming Framework source code we've just downloaded. Do this by running export SMING_HOME=$(pwd)/Sming/Sming.


To use the Host Emulator we must set this variable to Host, like this: export SMING_ARCH=Host.




CMake 3.8 or newer is required to build LWIP, our network stack. One of the ways to install a newer version is to run the commands below:

cd /tmp
wget https://github.com/Kitware/CMake/releases/download/v3.14.4/cmake-3.14.4-Linux-x86_64.sh 
sudo mkdir /opt/cmake
sudo sh cmake-3.14.4-Linux-x86_64.sh --skip-license --prefix=/opt/cmake
sudo ln -s /opt/cmake/bin/cmake /usr/bin/cmake

32-bit libraries

Ensure you are using relatively recent compilers, with 32-bit libraries available. For Linux, you may require the gcc-multilib and g++-multilib packages to build 32-bit executables on a 64-bit OS. To install the required packages under Ubuntu run the following command: sudo apt-get install -y gcc-multilib g++-multilib


Valgrind is a tool that helps find memory issues within your application. In order to install it we need to execute the following command: sudo apt-get install -y valgrind libc6-dbg:i386



Before we start with our first sample we should setup special networking interfaces for our applications. We have a script that does that for us. To see its content execute the command below:

cat $SMING_HOME/Arch/Host/Tools/setup-network-linux.sh

Now it is time to actually run the script.

$SMING_HOME/Arch/$SMING_ARCH/Tools/setup-network-linux.sh ens3

It will create a tap0 network interface for our applications and will allow our applications to access Internet.

With that we are ready with the initial setup. Time to go to the next step.