Important! Please read this section first.
This code is provided as a public preview, it is still under development and notwithstanding the license attached to this code, should not be used in any commercial application at this time. For any questions, please post to the NXP community.
This code is available under the MIT license except where stated otherwise such as the imxnetmini driver and OpteeClientLib.
SoC Type | Board Vendor | Board Name | Board Package Name |
---|---|---|---|
i.MX 6Quad | SolidRun | HummingBoard Edge | HummingBoardEdge_iMX6Q_2GB |
i.MX 6Quad | NXP | i.MX 6Quad SABRE | Sabre_iMX6Q_1GB |
i.MX 6QuadPlus | NXP | i.MX 6QuadPlus SABRE | Sabre_iMX6QP_1GB |
i.MX 6DualLite | SolidRun | HummingBoard Edge | HummingBoardEdge_iMX6DL_1GB |
i.MX 6Solo | SolidRun | HummingBoard Edge | HummingBoardEdge_iMX6S_512MB |
i.MX 6SoloX | UDOO | Neo Full | UdooNeo_iMX6SX_1GB |
i.MX 7Dual | CompuLab | IoT Gateway, CL-SOM-iMX7+SBC-iMX7 | ClSomImx7_iMX7D_1GB |
i.MX 7Dual | NXP | i.MX 7Dual SABRE | Sabre_iMX7D_1GB |
A table of the currently enabled features for each board can be found here. For hardware issues, please contact the hardware vendor.
This repository uses submodules and should be cloned with git clone --recurse-submodules
The following tools are required to build the driver packages and IoT Core FFU: Visual Studio 2017, Windows Kits (ADK/SDK/WDK), and the IoT Core OS Packages.
- Make sure that you install Visual Studio 2017 before the WDK so that the WDK can install a required plugin.
- Download from https://www.visualstudio.com.
- During install select Desktop development with C++.
- During install select the following in the Individual components tab. If these options are not available try updating VS2017 to the latest release:
- VC++ 2017 version 15.9 v14.16 Libs for Spectre (ARM)
- VC++ 2017 version 15.9 v14.16 Libs for Spectre (ARM64)
- VC++ 2017 version 15.9 v14.16 Libs for Spectre (X86 and x64)
- Visual C++ compilers and libraries for ARM
- Visual C++ compilers and libraries for ARM64
- IMPORTANT: Make sure that any previous versions of the ADK and WDK have been uninstalled!
- Install ADK 1809
- Install WDK 1809
- Make sure that you allow the Visual Studio Extension to install after the WDK install completes.
- If the WDK installer says it could not find the correct SDK version, install SDK 1809
- Visit the Windows IoT Core Downloads page and download "Windows 10 IoT Core Packages – Windows 10 IoT Core, version 1809 (LTSC)".
- Open the iso and install
Windows_10_IoT_Core_ARM_Packages.msi
Test certificates must be installed to generate driver packages on a development machine.
- Open an Administrator Command Prompt.
- Navigate to your newly cloned repo and into the folder
imx-iotcore\build\tools
. - Launch
StartBuildEnv.bat
. - Run
SetupCertificate.bat
to install the test certificates. - Make sure that submodules have been cloned. If you cloned with
--recurse-submodules
then this step won't output anything.git submodule init git submodule update
- Launch Visual Studio 2017 as Administrator.
- Open the solution iMXPlatform.sln (imx-iotcore\build\solution\iMXPlatform).
- Change the build type from Debug to Release.
- To build press Ctrl-Shift-B or choose Build -> Build Solution from menu. This will compile all driver packages then generate the FFU.
- Depending on the speed of the build machine FFU generation may take around 10-20 minutes.
- After a successful build the new FFU will be located in
imx-iotcore\build\solution\iMXPlatform\Build\FFU\HummingBoardEdge_iMX6Q_2GB\
. - The FFU contains firmware components for the HummingBoard Edge with the Quad Core SOM. This firmware is automatically applied to the SD Card during the FFU imaging process.
In order to build an FFU for another board you'll need to modify GenerateFFU.bat in the Build Scripts folder of the Solution Explorer. Comment out the default HummingBoardEdge_iMX6Q_2GB build with REM and uncomment any other boards you want to build.
REM cd /d %BATCH_HOME%
REM echo "Building HummingBoardEdge_iMX6Q_2GB FFU"
REM call BuildImage HummingBoardEdge_iMX6Q_2GB HummingBoardEdge_iMX6Q_2GB_TestOEMInput.xml
cd /d %BATCH_HOME%
echo "Building Sabre_iMX6Q_1GB FFU"
call BuildImage Sabre_iMX6Q_1GB Sabre_iMX6Q_1GB_TestOEMInput.xml
- Follow the instructions in the IoT Core Manufacturing Guide to flash the FFU to an SD Card using the Windows IoT Core Dashboard.
- Follow the instructions in the Booting WinPE and Flashing eMMC document.
- Follow the instructions in the Adding a New Board document.
- Follow the instructions in the Adding a New Driver document.
- Build the GenerateBSP project to create a BSP folder in the root of the repository.
- Setup the IoT ADK AddonKit (https://github.com/ms-iot/iot-adk-addonkit) following the instructions from the IoT Core Manufacturing Guide (https://docs.microsoft.com/en-us/windows-hardware/manufacture/iot/iot-core-manufacturing-guide)
- Copy the BSP\HummingBoard folder to iot-adk-addonkit\Workspace\Source-arm\BSP\
- Open an IoT ADK AddonKit environment with
iot-adk-addonkit\IoTCoreShell-arm.cmd
- Run
set SIGNFILES=NONE
- This is to stop the ADK AddonKit from resigning the HAL Extensions with an unbootable signature.
- Run
buildpkg.cmd all
- Run
newproduct.cmd HummingBoard HummingBoardEdge_iMX6Q_2GB
- Run
buildimage.cmd HummingBoard Test
Building custom firmware into an FFU requires additional steps:
- Building and Updating Firmware
- Firmware Boot Documentation
- Testing your BSP
- Creating Windows PE images and booting from eMMC
The firmware code can be found in the following repos:
- U-Boot: https://github.com/ms-iot/u-boot.git
- OP-TEE: https://github.com/ms-iot/optee_os.git
- UEFI:
- Firmware TPM2.0:
BSP - Generated at build time. Contains Board Support Packages for the IoT ADK AddonKit.
build - Contains Board Packages, build scripts, and the VS2017 solution file.
driver - Contains driver sources.
documentation - Contains usage documentation.
hal - Contains hal extension sources.
For more information about Windows 10 IoT Core, see our online documentation here
We are working hard to improve Windows 10 IoT Core and deeply value any feedback we get.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.