Array of MCU's driver SDKs prepared for effortless remote management of the MCU's peripherals
The REMCU CHIP SDK Collection is a comprehensive compilation of prepared Microcontroller Unit (MCU) Software Development Kits (SDKs) sourced from various chip vendors. These SDKs have undergone meticulous customization and adaptation to seamlessly integrate with the REMCU library on multiple platforms, including Windows, Linux, and MacOS.This collection empowers developers to remotely control MCUs from their PC applications using familiar APIs from the vendor SDKs made possible through the technology of MCU Peripheral Forwarding.
By leveraging the REMCU library, developers can seamlessly integrate the functions of the vendor SDKs into their PC applications. REMCU interrupts all peripheral operations, including storing and loading from registers, and executes them on the chip using OpenOCD or GDB server. This allows developers to conveniently and efficiently control the MCU's peripherals directly from their PC environment.
It is highly recommended to use OpenOCD version v0.10.0-12 or v0.12.0-1.
Note: This guide assumes you already have a GitHub account. If not, please create one before proceeding.
I understand my workflows, go ahead and enable them
button to enable Github Actions for your repository.
build_folder.zip
.
output
directory.You have successfully set up and run a workflow using GitHub Actions in your forked repository. You can further customize and modify workflows as needed by editing the workflow files in the .github/workflows directory of your repository.
To facilitate cross-compilation for Linux and Embedded Linux, you can utilize Docker images specifically designed for this purpose. Docker provides a convenient way to encapsulate the build environment and dependencies, ensuring consistency across different systems. You can use pre-built Docker images or create your own. Here's how you can use Docker for cross-compilation:
Install Docker: If you don't have Docker installed, follow the official Docker installation instructions for your operating system. Visit the Docker website (https://www.docker.com/) and download the appropriate version for your platform.
Pull the Docker Image: Once you have identified the appropriate Docker image, use the following command to pull the image from the Docker registry:
docker pull sermkd/remcu_builder
Obtain the source code:
git clone --recurse-submodules https://github.com/remotemcu/remcu-chip-sdks.git
Run a Docker Container: Start a Docker container based on the pulled image using the following command:
docker run -it --name remcu-build-docker -v $PWD/remcu-chip-sdks:/remcu-chip-sdks -w /remcu-chip-sdks sermkd/remcu_builder
Configure REMCU Lib:
Create a build directory:
mkdir build
cd build
Configure the build using CMake, specifying the your platform toolchain file: for Linux x64
cmake .. -DCMAKE_TOOLCHAIN_FILE=/remcu-chip-sdks/REMCU/platform/linux_x64.cmake
for Raspberry V1:
cmake .. -DCMAKE_TOOLCHAIN_FILE=/remcu-chip-sdks/REMCU/platform/raspberry_pi_armv6_bcm2708.cmake
To build a specific target, run:
make <target>
Replace <target>
with the name of the specific target you want to build. For example, if you have a target named "STM8L15X_MD", the command will be:
make STM8L15X_MD
$ make help
.....
... LL_STM32H750
... STM8L15X_MD
... LPC175X_6X
... EFM32TG840F32
... samd20
... MK64FN1M0VMD12
... XMC1100_series
make
This command will build all the targets defined in the Makefile.After the build process completes successfully, the built library and tests will be located in the "output" directory.
$ ls output
...
STM32F030-StdPeriph_Lib-V1.5.0-01
STM32F042-StdPeriph_Lib-V1.5.0-01
...
I tested on Ubuntu and MacOS Darwin x64
To build REMCU Library, please follow these steps:
Install the necessary dependencies:
To cross-compile for Raspberry Pi, you'll need to download the appropriate toolchain and install the necessary packages. Here are the steps to set up the cross-compilation environment:
Download the Toolchain https://github.com/raspberrypi/tools
Set the RASPBERRY_TOOL_PATH
Environment Variable:
Add the toolchain directory to the RASPBERRY_TOOL_PATH
environment variable. This allows your system to find the cross-compilation tools without specifying the full path every time.
export RASPBERRY_TOOL_PATH=/path/to/tools/
apt-get install gcc-multilib g++-multilib
Obtain the source code:
git clone --recurse-submodules https://github.com/remotemcu/remcu-chip-sdks.git
Get the prebuilt LLVM ADIN fork:
or
Build LLVM ADIN fork (optional): If you prefer to build LLVM ADIN fork yourself instead of using a prebuilt version, follow the instructions provided in the ADIN LLVM repository) to build LLVM ADIN fork.
Configure REMCU Lib:
Open a terminal and navigate to the directory where you cloned the REMCU Library repository.
Create a build directory:
cd remcu-chip-sdks
mkdir build
cd build
To specify the path to the built LLVM ADIN fork using the environment variable LLVM_ADIN_PATH and the bin directory where the opt utility is located, follow these steps:
export LLVM_ADIN_PATH=/path/to/llvm_adin_fork/bin
Configure the build using CMake, specifying the your platform toolchain file: for Linux x64
cmake .. -DCMAKE_TOOLCHAIN_FILE=path/to/remcu-chip-sdks/REMCU/platform/linux_x64.cmake
for MacOS x64:
cmake .. -DCMAKE_TOOLCHAIN_FILE=path/to/remcu-chip-sdks/REMCU/platform/macos_darwin_x64.cmake
for Raspberry V1:
cmake .. -DCMAKE_TOOLCHAIN_FILE=path/to/remcu-chip-sdks/REMCU/platform/raspberry_pi_armv6_bcm2708.cmake
To build a specific target, run:
make <target>
Replace <target>
with the name of the specific target you want to build. For example, if you have a target named "STM8L15X_MD", the command will be:
make STM8L15X_MD
$ make help
.....
... LL_STM32H750
... STM8L15X_MD
... LPC175X_6X
... EFM32TG840F32
... samd20
... MK64FN1M0VMD12
... XMC1100_series
make
This command will build all the targets defined in the Makefile.After the build process completes successfully, the built library and tests will be located in the "output" directory.
$ ls output
...
STM32F030-StdPeriph_Lib-V1.5.0-01
STM32F042-StdPeriph_Lib-V1.5.0-01
...
When using REMCU on a Unix-like system (Linux, macOS, etc.), you should set the LD_LIBRARY_PATH environment variable to the path containing the libremcu.so shared library. This ensures that the test binary can find and load the REMCU library during runtime.
LD_LIBRARY_PATH=output/remcu-STM8L15X_MD-StdPeriph_Driver-V1.4.0-01/ output/remcu-STM8L15X_MD-StdPeriph_Driver-V1.4.0-01/test/test_stm8l_discovery_lcd localhost 6666 0
Note that this guide assumes you are building on a Windows system and requires MSBuild from Visual Studio 2017.
Before proceeding with the LLVM Adin Fork build, ensure that you have the following prerequisites installed on your Windows machine:
MSBuild: Install Microsoft Build Tools or Visual Studio 2017. You can download Visual Studio 2017 Community Edition from the official Microsoft website: https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2017/install/use-command-line-parameters-to-install-visual-studio?view=vs-2017 or https://aka.ms/vs/15/release/vs_BuildTools.exe. Make sure to select the required these components during the installation.
I build with next version:
-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.17134.
-- The C compiler identification is MSVC 19.16.27050.0
-- The CXX compiler identification is MSVC 19.16.27050.0
Python: Install Python on your system. You can download the latest Python version from the official Python website: https://www.python.org/downloads/windows/. Choose the appropriate version for your system (64-bit) and follow the installation instructions.
Git: Install Git version control system. You can download Git from the official Git website: https://git-scm.com/downloads. Choose the appropriate installer for your system and run the installation.
Make for Windows https://gnuwin32.sourceforge.net/packages/make.htm (tested GNU Make 3.81)
Prebuilt LLVM ADIN fork) or build manually
Clang (only version 8): Install Clang version 8, as it is the required compiler for REMCU Toolkit. https://releases.llvm.org/8.0.0/LLVM-8.0.0-win64.exe
Clone the Repository:
git clone --recurse-submodules https://github.com/remotemcu/remcu-chip-sdks.git
Open "x64 Native Tools Command Prompt for Visual Studio 2017" entry to open the command prompt.
Go to Cloned Directory: Change the current directory to the cloned repository directory by running the following command in the command prompt:
cd <cloned_repository_directory>
Replace <cloned_repository_directory>
with the path to the cloned repository on your machine.
Create dir for build
To specify the path to the built LLVM ADIN fork using the environment variable LLVM_ADIN_PATH and the bin directory where the opt utility is located, in Unix-style (Linux/macOS) with the path separator '/' for directories, use the following command:
set LLVM_ADIN_PATH=/path/to/llvm_adin_fork/bin/
Run CMake: Use CMake to configure the build. CMake generates the necessary build files based on the project's CMakeLists.txt file. Run the following command in the command prompt to configure the build inside the "build" directory:
cmake -G "Unix Makefiles" .. -DCMAKE_TOOLCHAIN_FILE=path/to/remcu-chip-sdks/REMCU/platform/windows_x64.cmake
If failed, try another Windows CMAKE_TOOLCHAIN_FILE:
cmake -G "Unix Makefiles" .. -DCMAKE_TOOLCHAIN_FILE=path/to/remcu-chip-sdks/REMCU/platform/windows_x64_clang.cmake
To build a specific target, run:
make <target>
Replace <target>
with the name of the specific target you want to build. For example, if you have a target named "STM8L15X_MD", the command will be:
make STM8L15X_MD
$ make help
.....
... LL_STM32H750
... STM8L15X_MD
... LPC175X_6X
... EFM32TG840F32
... samd20
... MK64FN1M0VMD12
... XMC1100_series
make
This command will build all the targets defined in the Makefile.After the build process completes successfully, the built library and tests will be located in the "output" directory.
$ dir output
...
STM32F030-StdPeriph_Lib-V1.5.0-01
STM32F042-StdPeriph_Lib-V1.5.0-01
...
to successfully run the test binary that utilizes REMCU, you should ensure that the remcu.dll library is accessible from the directory where you execute the test executable.
If you encounter error messages such as
(ERROR)$#/#:207: Can't read value from addr: 0x40013008, typesize: 16
(ERROR)$#/#:141: can't parse answer of server: [31] invalid command name "ocd_mdh"�
during the usage of REMCU and the OpenOCD server, it is advisable to check the version of OpenOCD you are using. It is highly recommended to use OpenOCD version v0.10.0-12 or v0.12.0-1.
Using the recommended version of OpenOCD ensures better compatibility and stability with REMCU. If you are unable to change the OpenOCD version for any reason, an alternative solution is to utilize the GDB server instead of the OpenOCD server. You can achieve this by utilizing the remcu_connect2GDB function to connect to the GDB server.
remcu_connect2GDB("localhost", 3333, 0);
If you encounter an error message like:
"/build/build_llvm_8_adin/bin//opt" -adin -S /build/mcu-lib-collection/build-clang-8/stm32/stm32f3/STM32F3-Discovery_FW_V1.1.0-prefix/src/STM32F3-Discovery_FW_V1.1.0-build/STM32F30X-StdPeriph_Lib-V1.1.0-01/system_stm32f30x.c.ll -o /build/mcu-lib-collection/build-clang-8/stm32/stm32f3/STM32F3-Discovery_FW_V1.1.0-prefix/src/STM32F3-Discovery_FW_V1.1.0-build/STM32F30X-StdPeriph_Lib-V1.1.0-01/system_stm32f30x.c.adin.ll
/build/build_llvm_8_adin/bin//opt: /build/mcu-lib-collection/build-clang-8/stm32/stm32f3/STM32F3-Discovery_FW_V1.1.0-prefix/src/STM32F3-Discovery_FW_V1.1.0-build/STM32F30X-StdPeriph_Lib-V1.1.0-01/system_stm32f30x.c.ll:312:200: error: invalid field 'variables'
!62 = distinct !DISubprogram(name: "SystemInit", scope: !3, file: !3, line: 169, type: !63, isLocal: false, isDefinition: true, scopeLine: 170, flags: DIFlagPrototyped, isOptimized: false, unit: !2, variables: !65)
^
/build/REMCU/platform/..//mcu_utils//common.mk:56: recipe for target 'Libraries/CMSIS/Device/ST/STM32F30x/Source/Templates/system_stm32f30x.ll' failed
during the build process, specifically after the instrumentation operation using opt
, it is recommended to check the versions of Clang and the ADIN opt
tool. To ensure compatibility and avoid such errors, both Clang and ADIN opt should be version 8.0.0.
$ $LLVM_ADIN_PATH/opt --version
LLVM (http://llvm.org/):
LLVM version 8.0.0svn
Optimized build.
Default target: x86_64-unknown-linux-gnu
Host CPU: icelake-client
$ clang --version
clang version 8.0.0-3~ubuntu16.04.1 (tags/RELEASE_800/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-8/bin
Mismatched versions of Clang and ADIN opt may result in compatibility issues and error messages during the build process. Therefore, it is crucial to ensure that you are using the correct versions to maintain a smooth and successful build