Updating Hyundai/Kia/Genesis head unit/navigation infotainment system firmware using Linux

Helmut Neukirchen, 11. December 2022

My dealer (Bílaumboð Askja) had promised that all updates have been made when my new car was delivered. However, this proved to be partly wrong: it seems that at Kia, the head unit update is always left to the owner. So, I had to do the update on my own:

Updating the Hyundai/Kia/Genesis head unit/navigation infotainment system firmware needs to be done by the end user.
For European models, you can find the download here: https://update.kia.com/EU/E1/Main -- once you updated to a new enough firmware, future updates can even be done over-the-air (OTA) (but note that only two OTA updates might be available for free, so do not blindly agree to download and install an OTA update. But you can install the same updates via USB).

This update does not only give you new map data, but in fact, it controls many features not related to navigation (but even the salesperson of my car dealer is not aware of this), e.g. battery pre-conditioning.

A guide is available from Kia, but in principle it works by downloading an update tool to your computer that then downloads the right and latest firmware and writes it to a big enough USB storage device. You will need one with a type A connector, e.g., a USB stick (the 2022-12-07 update is 40 GB, so you need at least a 64 GB storage device: it will be formatted by the update tool) that you can then plug into your car's USB A port. A YouTube video of that procedure is here:

However, the Kia web page provides only downloads of an update tool for MS Windows and Apple Mac. Trying to download it via a web browser from Linux gives an error. I guess, some Javascript checks the operating system string in your web browser Id. I did not check the Javascript. Later I read that using Wine should work to run the update tool and then let that tool download the files and then use Linux to copy these files (all those files inside directory EV6_MY_22_EI) to the root of the USB key) -- but I did not yet try that.

I therefore decided to use a virtual machine running MS Windows. The steps are as follows (depending on your download speed, expect: 1 h for downloading the MS Windows image, 1 h for downloading the new firmware image, 1 h for writing the firmware image to the USB key, 1 h for the update in the car itself):

  • Download & install VirtualBox (via your Linux operating system's packet manager or by download from https://www.virtualbox.org/ )
  • Download & install (via packet manager or download) the VirtualBox extensions pack for making the USB port available in the Windows VM (typically requires to reboot your Linux system to make this work: I guess some kernel modules are involved that do not get automatically inserted during installation, but only after re-boot)
  • Download a free MS Windows 10 virtual machine image from Microsoft: https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ (The download takes time.).
  • Import that VM image into VirtualBox: take care to have the virtual file system partition big enough for the download, i.e. have 40 to 64 GB free in addition to the MS Windows installation itself.
  • Plug your USB key in, don't mount it in Linux and configure VirtualBox to access it: see here
  • After starting the VM with MS Windows 10, log in via the password "Passw0rd!". In the File Explorer, you should see the USB key as drive letter D:

Starting from here, the steps are the same as for any MS Windows user:

  • Using the web browser in the VM (i.e. Edge), download the Windows updater from https://update.kia.com/EU/E1/navigationUpdate
  • Start the downloaded updater (I did start it as administrator to make sure that the access to the USB key works)
  • Select then your car type in order to download the right firmware (as this is a huge download, this will take time -- if you do not have enough space, the downloader will complain. The good thing about a VM is that you can easily increase the size of the VM file system)
  • Finally, the updater will write the downloaded firmware to the USB key (which will again take time -- note: it might be that you Windows VM shuts down automatically after writing to the USB key has finished)
  • Plug the USB key into your car (the "main" USB port, i.e. the USB A type one that you use also for Android Auto/Apple Car play -- all other ports, i.e. the USB type C ones, are typically no data ports, i.e. power only)
  • Typically, the car recognises that there is an update on the USB stick and open some prompt to start the update. If not, on the car screen, go to "Settings", "General", "Version info/update" and click "Update". Follow the prompt on the screen. The car will first check the download on the USB key (takes ca. 10 minutes): so you do not need to worry that anything with the download or writing to the USB could have gone wrong, because the car checks that anyway.
  • The update should now be running (either after switching off the car or you can choose to do this while the car is on -- but then, you cannot use the head unit while driving). It takes a while, so take care that the 12 V battery is full (some even recommend to have a 12 V charger connected for any firmware update) or leave the car's gear in P mode or enable the car's utility mode (which ensures to charge the 12 V battery even if the car is not in drive mode, but in fact if and only if not in drive, i.e. it also prevents that your car accidentally drives or roles away).

Firmware and map versions before the update (compare with the versions after the update, shown below)

Updates I installed successfully:

Applied firmware updates that only the dealer could do:

  • SA533 "VCU Software Upgrade for i-Pedal Operation" did update the VCU version from, e.g., 5.10 to 5.12.
  • Service Campaign SC271 ICCU update did update the firmware of "4WD #1 / OnBoard Charger (Hybrid/EV)" from Manufacturer ECU software number: ECV1E1-IES05R000 to Manufacturer ECU software number: ECV1E3-IES12R000

No need to have the firmware fix for the Kia recall SC236 for the parking brake applied (according to CarScanner OBD, my ECU GSM-GearShiftCtrl had already the Calibration ID: ECV1XXXXXAE19XS2 -- which means the fix has been applied).