How to install Windows IoT on a Tablet

Vladimir Akopyan
Quickbird
Published in
7 min readNov 2, 2017

--

And all other off the shelf devices

Linx1010B running Windwos IoT Core

I am starting the Windows IoT Everywhere project, to find, document and tool up off-the-shelf devices that can run Windows IoT. To kick it off, I have found one — Linx1010B, a 10 inch Tablet device that runs great, and cost just £69.99 on Ebay. It takes 20 seconds to boot, takes ≈600MB of RAM and runs any UWP app and gives me complete control of the system. Project is on GitHub, contributions are welcome.

It’s alive!

I have an IoT project that will benefit from a reliable, single purpose tablet or all-in-one pc. It’s an IoT control system for production and it’s open.

Tested devices

  • ✔️ — Works
  • ❌ — Doesn’t Work
  • 🔘 — No such capability on device
  • ❔ — Untested

Motivation

There are IoT devices like your router, that that just sit inside a box, do their thing, don’t have a screen and never deal with the user directly. That’s the land of embedded Linux. You can use Windows IoT here, but there aren’t many obvious benefits.

But there are more interesting device, ones that are interactive, have a touch-screen and require user to do stuff. This mostly the land of Android or Windows embedded. Windows IoT core has some advantages over embedded Android:

  1. It does not suffer from driver issues that prevent Android from receiving OS updates. You can’t really call any system that cannot be updated secure, there are constantly kernel vulnerabilities being discovered.
  2. It will update your app using the Microsoft Store mechanism, while you can’t really use Google store to do the same in embedded applications.
  3. Unlike a Kiosk app, there is no system UI sitting around that needs to be locked down. If you go to Android AOSP route, that’s not an issue, but it’s also a lot more work.
  4. Bigger devices, this can be both good an bad.

You might protest that off -the shelf devices don’t have GPIOs, but one can use a microcontroller over USB.

For a long time I was lamenting the fact that there are only 3 supported boards on the official website. However, I was enlightened by a stranger on Reddit — you can run Windwos IoT Core pretty much on any computer! Microsoft just does not bother explaining it properly!

Goals

  • Document which devices work and which don’t. What works and what doesn’t
  • Provide x86 and x64 apollo lake Images for quick testing of devices, so everyone doesn’t have to download 50 metric tons of stuff just to test their device
  • Provide drivers
  • Provide fully built images for each device

How to Test a device with Windows IoT

Background

Many off-the-shelf devices are compatible with Windows IoT, but it uses a more restricted driver model. The only way to find out which ones are compatible is to test them. The Goal is to find a few off-the-shelf devices that work well and bring together everything needed for an average dev can get them working immediately.

Windows IoT core will boot on most UEFI systems. A 32 bit UEFI will boot 32 bit Windows IoT, and 64 bit UEFI can only boot 64 bit Windows IoT. This is not the case with “normal” operating systems- they would boot either way. Currently Microsoft only provides 32 bit image of Windows IoT for Minnowboard Max, and if you wish to test it on another machine, you have to build an image yourself, the process is described in Windows IoT Core Build your own image section.

Currently Intel provides board support packages for Atom BayTrail and Atom Apollo Lake processors. Cherry Trail Intel Atom processors are not supported. A device with unsupported processor would still boot up, but GPU acceleration won’t work, and some peripherals won’t work either. A Cherry Trail (Atom® x5-Z8300) Intel Compute Stick is one example of such device.

Some guys mention that they managed to get Windows IoT to work on I3 and I7 CPUs and even get the GPU to work.

Export Drivers

First see what kind of device you are running. You need to get 32 bit drivers for 32 bit Windows IoT, and 64 bit drivers for 64 bit IoT. Use PowerShell to export drivers from your device while it’s running “normal” Windows.

Export-WindowsDriver -Online -Destination C:\driversBackup

Save them somewhere safe, we will need them later.

Create bootable flashdrive

Then you need to create a bootable flashdrive that runs Windows PE. To do that, download Windows Deployment Kit and tick Windows PE. Take a flashdrive and format it as FAT32 (NTFS should work too). Then open “Deployment and Imaging Tools Environment” and type in

copype amd64 C:\WinPE_amd64

amd64 can be replaced with x86 or ARM as needed. Change file path as needed too. Then take contents of C:\WinPE_amd64\media and copy them to your formatted flash drive. That's it, you have a bootable drive! NO special magic needed. Don't forget that for 32 bit devices you need to create a bootable flash drive with x86 version of Windows PE, and for x64 you need x64 version. Next take JouleInstaller.cmd from this repository, it is a program that will flash a Windows IoT image (FFU) onto the device drive, and it's available from this repo.

Check for UEFI

Windows IoT only works with UEFI, and will not work with a classic Bios. The way to check that is to grab detectefi.exe from this repo, and place it in the root of the flash drive we've just created. Restart the device and get it to boot from the flash-drive. You will see Windows PE command line. It is typically running from drive X:\, which I think is the memory. You need to switch to the flash drive, typically it will be C drive. You can just type in C:\. Sometimes you'll have to try different drives. Last thing to do is to get the right FFU and to place it in the root of the flash drive. Once you think you are in the right drive, type dir to list content of the directory. You should see detectefi.exe if you are in the right drive. Type detectefi.exe to run it. It will tell you if you are running in the UEFI mode or BIOS mode.

IF you are in BIOS mode, Windows IoT core won't work. Try changing setting of the BIOS and you might be able to switch the device to UEFI mode.

Getting the FFU

  1. If it’s a Bay trail device, They almost always have a 32 bit UEFI, and you can go ahead and flash a MinnowBoard Max image by following Instruction for Intel Compute Stick. Download the ISO, run the MSI installation, and you will have flash.ffu file in C:\Program Files (x86)\Microsoft IoT\FFU\MinnowBoardMax.
  2. If it’s a different device, it will probably be running a 64 bit UEFI and you need to build a 64 bit version of Window IoT. The process is too involved to describe here, but intill I build a 64bit version and release it, that’s what you are stuck with.

Once you have the FFU, place it in the root of the flashdrive.

Installing

Plug the flashdrive into the device you wish to test. You must restart the device, and get it to boot from the flashdrive. As I’ve described in Check for UEFI section, switch the console to the flashdrive and run JouleInstaller.cmd. The process should go smoothly.

Installing drivers

This is the fun part Once your device boots up, you find it’s IP address using a Windows IoT Dashboard. That will let you login to a web portal and manage the device. Default password is p@ssw0rd If your device has no connectivity, get a USB2 Ethernet-to-USB adapter, most of them work out of the box even with Windows IoT.

Remotely connect to your device through PowerShell Open PowerShell as Administrator and type in

net start WinRM
Set-Item WSMan:\localhost\Client\TrustedHosts –Value <machine-name or IP address>

In the latter line we are setting the device as a trusted device for further connections.

Now start a remote connection — use the name of your computer in place of linx1010, which you’ve set in the IoT Dashboard.

Enter-PSSession -ComputerName linx1010 -Credential linx10110\Administrator

You will get a pop-up window asking for a password. Once you are in, you’ll be in the folder C:\Data\Users\Administrator\Documents\. Take the drivers you've saved previously, copy them to a flashdrive, and plug it into the device. It will often be given letter D:\. Usually each driver is saved in a separate folder, each folder has a few files and an .inf file. You have to navigate to each folder, for example cd iaiogpioe.inf_x86_e8244de89b1b260d and installed a driver

devcon.exe dp_add iaiogpioe.inf

This will report whether the driver was added succesfully. I had quite high success rate. You might have a dozen or so folders, and adding al lthe drivers can take a while. They will only take effect after restart. To restart the device, type in

shutdown /r /t 0

Now you can test the device and see how much of it’s functionality works.

Once you’ve tested it, you can fill out the table below, and decide whether building a separate image for the device is worthwhile.

Once you’ve tested your device, please let me know in the Repo by opening an issue or submitting a PR.

Great Blogs

--

--

Making Internets great again. Slicing crystal balls with Occam's razor.