0

I'm owning a CarPlay head unit from Volkswagen called RCD330 plus. It is possible to upgrade/downgrade to any available firmwares. For example here are two firmware versions: http://rcd330plus.com/rcd/variantconflict_Eror.rar

The firmware file itself is a *.tar file and can be extracted. I found a linux file structure (var, etc, opt, ... folders).

My goal:

The head unit supports only a few languages like Chinese, Mexican, US English, ... and I want to add support for German language.

What I tried already

(1) I checked nearly every file with a HEX editor (iHex for Mac OS X) and found one 9.4MB big file called hmi (without extension) in folder /opt/ and this file contains all labels: enter image description here

(2) I checked this hmi file with binwalk and get this output: enter image description here enter image description here

Where can I get information/knowledge to add an additional language. Maybe also with adding german language flag in the setup menu of the radio? Or is this just impossible?

Is this hmi file a compiled file or is it kind of some archiv which can be somehow extracted?

  • I have same radio RCD330 plus. Hardware version is 5GD 035 280 B. Have you succeded in installing German language into the radio? Can you please give information regarding how can I connect radio to install language package? – Murat Mar 13 '18 at 10:44
3

As binwalk points out, this file is a compiled executable, and you don't even need binwalk for it:

$ file hmi
hmi: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.31, stripped, with debug_info

Strings you can see in a hex editor are embedded into the binary and are referenced directly from the code. As to whether or not it's possible to add a new language with a reasonable effort, consider the following:

  • Since it's a multi-language application, it's likely some sort of locale management framework is used. In some cases it can make addition of a new language easier.
  • If you modify this binary, you'll need to make sure all the internal data references and pointers still point at correct locations. This can be quite hard to do, especially for a C++ application written with Qt.

I think an easier way would be replacing strings from one of existing languages:

$ strings hmi | grep ias
dias
Solo emergencias
ncias na conex
Puede haber interferencias
Memorias
Lista de memorias FM

The downside here is that translated strings can't be longer than original ones (which is unfortunate for German), otherwise data offsets would change. However, it's certainly easier than remapping the whole executable.

  • Thanks. I also faced the problem with replacing string of an existing language (e.g. Mexican) to German is not possible, cause the new string would be longer. So in other words there is no solution for my plan, right? – mahega Jan 31 '18 at 16:28
  • I think the only more or less feasible solution is to use some sort of abbreviations or anglicisms and replace an existing language. I think it's possible to rebuild the binary with changed string lengths (and offsets), but I'm not sure how complex this task can be. I would start by disassembling the binary and writing a linker script to assemble it back from section data. Since it's not encrypted or otherwise protected there's a chance it will work. – John Doe Feb 1 '18 at 5:23
1

In meantime there is already a German version. But that one used the HMI file with an hexeditor and they replaced character by character. But now is another person busy with replacing them better https://www.reddit.com/r/RCD_330/comments/bh6p0j/wip_language_translations_rcd_330_ce_types/

Everything is here downloadable https://www.reddit.com/r/RCD_330/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.