Windows On ARM BSP User Guide for ROM-5720
Contents
Windows On ARM (WoA) Version
Windows : 20H2 (en_windows_10_iot_enterprise_version_20h2_arm64_dvd_fe0947da.iso)
NXP BSP : W1809 (W1809_1_1_0_imx-firmware.tgz, W1809_1_1_0_imx-iotcore.zip)
Released Image
OS_Support_List_Windows_On_Arm_for_ROM5720
Build Environment on Host
Currently, we adopt Docker as build environment.
You can get the advrisc/u14.04-410clbv1 Docker image for developing WoA projects.
Docker command:
$ docker pull advrisc/u14.04-410clbv1
Run Docker example
Step1 Run docker container (example)
sudo docker run -it --name <CONTAINER_NAME> -v <PATH_TO_BSP>:/home/adv/BSP:rw advrisc/u14.04-410clbv1 /bin/bash
Step2 In container, change the user. (example)
adv@7cc0fa834366:~$ sudo chown adv:adv -R BSP
Install Dependency Packages
$ sudo apt-get update $ sudo apt-get install -y attr build-essential python python-dev python-crypto python-wand device-tree-compiler bison flex swig iasl uuid-dev wget git bc libssl-dev zlib1g-dev python3-pip
New for 1903 UEFI
$ sudo apt-get install -y gcc g++ make python3 mono-devel
Upgrade Python 3.6
$ wget https://www.python.org/ftp/python/3.9.0/Python-3.6.3.tgz $ tar -xvf Python-3.6.3.tgz $ cd Python-3.6.3 $ sudo ./configure --enable-optimizations --with-ensurepip=install $ make -j 8 $ sudo make altinstall
Configure python alternatives
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.4 1 $ sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.6 2
$ sudo pip3.6 install --upgrade pip $ pip install pycryptodome
Upgrade Git 2.25 (> 2.11)
$ sudo apt-get install -y tcl build-essential tk gettext $ wget https://github.com/git/git/archive/v2.25.0.tar.gz $ tar zxvf v2.25.0.tar.gz $ cd git-2.25.0/ $ make configure $ ./configure --prefix=/usr $ make all $ sudo make install
ToolChain
$ cd ~ $ wget https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/aarch64-linux-gnu/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz $ tar xf gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz $ rm gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz
Getting Source Code
Set up bootloader / UEFI source code
W1809_1_1_0_imx-firmware.tgz |
W1809_1_1_0_imx-iotcore.zip |
|
|
Extract BSP files
$ mkdir <new bsp folder> $ unzip W*_imx-iotcore*.zip -d <new bsp folder> $ tar -xf W*_imx-firmware*.tgz -C <new bsp folder>
Add more additional files
$ git clone https://AIM-Linux@dev.azure.com/AIM-Linux/ms-iot-ent/_git/adv-build $ cp -a adv-build/adv-buildme64.sh <new bsp folder> $ cp -a adv-build/enterprise <new bsp folder> $ cp -a adv-build/ROM5720_iMX8M_2GB <new bsp folder>/imx-iotcore/build/board/
Update UEFI
$ cd <new bsp folder> $ rm -rf mu_platform_nxp $ git clone https://AIM-Linux@dev.azure.com/AIM-Linux/ms-iot-ent/_git/mu_platform_nxp $ cd mu_platform_nxp $ sudo pip install -r requirements.txt --upgrade $ cp -a /usr/local/lib/python3.6/site-packages/* /home/adv/.local/lib/python3.6/site-packages/
Update U-Boot
$ cd ../u-boots $ rm -rf u-boot-imx_arm64 $ git clone https://AIM-Linux@dev.azure.com/AIM-Linux/ms-iot-ent/_git/u-boot-imx_arm64
All of files are collected on git server. please check following.
$ cd ~/BSP $ mkdir WoA $ cd WoA $ git config --global user.name "Your Name" $ git config --global user.email you@example.com $ ../repo/repo init -u https://AIM-Linux@dev.azure.com/AIM-Linux/ms-iot-ent/_git/manifest -m W1809_1_1_0.xml $ ../repo/repo sync
Build Firmware / UEFI
$ export AARCH64_TOOLCHAIN_PATH=~/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- $ ./adv-buildme64.sh -b 5720 -t all -bc DEBUG
PS: Before build ROM-5720, there are something have done first.
1).Replace keyword 'python3' with 'python' in adv-buildme64.sh.
2).The path of AARCH64_TOOLCHAIN_PATH must be in the HOME path.
3).Build EVK configuration first.
$ ./adv-buildme64.sh -b 8M -t all -bc DEBUG
4).for ROM-5720 bootloader setting, the soc.mak have to be modified.
The firmware will be generated in the following
<PROJECT_BSP>/imx-iotcore/build/board/<BOARD_NAME>/Package/BootLoader/flash.bin
The uefi will be generated in the following
<PROJECT_BSP>/imx-iotcore/build/board/<BOARD_NAME>/Package/BootFirmware/uefi.fit
Build Driver
Set up build environment
Make sure the project name in ROM5720_iMX8M_2GB_Package.vcxproj
<ProjectName>ROM5720_iMX8M_2GB</ProjectName>
Right click "Board Packages" -> Add -> Exist Project in the Solution Explorer panel
<BSP>\imx-iotcore\build\board\ROM5720_iMX8M_2GB\Package\ROM5720_iMX8M_2GB_Package.vcxproj
Right click "GenerateBSP" and select 'properties' Click NMake -> Build Command Line -> Edit, and added following setting
call ..\..\..\tools\BuildBSP.bat iMX8 ROM5720_iMX8M_2GB
Build
Open Visual Studio as administrator Open solution file
<BSP>/imx-iotcore/build/solution/iMXPlatform/iMXPlatform.sln
Right click 'GenerateBSP' and select 'build'
If get any errors about Hal*,
The specified timestamp server either could not be reached or… HalExtiMXDma
please remove following projects
Go to following path, add those three projects back
<BSP>\imx-iotcore\components\NXP.SignedDrivers\VsProjects
Build each hal* project and build 'GenerateBSP' again The build result will be in the
<BSP>\imx-iotcore\BSP\ROM5720_iMX8M_2GB\
Flash Image
Make OS Installer
Extract install.wim from Windows IoT image
en_windows_10_iot_enterprise_version_20h2_arm64_dvd_fe0947da.iso/sources/
Extract Windows IoT for NXP - IoTEntOnNXP.v1.3.zip and put the install.wim in the 'image' folder Build WinPE Image
Using v1.3 make-winpe-enterprise-windebug.cmd
c:\>cd IoTEntOnNXP.v1.3 c:\IoTEntOnNXP.v1.3>make-winpe-enterprise-windebug.cmd /testbin /image ..\image\install.wim /splitwim /windebug /winpedebug
Get SD card number
1).Open command line as administrator
2).Check number by enter following (SD card 16GB)
C:\Windows\system32>diskpart DISKPART> list disk Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 465 GB 1024 KB * Disk 1 Online 14 GB 0 B *
Flash image to SD card
c:\IoTEntOnNXP>make-winpe-enterprise-windebug.cmd /apply 1
Flash EMMC
To flash image to EMMC via SD card, please refer to HERE.
Reference
Update uefi.fit and flash.bin in the Firmware Downloader
1).Plug Firmware Downloader SD card
2).Copy the file
$ sudo mount /dev/sdX2 /mnt $ sudo cp <PATH_TO_FILES>/{uefi.fit,flash.bin} /mnt/home/root/win10/ $ sudo umount /mnt
Restore OS installer SD card
If the OS installer SD card have do installing process completed already, it have to restore again for re-using.
1).Rename _efi folder to EFI
2).Change partition id
C:\Windows\system32> diskpart DISKPART> list disk Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 465 GB 1024 KB * Disk 1 No Media 0 B 0 B Disk 2 Online 14 GB 0 B * DISKPART> sel disk 2 Disk 2 is now the selected disk. DISKPART> list partition Partition ### Type Size Offset ------------- ---------------- ------- ------- Partition 1 Unknown 32 MB 1024 KB Partition 2 Primary 29 GB 33 MB DISKPART> sel partition 1 Partition 1 is now the selected partition. DISKPART> set id="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" DiskPart successfully set the partition ID. DISKPART> exit
The utility scripts\diskpart will change partition id after installing process completed.