.lge.upgrade.xml structure - galaxy4public/hkmcavn-tools GitHub Wiki

The .lge.upgrade.xml file is responsible for describing the corresponding firmware and the way it is supposed to be applied. The file is encrypted and signed with an RSA signature. Usually, the file is very terse and includes a bare minimum of information, for example the followin is a decrypted version of the file from 2022 KIA Sportage update:

<?xml version="1.0" encoding="utf-8"?>
<wideavn>
    <upgrade-mode>developer</upgrade-mode>
    <build-date>2022-12-23</build-date>
    <version>5W.XXX.S5W_L.001.001.221223</version>
    <car-variant>aeev_aehev_aephev_bc3_bc3n_bdpe_ckpe22my_ckpe_cn7_cn7n_cvev_deev_de22myev_de22myhev_depbvev_depbvhev_depbvphev_dehev_dephev_de22myphev_dn8_dn822my_ikpe_ka4_ka422my_lx2_lx2pe_mq4_mq422my_mq4hev_mq422myhev_mq4phev_mq422myphev_neev_nq5_nx4_osev_ospeev_ospen_ospe_pdpe_pdpen_sg2ev_sg2hev_sg2phev_sp2_sp221my_sp2pe_sp222my_tm_tmhev_us4_yb22my_ybpe</car-variant>
    <partition>newpartition3rd</partition>
    <newfirmware>newfirmwarestructure</newfirmware>
    <firmware version="" src="/HU/images/mango-vr_fixed.tar.gz">vrfix</firmware>
    <firmware version="" src="/HU/firmware/modem">modem</firmware>
    <firmware version="0.7.8.11077" src="/HU/firmware/dab">dab</firmware>
    <firmware version="6.09.32.04" src="/HU/firmware/gps">gps</firmware>
    <firmware version="2.1f" src="/HU/firmware/frontkey/nx4" vehicle="nx4">jf</firmware>
    <firmware version="170912" src="/HU/firmware/micom">micom</firmware>
</wideavn>

XML Elements

However, there is many more entries that are recognised by AppUpgrade. Below is the list of the currently known entries as of Feb 2023:

Tag Attribute Sample Description
lhavn <lhavn>...</lhavn> A configuration container for the premium vehicle models
wideavn <wideavn>...</wideavn> A configuration container for the standard vehicle models
amp This element should not have any values to be recognised
version specifies the version of the external S/PDIF Amplifier
build-date <build-date>2022-12-23</build-date> the date the update was assembled
car-variant <car-variant>nq5_nx4_...</car-variant> alphabetically sorted, _-separated list of the supported car variants
essentials most likely a legacy, unused element that was formerly holding a SHA1 checksum over some essential files
firmware <firmware version="6.09.32.04" src="/HU/firmware/gps">gps</firmware> defines an included firmware object designated by the value
lcdtype describes LCD type as seen in /sys/lge_touch/name on the unit)
method if target supports delta updates and this is an entry for "modem", then it defines the upgrade method for the modem firmware (only delta is recognised with anything else being considered full)
src specifies absolute path from the directory the .lge.upgrade.xml file is located in
variant specifies a variant (for this to work the /HU/images/variantMatch directory should be present)
vehicle specifies a vehicle this firmware object is for (never observed in the wild, but seems that recognised values are amp, ccp, rrc, vess, and jf)
version describes the version of the included firmware object (it is a free form string, but depending on the object comparison functions may differ)
imagefiletype never encountered in the wild, but seems to define the default image time, e.g. tar.gz or tar
map-version specifies the version of the included map data set (this is most likely unused, since the manifest file is used for the map version)
navi-version specifies the version of the included navigational software (same as with map-version, it is most likely unused)
newfirmware <newfirmware>newfirmwarestructure</newfirmware> the presence of this element tells AppUpgrade to use the new directory structure when handling the update (i.e. use /upgrade/HU/firmware/sbin instead of /upgrade/sbin for storing and executing binaries
partition <partition>newpartition3rd</partition>
password most likely a legacy, no longer used element to authenticate the upgrade-mode user to the unit (whoever come up with that logic should be fired on the spot, to be honest)
version <version>5W.XXX.S5W_L.001.001.221223</version> the version of the described firmware package, the value encodes <CarType>.XXX.<Platform>.ddd.ddd.YYMMDD where <CarType> can be 5W or SK3 and <Platform> can be P5 (premium), S5W_L (standard, Linux) or S5W_A (standard, Android)
require optional attribute to specify the required installed version
compare optional attribute to define the comparison mode (accepted values are same, upper, lower, and diff)
updatespeed the value of this element defines whether download speed should be limited (a number) or not (unlimited)
upgrade-key most likely unused, but this is sha1(ImageSizeAsString + value(essential) + value(build-date)) used to validate the integrity
upgrade-mode <upgrade-mode>developer</upgrade-mode> defines the mode to be used with the upgrade (can be one of user, developer, xmode, or navigation)
upgrade-method if target supports delta updates, this element defines the upgrade method (can be full or delta)

Supported attributes

The following values for lcdtype are supported:

Value Description
mip4_ts
siw_ts
atmel_mxt
focal_ts

Supported values

For the <firmware>...</firmware> element the following values are recognised:

Name Description
bt Bluetooth Module
ccp
rrc
dab Digital Audio Broadcasting Module
fpga
inic
tdmb
micom MICOM
modem LTE Modem
gps GPS
xm Sirius XM Module
hdradio
bios
lcd Front LCD panel
rear_right_lcd Rear Right LCD panel
rear_left_lcd Rear Left LCD panel
abl Apollo Lake Bootloader
amp External S/PDIF Amplifier
jf
emmc eMMC firmware
vrfix Voice Recognition
navi Navigational Software
vess
touch
adp
mkbd
sml
⚠️ **GitHub.com Fallback** ⚠️