为大众汽车收音机的基于 Linux 的固件添加额外的语言

逆向工程 固件 linux 嵌入式
2021-07-03 10:41:32

我有一个来自大众汽车的 CarPlay 主机,名为 RCD330 plus。可以升级/降级到任何可用的固件。例如这里有两个固件版本:http : //rcd330plus.com/rcd/variantconflict_Eror.rar

固件文件本身是一个 *.tar 文件,可以解压缩。我找到了一个 linux 文件结构(var 等,opt,... 文件夹)。

我的目标:

主机只支持几种语言,如中文、墨西哥、美国英语……我想添加对德语的支持。

我已经尝试过的

(1) 我使用 HEX 编辑器(Mac OS X 为 iHex)检查了几乎所有文件,并在文件夹/opt/ 中找到了一个名为hmi(无扩展名)的9.4MB 大文件,该文件包含所有标签: 在此处输入图片说明

(2) 我用 binwalk检查了这个hmi文件并得到这个输出: 在此处输入图片说明 在此处输入图片说明

我在哪里可以获得信息/知识以添加其他语言。也许还可以在收音机的设置菜单中添加德语标志?或者这是不可能的?

这个hmi文件是编译文件还是某种可以以某种方式提取的档案?

2个回答

正如 binwalk 指出的,这个文件是一个编译后的可执行文件,你甚至不需要 binwalk:

$ 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

您可以在十六进制编辑器中看到的字符串嵌入到二进制文件中,并直接从代码中引用。至于是否可以通过合理的努力添加新语言,请考虑以下几点:

  • 由于它是一个多语言应用程序,因此很可能使用了某种语言环境管理框架。在某些情况下,它可以使添加新语言更容易。
  • 如果你修改这个二进制文件,你需要确保所有内部数据引用和指针仍然指向正确的位置。这可能很难做到,尤其是对于用 Qt 编写的 C++ 应用程序。

我认为更简单的方法是从现有语言之一替换字符串:

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

这里的缺点是翻译后的字符串不能比原始字符串长(这对德语来说很不幸),否则数据偏移量会改变。但是,这肯定比重新映射整个可执行文件更容易。

与此同时,已经有一个德语版本。但是那个人使用带有十六进制编辑器的 HMI 文件,他们逐个字符地替换。但是现在另一个人忙于更好地替换它们 https://www.reddit.com/r/RCD_330/comments/bh6p0j/wip_language_translations_rcd_330_ce_types/

一切都在这里下载 https://www.reddit.com/r/RCD_330/