Sobre el logo de inicio del equipo LAN5020EHTL ...

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
En este post voy a hablar un poco sobre el logo de inicio de nuestro equipo. Me refiero a la imagen con el logotipo de Hyundai o el de KIA que se muestra cuando se enciende el equipo de infoentretenimiento. Y es que, al respecto, han surgido dos o tres preguntas.

bootlogo.png

¿Cuándo se muestra?

En el foro italiano, un usuario pregunta bajo qué condiciones se muestra dicho logo ya que no siempre lo ve. Durante el transcurso de los sucesivos posts de ese hilo, la conclusión a la que llegan es que se muestra "a veces" sin tener claro cuándo.

La respuesta corta a esta pregunta es "el logo se muestra cada vez que el equipo se inicia". Ante esta respuesta, muchos usuarios dirán "Cuando entro en el coche yo no lo veo" o "Cuando apago el equipo y lo enciendo yo no lo veo". Por eso hay una respuesta más larga ;)

Cuando pulsamos el botón físico de apagado en el equipo de infoentretenimiento, realmente no lo apagamos. El sonido se desactiva, la pantalla táctil se desactiva y la pantalla en general se queda en negro pero el equipo en realidad sigue encendido. El software del equipo recibe un mensaje de evento, llamémosle POWER_OFF con lo que se prepara para dejar las aplicaciones en standby. Por ejemplo, pausa la reproducción de un mp3.

Si volvemos a pulsar el botón físico de apagado/encendido, el software del equipo recibe el evento POWER_ON. Activa la pantalla y el sonido vuelve a su estado inicial (si estaba en MUTE lo deja como tal) y el software continua su trabajo. Esto da la sensación de que al "encender" el equipo, el sistema se ha cargado casi al instante. Pero es simplemente porque en todo este tiempo no ha estado realmente apagado.

Lo mismo ocurre si detenemos el motor del vehículo totalmente (ACC OFF). El equipo "simula" que se ha apagado pero si pulsamos el botón de encendido del equipo vemos que el software continua donde lo habíamos dejado. El equipo permanecerá encendido con el motor apagado durante unos minutos (No suele superar los 5 minutos) hasta que corta definitivamente la corriente.

Y ¿por qué no se suele ver el logo de inicio cuando entramos en el coche y lo ponemos en marcha? Porque nuestro equipo se enciende en cuanto recibe corriente del coche. Y esto es así desde el momento en el que desbloqueas y abres la puerta del vehículo. Aunque el equipo parezca apagado, ya se está iniciando. Normalmente, cuando arrancamos el motor del coche, al equipo ya le ha dado tiempo a iniciar el sistema. Al arrancar el vehículo, el software del equipo ya iniciado recibe un evento tipo ACC_ON, habilitando el sonido y la pantalla si el equipo no fue "apagado" deliberadamente por el usuario anteriormente. Si sois rápidos al arrancar o directamente en cuanto entráis en el vehículo pulsáis el botón de encendido, veréis el logo de inicio.

Creo que al respecto no me dejo ninguna otra condición que haga dudar de la respuesta corta. Pero si es más evidente si forzamos el sistema mediante software para que se reinicie.


¿Se puede cambiar el logo de inicio?

La respuesta corta es "No sin los medios adecuados". Y es que no tenemos mucha información sobre este tema. Alguno podrá decir "Para otros coches de Hyundai/Kia lo han conseguido". Pero el problema es que hay una manera estandarizada de hacerlo y otra forma que depende de cada fabricante. Y habría que conocer el funcionamiento del proceso de carga del sistema.

Del proceso de inicio se encarga el bootloader. Es una porción de código que inicia el sistema operativo instalado. En algunas versiones de Windows CE, el bootloader estándar de Microsoft muestra una imagen de inicio. Dicha imagen se localiza en un archivo llamado splash.bmx. Esa imagen es un bmp compilado que no ha de superar los 64KB y se "compila" con un programa que suele venir incluido junto con las SDK de WinCE. Pero cada fabricante puede decidir si incorporar el bootloader de Microsoft o proporcionar uno hecho a medida. Este es nuestro caso.

He tenido acceso al bootloader que usa nuestro equipo. No al código desensamblado pero sí al archivo que usa Hyundai para flashear el bootloader. El archivo en cuestión es eboot.nb0 y ocupa unos 2MB. Por lo poco que he podido ver, para cambiar el logo de inicio es necesario conectarse a la interfaz terminal del equipo y habría que ver la forma de conectar un PC con el equipo mediante puerto serie. Por lo tanto, de poder cambiar los logos de inicio, no es un tema trivial al alcance de cualquier usuario. El programa de Hyundai Aerith permite flashear tanto el bootloader como un NK.bin nuevo (esto es peligroso) pero no veo que permita flashear los logos.

Digo "los logos" porque en nuestro modelo tiene que haber dos. Uno para Hyundai y otro para Kia. Eso descarta la existencia de un splash.bmx por alguna parte de nuestro equipo.


¿Dónde están esos logos?

Los usuarios más puestos en el tema, saben que la unidad MMCMemory contiene dos carpetas con imágenes exclusivas para la interfaz de Hyundai y Kia respectivamente. Pero ahí no pueden estar los logos ya que la unidad MMCMemory no se monta (no es funcional) durante el proceso de inicio por lo tanto, sus archivos no son accesibles. Sería un error que un bootlader confiara en otra unidad, que no tiene por qué existir, para hacer parte de su trabajo. Es el programa MyShell.exe el que monta esa unidad y su ejecución se produce en las últimas fases de un sistema operativo ya iniciado.

Otra hipótesis sería que los logos estuvieran en la unidad principal " \ " o en una de sus subcarpetas, básicamente porque es donde reside el contenido extraído de la ROM NK.bin. Aún así, tampoco los he localizado como archivos.

Volviendo al bootloader, entre otras opciones del menú del bootloader, hay una que destaca:
Insertar CODE, HTML o PHP:
ROM:00003C40 0000005D C Specify destination for Splash screen NB0 \r\n[1 = NOR, 2 = NAND, 3 = SD/MMC, 4 = SPI Flash]:

ROM:00003CA0 00000011 C splashscreen.nb0
Esa opción permite flashear el logo que inicialmente tiene el nombre splashscreen.nb0 a uno de los 4 destinos. ¿Cuál sería el destino adecuado? La lógica me dice que SD/MMC, que hace referencia no a SDMemory ni a MMCMemory sino a la unidad principal donde se monta " \ ", pero NO en una forma accesible mediante el sistema de archivos.

Los archivos nb0 representan a un buffer de datos binarios sin compresión o indexación que se van a flashear tal cual, en el destino indicado. Por lo tanto, splashscreen.nb0 podría contener un logo o más de uno. La lógica me dice que el buffer de ese archivo splashscreen se guarda siempre en la misma dirección así que debería localizarse en un sector muy concreto de la unidad principal. Concretamente un sector anterior al sistema de archivos.


¿Por qué creo que hay dos logos?

Uno puede pensar que a lo mejor el fabricante pone uno u otro logo en función del vehículo al que va destinado el equipo. Porque ... podríais decir que no hay ningún Hyundai que de alguna forma muestre el logo de Kia y vicebersa. Pero tiempo atrás, un usuario trató de actualizar su Hyundai usando un backup de otro propietario de Tucson (cosa que desaconsejo totalmente. El backup vale para tu propio equipo). Corrompió el sistema y tras reiniciarse mostraba el logo de Kia. El backup del que partía era de otro Hyundai.

Tras un vistazo rápido en el bootloader, estas dos cadenas de texto de depuración confirman la existencia de 2 imágenes de inicio:
Insertar CODE, HTML o PHP:
ROM:00184AD4 00000066 unicode LoadBootingImage() : second boot image = %d sector\r\n
ROM:00184B44 00000064 unicode LoadBootingImage() : first boot image = %d sector\r\n

¿Como sabe el bootloader qué logo mostrar?

Hyundai o Kia, e ahí la cuestión. No he localizado en el código de Hyundai indicios que me hagan pensar que el tipo de vehículo sobre el que está montado el equipo le llegue a través de la señal de canbus. Pero sí he visto que el sotware de Hyundai hace una lectura a bajo nivel en un sector determinado de la unidad principal. Cuando digo a bajo nivel, significa que no abre un archivo y lo lee sino que directamente accede a un sector del disco y lee un buffer de datos que a priori son incomprensibles, de los cuales extrae entre otras cosas un byte cuyo contenido es decisivo para saber qué tipo de vehículo es.

Hay una cadena bastante significativa en eboot.nb0:
Insertar CODE, HTML o PHP:
ReadCarType() : SDMMC_ReadSector()
Indica la existencia de una función llamada ReadCarType que hace uso de otra función llamada SDMMC_ReadSector, lo cual confirma que el bootloader hace uso del tipo de vehículo leyendo un sector determinado de la unidad principal (No confundir SDMMC con MMCMemory).

El siguiente mensaje de depuración del bootloader indica que una vez conocido el tipo de vehículo, muestra una u otra imagen:
Insertar CODE, HTML o PHP:
ROM:0017C138 0000006C unicode CarType is Hmc.. so try to load hmc booting image..\r\n
El tipo de vehículo (CarType) puede ser Kia o Hmc cuyas siglas significan Hyundai Motor Company.

Espero que con este post algunas preguntas queden un poco aclaradas y que sirva de base para aquel que quiera investigar sobre este tema :thumbsup:


Véase también
 
Última edición:

sapito

Forero Activo
Motor TL
1.7 CRDi 115 CV
Versión TL
Link
Color TL
White Sand
Impresionante como siempre :thumbsup:
 

Eneko

Forero Activo
Ubicación
Vitoria-Gasteiz
Motor TL
1.7 CRDi 115 CV
Versión TL
Klass
Color TL
White Sand
Esto si que es un analisis en toda regla, no lo que me hace el medico que si el coresterol...acido urico.... :laugh:

Buen trabajo, como siempre con rigurosidad.
 

jamarro

Forero Activo
Ubicación
Gelves - Sevilla
Motor TL
1.7 CRDi 115 CV
Versión TL
Link
Color TL
Polar White
Joder, me parece un texto sacado de Blade Runner 2049, me has dejado sin respiración...
 

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
Parte 2 : Localizando imágenes de inicio en nuestro equipo

Pues con un poco de ingeniería inversa he localizado el sector en el que se guarda al menos una de las imágenes. Concretamente la de Hyundai. Y he dado con ese sector por intuición, en base al tamaño del buffer que se pretendía leer en dicho sector del disco (1536000 bytes). Partía de la teoría de que, si tenemos una resolución de 800 x 480, el número de pixeles en pantalla es de 384.000. Aunque hay muchas formas de guardar una imagen, normalmente un pixel suele tener 3 canales de color de un byte cada uno y alternativamente un canal adicional para niveles de transparencia (alpha). Así que 384.000 x 4 bytes da precisamente 1536000 bytes.

El buffer leído de ese sector no contiene cabecera. Esto es, no tiene formato de archivo jpg, png, etc ... sino que son datos en bruto del color de cada píxel. Se hace preciso una pequeña conversión ya que la información de cada pixel está compuesta por 3 bytes (1 por canal de color: rojo, verde, azul) pero la información está alineada en 4 bytes. Lo que me indujo a pensar que uno de los bytes era el canal alpha. Pero ese byte extra siempre es cero, lo que daría una imagen totalmente transparente.

Así que la conversión pasa por generar una imagen de 24 bits (3 canales de un byte por canal) o de 32 bits añadiendo un canal alpha con valor 0xff como es el caso de la imagen que muestro a continuación, resultado de la conversión del buffer obtenido del equipo del Tucson:

Screenshot_20180110_194226.png
Aquí, la imagen extraída en su tamaño original:

hmc.jpg
La imagen de inicio para KIA también la he encontrado en otro sector de la unidad principal. Aquí está en su tamaño original:

kmc.jpg
He de comentar que la imagen de KIA aparece en un sector del disco pero la de Hyundai se encuentra duplicada en dos sectores, en mi equipo. La imagen duplicada podría ser el sector que utiliza el equipo para mostrar la imagen "configurada" en base al modelo del coche por lo que intuyo que los modelos KIA tendrán su logo de KIA por duplicado. Pero para verificar esto, habría que hacer la comprobación en un KIA.
 
Última edición:

rubstan

Forero Activo
Ubicación
Bilbao
Motor TL
1.6 TGDi 176 CV
Versión TL
Kosmo 7DCT
Color TL
White Sand
Menudo crack estás hecho! :notworthy::notworthy::notworthy:

Como sigas así, te va a resultar muy complicado convencernos de que no podrás meter AA y ACP a los equipos con WinCE :roflmao:

Por cierto, a finales de mes, si aún te falta info, datos o lo que sea del nuevo equipo, cuenta conmigo para pasarte lo que necesites. :thumbsup:;)
 

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
Añadido logo de Kia extraído del equipo del Tucson. Disponible junto al logo de Hyundai en la 2ª parte del tutorial :thumbsup:
 

bartolo222

Forero Novato
Motor TL
1.7 CRDi 115 CV
Versión TL
Tecno
Color TL
White Sand
Repasando la copia de seguridad que hice al sistema "que por cierto contiene mucho texto plano", encuentro referencias a un sboot.nb0 y a un controlador de red "LAN911x Ethernet controller" que se inicia el boot, lo tienes en 00005ee0h:, cada vez me sorprende mas el cacharo.
 

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
Repasando la copia de seguridad que hice al sistema "que por cierto contiene mucho texto plano", encuentro referencias a un sboot.nb0 y a un controlador de red "LAN911x Ethernet controller" que se inicia el boot, lo tienes en 00005ee0h:, cada vez me sorprende mas el cacharo.
La copia de seguridad también contiene las tres imágenes de inicio. Es básicamente el contenido de las siete particiones de la unidad principal.
 

ranaz

Forero Novato
Motor TL
1.6 TGDi 176 CV
Hello.
I mistakenly deleted the Lisa.Exe file in the Headunit and it does not go up the hinges, and it stays on the Hyundai logo and does not work anymore.
Please tell me how can I fix and reapir the system?
Is there a boot loader to help me out?
How can I connect the headunit to the laptop cable and modify the contents of Storge?
Is there software for Windows 10 for this?
Tankyou
 

JKD

Forero Experto
Motor TL
2.0 CRDi 136 CV
Versión TL
Tecno Aut. 4x4
Color TL
Thunder Gray
Hello.
I mistakenly deleted the Lisa.Exe file in the Headunit and it does not go up the hinges, and it stays on the Hyundai logo and does not work anymore.
Please tell me how can I fix and reapir the system?
Is there a boot loader to help me out?
How can I connect the headunit to the laptop cable and modify the contents of Storge?
Is there software for Windows 10 for this?
Tankyou
Are you sure Lisa.exe is deleted? As far as I know, if system doesn't find Lisa.exe in current MMCMemory partition, it mounts the other one (MMCMemory2) which uses to have an old version of the software, sets it as default MMCMemory and executes Lisa.exe on there.
 
Arriba