ES2824830T3 - Procedimiento de actualización de software para un dispositivo integrado - Google Patents

Procedimiento de actualización de software para un dispositivo integrado Download PDF

Info

Publication number
ES2824830T3
ES2824830T3 ES11776462T ES11776462T ES2824830T3 ES 2824830 T3 ES2824830 T3 ES 2824830T3 ES 11776462 T ES11776462 T ES 11776462T ES 11776462 T ES11776462 T ES 11776462T ES 2824830 T3 ES2824830 T3 ES 2824830T3
Authority
ES
Spain
Prior art keywords
bootloader
storage area
firmware
management program
program code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES11776462T
Other languages
English (en)
Inventor
Stéphane Durand
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Thales DIS France SA
Original Assignee
Thales DIS France SA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Thales DIS France SA filed Critical Thales DIS France SA
Application granted granted Critical
Publication of ES2824830T3 publication Critical patent/ES2824830T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1433Saving, restoring, recovering or retrying at system level during software upgrading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

Un método para actualizar una parte (123) de cargador de arranque previo de un firmware de un dispositivo integrado (1), de tal manera que dicho firmware comprende un conjunto ordenado de bloques de datos y dicho firmware comprende dicha parte (123) de cargador de arranque previo almacenada en un área de almacenamiento (121) de cargador de arranque de la memoria EEPROM del dispositivo integrado, para que se ejecute al inicio del dispositivo integrado, y una parte (124) de firmware principal previo, almacenada en un área de almacenamiento (122) de firmware principal de la memoria EEPROM, de tal modo que el método comprende las etapas, ejecutadas por el dispositivo integrado, de: a) borrar (202) bloques de datos del área de almacenamiento de firmware principal, b) cargar en el área de almacenamiento (122) de firmware principal borrada un código de programa de gestión de actualización (203), en una ubicación subsiguiente al área de almacenamiento (121) de cargador de arranque, y una parte (204) de cargador de arranque actualizado, en una ubicación a la que se accede durante la ejecución del código del programa de gestión de actualización, c) ejecutar la parte (205) de cargador de arranque previo desencadenando una ejecución de dicho código de programa de gestión de actualización, comprendiendo esta etapa de ejecución del código de programa de gestión de actualización: - borrar (206) bloques de datos del área de almacenamiento de cargador de arranque, de manera que se borre toda el área de memoria que precede al código de programa de gestión de actualización, y almacenar (207) al menos una instrucción de salto al comienzo de dicha área de almacenamiento de cargador de arranque borrada, de tal modo que la ejecución de esta instrucción de salto al inicio bifurca la ejecución del código de programa de gestión de actualización; - escribir (208) de la parte de cargador de arranque actualizado en el área de almacenamiento de cargador de arranque borrada de la memoria EEPROM; d) modificar (209) la instrucción de salto de tal modo que la parte de gestor de arranque actualizado del firmware se ejecute al inicio.

Description

DESCRIPCIÓN
Procedimiento de actualización de software para un dispositivo integrado
La presente invención se refiere generalmente a una actualización de software en un dispositivo integrado.
Un sistema integrado es un sistema informático especializado, que incluye tanto hardware como software, que forma parte de un sistema o máquina más grande. Además, el sistema o máquina más grande puede tener una pluralidad de sistemas integrados. Por lo común, cada uno de los sistemas integrados se aloja en una sola placa de microprocesador con firmware almacenado como código objeto dentro de un dispositivo de memoria no volátil. El sistema o máquina más grande que generalmente utiliza el sistema integrado puede incluir una amplia variedad de sistemas, que van desde teléfonos hasta dispositivos de almacenamiento masivo, receptores de satélite digitales y sistemas similares. Los sistemas integrados comúnmente utilizan software, entre el que se encuentra el firmware que proporciona un sistema operativo que administra las funciones de bajo nivel del sistema integrado.
Por lo común, un sistema integrado proporciona un procedimiento de actualización de código para admitir nuevas funciones o solucionar problemas en el firmware (es decir, actualización del firmware). En muchos casos, la actualización del firmware dejará fuera de servicio el sistema o la máquina más grande durante un período de tiempo durante el cual se realiza la actualización del firmware.
Para proporcionar una característica de actualización de firmware, el sistema integrado generalmente incluye una memoria de tipo Flash para almacenar el firmware. El firmware habitualmente comprende tanto un cargador de arranque como un firmware principal almacenado en un sector de arranque de la memoria de tipo flash. El cargador de arranque se coloca en la primera dirección de memoria de la memoria de tipo Flash y se ejecuta en el momento del arranque. El cargador de arranque se utiliza como firmware a prueba de fallos en caso de que el firmware principal esté dañado. El cargador de arranque se ejecuta en el momento del arranque, de manera que comprueba, a su vez, la integridad del firmware principal (preferiblemente calculando una suma de comprobación y comparándola con un resultado almacenado o un valor predeterminado) antes de que se ejecute realmente el firmware principal. El cargador de arranque puede diagnosticar, además, si el firmware principal está dañado y habilitar una actualización de un firmware principal dañado. Si el cargador de arranque no detecta un error de integridad, bien bifurca el microprocesador en la primera dirección del firmware principal o bien realiza su carga. Si el cargador de arranque detecta un error de integridad, puede usar una interfaz de E/S para recibir un código de reemplazo de firmware principal. Alternativamente, se puede proporcionar un firmware principal de refuerzo para que una prueba de integridad fallida dé como resultado la ejecución del firmware principal de refuerzo.
Por ejemplo, el documento US 2005/0060528 proporciona un ejemplo de un método para actualizar un cargador de arranque de un dispositivo, que incluye una verificación de la completitud de la actualización antes de reiniciar el dispositivo.
En la práctica, algunos sistemas que ya están en uso pueden requerir un nivel de seguridad mejorado, como tarjetas de acceso o teléfonos inteligentes. De hecho, un ataque conocido para eludir las características de seguridad del firmware principal consiste en cambiar la dirección del firmware principal mencionado en el programa del cargador de arranque. De este modo, el sistema puede ejecutar un firmware principal falso. El cargador de arranque también puede ser atacado para descargar una actualización de firmware principal falsa y activar su ejecución.
El documento US 2010/0131694 proporciona un método para proteger dicho cargador de arranque contra los intentos de un atacante de reemplazarlo por un cargador de arranque dañado.
Sin embargo, tales métodos podrían dar como resultado que el dispositivo actualizado no se pueda utilizar en caso de fallo de energía en algunas etapas cruciales de los métodos.
El documento US 5701492 divulga un método de actualización de cargador de arranque protegido contra fallos de energía, pero requiere un área del cargador de arranque en la memoria al menos dos veces más grande que el tamaño del cargador de arranque.
En consecuencia, existe la necesidad de un método mejorado de actualización de cargador de arranque protegido frente a fallos de energía, con menores requisitos de tamaño de memoria.
De esta forma, la invención se refiere a un método de acuerdo con la reivindicación 1.
De acuerdo con otra realización, el método comprende una etapa b') entre las etapas a) y c), de tal manera que la etapa b') comprende un reinicio del dispositivo integrado.
De acuerdo con una realización adicional, la etapa d) comprende modificar la instrucción de salto para bifurcar la ejecución al software actualizado.
De acuerdo con otra realización, la modificación de la instrucción de salto se realiza mediante una operación de inscripción atómica.
De acuerdo con una realización adicional, el método comprende, además, una etapa e) en la que la parte del cargador de arranque actualizada borra el código del programa de gestión de actualización y escribe una parte de firmware principal actualizada en esta ubicación borrada.
De acuerdo con una realización adicional, la memoria EEPROM comprende modos de borrado y escritura tales, que la unidad de datos de memoria más pequeña borrada en el modo de borrado es de mayor tamaño que la unidad de datos de memoria más pequeña escrita en el modo de escritura.
De acuerdo con otra realización, la modificación de esta primera parte del cargador de arranque comprende establecer todas las palabras de datos almacenadas en el área del cargador de arranque en un mismo valor, comprendiendo el dispositivo integrado un microprocesador diseñado para manejar estas palabras de datos que tienen este mismo valor que instrucciones neutras.
La ventaja de la presente invención resultará evidente a partir de la siguiente descripción de varias realizaciones con referencia a los dibujos adjuntos, en los que:
- La Figura 1 es una vista esquemática de un dispositivo integrado para el que se puede llevar a cabo la invención; - La Figura 2 es una vista esquemática de un área de memoria no volátil utilizada para almacenar un cargador de arranque y un firmware principal;
- La Figura 3 ilustra las etapas llevadas a cabo de acuerdo con una realización de la invención.
La Figura 1 es una vista esquemática de un ejemplo de dispositivo integrado 1 para el que se puede llevar a cabo la invención. En este ejemplo, el dispositivo integrado 1 es una tarjeta inteligente de acceso utilizada para autentificar a un usuario de forma distante. El dispositivo integrado 1 incluye un microcontrolador 11. Este microcontrolador 11 incluye una memoria RAM 14, una memoria EEPROM no volátil 12 y un microprocesador 15. El microcontrolador 11 también incluye una primera interfaz de entrada / salida 17 y una segunda interfaz de entrada / salida 16. La interfaz de E/S 17 está conectada a una interfaz de contacto 3 de la tarjeta inteligente. La interfaz de contacto 3 está configurada para un lector de tarjetas inteligentes, por ejemplo, un lector de tarjetas inteligentes con comunicación por USB. Por tanto, el microcontrolador 11 es capaz de comunicarse con otros dispositivos, por ejemplo, para llevar a cabo una transacción que incluye una autentificación. La interfaz de E/S 16 está conectada a una antena 4. La antena 4 está configurada para proporcionar una comunicación sin contacto con otros dispositivos, por ejemplo, para llevar a cabo una transacción que incluye una autentificación. La antena 4 puede adaptarse, en particular, para comunicarse usando un protocolo IEEE 802.11.
La Figura 2 es una vista esquemática de la memoria EEPROM 12, por ejemplo, una memoria de tipo Flash. Las memorias de tipo flash se encuentran comúnmente en productos electrónicos de consumo. La memoria de tipo flash se valora en muchas aplicaciones como medio de almacenamiento debido a sus rápidas velocidades de acceso, bajo consumo de energía y funcionamiento no volátil. La memoria EEPROM 12 comprende un área de almacenamiento 121 de cargador de arranque y un área de almacenamiento 122 de firmware principal. La memoria EEPROM 12 almacena el firmware a cargo de administrar las características de bajo nivel del microcontrolador 11. El firmware comprende una parte 123 de cargador de arranque, almacenada en el área 121, y una parte 124 de firmware principal, almacenada en el área 122. El tamaño de la memoria EEPROM 12 puede ser, por lo común, de aproximadamente 400 kB. Obviamente, también se pueden usar diferentes tamaños de memoria sin apartarse de las enseñanzas de la invención.
La parte 123 de cargador de arranque está destinada a ser el primer software ejecutado por el microprocesador 15 en el arranque. La parte 123 de cargador de arranque define en qué dirección se almacena el firmware principal en la EEPROM 12. La parte 123 de cargador de arranque también comprende características para verificar la integridad de la parte 124 de firmware principal. La parte 123 de cargador de arranque se encarga, en particular, de actualizar la parte 124 de firmware principal en caso de que se detecte un fallo de integridad. El área de almacenamiento 121 de cargador de arranque puede tener una capacidad de almacenamiento mayor que el tamaño de la parte 123 de cargador de arranque almacenada.
De acuerdo con la invención, el área de almacenamiento 121 de cargador de arranque puede almacenar una parte del cargador de arranque cargada durante el proceso de fabricación de la tarjeta inteligente 1, o una parte del cargador de arranque cargada en la tarjeta inteligente 1 durante su ciclo de vida.
La memoria EEPROM 12 incluye un conjunto ordenado de bloques de datos. Un bloque de datos se define como el área de almacenamiento más pequeña que se puede borrar de forma independiente. Una página define la unidad más pequeña que se puede escribir en la memoria de tipo Flash en una sola operación. El tamaño de la página define, por tanto, la granularidad de escritura de la memoria de tipo Flash. Estas características de acceso de la memoria de tipo Flash provocan dificultades de gestión. El área de almacenamiento 121 de cargador de arranque comprende uno o más bloques. El área de almacenamiento 122 de firmware principal comprende uno o más bloques.
Si la memoria EEPROM 12 es del tipo Flash, solo permite dos estados de almacenamiento: borrado y no borrado. En el estado borrado, un byte puede ser todos unos (OxFF) o todos ceros (OxOO), dependiendo del dispositivo de tipo flash. En el ejemplo, un byte borrado contiene OxFF. Durante una operación de escritura, uno o más bits se establecen en 0. Un bit de datos solo se puede escribir cuando está inicialmente en un estado de borrado. Una vez escrito, no se puede escribir en el bit antes de borrarlo. Para devolver el bit a su estado de borrado, se debe borrar un bloque de datos completo. La tecnología Flash no permite la alternancia de bits o bytes individuales de un estado no borrado a un estado borrado.
Entre los diversos tipos de memorias de tipo flash, las memorias Flash se encuentran comúnmente en sistemas integrados. Una memoria Flash se organiza en páginas de tamaño fijo (por ejemplo, 512 bytes por página), y un cierto número de páginas constituye un bloque (por ejemplo, 32 páginas por bloque). Con algunos tipos de memorias Flash como la memoria NOR-Flash, el tamaño de la página puede ser tan pequeño como una palabra. El objetivo de la invención es reemplazar de forma segura el software previo por software actualizado en un dispositivo integrado. Un usuario puede realizar convenientemente dicho reemplazo de software para corregir errores del software anterior o para mejorar sus características de seguridad, a todo lo largo del ciclo de vida del dispositivo integrado.
En el caso específico de un procedimiento de actualización de un cargador de arranque, el método de actualización de acuerdo con la invención garantiza que una interrupción repentina de la energía no inutilizará un dispositivo integrado, incluso si la interrupción ocurre después de que se haya borrado el último cargador de arranque y antes de que el cargador de arranque actualizado se active con éxito. Un dispositivo integrado podría volverse inutilizable, en particular, si ocurriera una interrupción durante la escritura del cargador de arranque en la EEPROM y si este cargador de arranque incompleto no se pudiera ejecutar en el siguiente inicio.
La Figura 3 es un diagrama de bloques que enumera las etapas realizadas por un método de acuerdo con una realización de la invención.
En la etapa 201, el dispositivo integrado 1 se sitúa en un entorno en el que puede comunicarse con dispositivos externos. El dispositivo integrado 1 almacena un cargador de arranque previo en su memoria EEPROM 12. El usuario final solicita una actualización del cargador de arranque a través de un dispositivo externo, o bien la activa el propio dispositivo integrado 1. El dispositivo integrado 1 se reinicia y el microprocesador 15 ejecuta el cargador de arranque previo.
En la etapa 202, el cargador de arranque previo borra los bloques de datos que contienen la parte de firmware principal previa del dispositivo 1 integrado, esto es, los bloques de datos del área de almacenamiento 122 de firmware principal.
En la etapa 203, el cargador de arranque previo carga un código de programa de gestión de actualización en la memoria EEPROM 12. El código del programa de gestión de actualización se almacena, por ejemplo, en el área de almacenamiento 122 de firmware principal, en los bloques de datos borrados en la etapa 202. Ventajosamente, la dirección de ejecución del código de programa de gestión de actualización es idéntica a la dirección de ejecución de la parte de firmware principal previo. El comienzo del área de almacenamiento 122 de firmware principal es, ventajosamente, el bloque de datos próximo al área de almacenamiento 121 de cargador de arranque.
En la etapa 204, un cargador de arranque actualizado es cargado en la memoria EEPROM 12, por ejemplo, en el área de almacenamiento 122 de firmware principal, próxima al código del programa de gestión de actualización. El cargador de arranque actualizado se puede almacenar en los bloques de datos borrados, por ejemplo, contiguo al código de programa de gestión de actualización. Este cargador de arranque actualizado está en una forma no arrancable. La dirección de este cargador de arranque actualizado está escrita en el código de programa de gestión de actualización, a fin de que este código de programa de gestión de actualización pueda acceder a ella en un estadio posterior.
En la etapa 205, el dispositivo integrado 1 es, por ejemplo, reiniciado. El cargador de arranque previo todavía se ejecuta en un primer momento. Una vez que ha realizado una verificación de integridad satisfactoria del código de programa de gestión de actualización, activa la ejecución de este código de programa de gestión de actualización. La gestión del dispositivo integrado 1 se transfiere así al código del programa de gestión de actualización.
En la etapa 206, el código de programa de gestión de actualización borra todos los bloques de datos que lo preceden, es decir, todos los bloques de datos del área de almacenamiento 121 de cargador de arranque. El cargador de arranque previo se borra por tanto y, en consecuencia, no se puede utilizar.
En la etapa 207, el código de programa de gestión de actualización almacena una instrucción de actualización que se ejecutará al inicio en el área de cargador de arranque. Por ejemplo, el código de programa de gestión de actualización escribe una instrucción de salto en su propia dirección, en la primera posición de memoria del área de almacenamiento 121 de cargador de arranque. Cuando se lee, la instrucción de salto bifurca la ejecución al código de programa de gestión de actualización.
En la etapa 208, el código de programa de gestión de actualización copia el cargador de arranque actualizado en el área de almacenamiento 121 de cargador de arranque. El salto al código de programa de gestión de actualización permanece almacenado hasta el final de la copia del cargador de arranque actualizado.
En la etapa 209, el código de programa de gestión de actualización finaliza la copia del cargador de arranque actualizado en el área de almacenamiento 121 de cargador de arranque. Realiza una verificación de integridad en el cargador de arranque actualizado copiado para confirmar que este cargador de arranque actualizado se puede ejecutar de forma segura. El código de programa de gestión de actualización modifica entonces la instrucción de salto que incluye su propia dirección. Esta instrucción de salto se modifica, preferiblemente mediante una operación de inscripción atómica, convirtiéndose en una instrucción que bifurca la ejecución al cargador de arranque actualizado al principio del siguiente inicio. La instrucción de salto puede modificarse de manera que refiera la dirección del principio del cargador de arranque actualizado, o bien modificarse como una instrucción neutra, seguida por el propio cargador de arranque actualizado.
En la etapa 210, se reinicia el dispositivo integrado 1 y se ejecuta el cargador de arranque actualizado. El cargador de arranque actualizado instala, ventajosamente, una parte de firmware principal actualizada en el área de almacenamiento 122 de firmware principal. El cargador de arranque actualizado borra, en primer lugar, el (los) bloque(s) de datos que almacena(n) el código de programa de gestión de actualización. El cargador de arranque actualizado escribe entonces la parte de firmware principal actualizada en los bloques de datos borrados, y almacena la dirección de memoria de la parte de firmware principal actualizada.
Se mostrará, a continuación, la seguridad del método analizando la incidencia de una interrupción en cada etapa. Si tiene lugar una interrupción en la etapa 202, el cargador de arranque previo permanece operativo. Al inicio, se ejecuta el cargador de arranque previo y este puede realizar de manera satisfactoria el borrado de la parte de firmware principal previa.
Si tiene lugar una interrupción en la etapa 203, el cargador de arranque previo detecta un error de integridad en el código de programa de gestión de actualización cargado. Al inicio, se ejecuta el cargador de arranque previo y este puede realizar de manera satisfactoria la carga del código de programa de gestión de actualización.
Si se produce una interrupción en la etapa 204, el cargador de arranque previo detecta un error de integridad en el cargador de arranque actualizado cargado. Al inicio, se ejecuta el cargador de arranque previo y este puede realizar de manera satisfactoria la carga del cargador de arranque actualizado en la memoria EEPROM 12. La operación en la que la dirección del cargador de arranque actualizado se escribe en el código de programa de gestión de actualización puede ser atómica, de modo que no hay riesgo de almacenar una dirección inconsistente después de una interrupción.
Si tiene lugar una interrupción en la etapa 205, se ejecuta primeramente el cargador de arranque previo en el siguiente inicio y luego este entrega la gestión del dispositivo 1 integrado al código de programa de gestión de actualización. Por tanto, se reanuda la actualización del cargador de arranque.
Si se produce una interrupción en la etapa 206, los bloques de datos del cargador de arranque previo se borran o permanecen sin cambios, debido a la naturaleza atómica de una etapa de borrado de bloques de datos. Si el borrado no se realizó correctamente, el cargador de arranque previo se ejecutará nuevamente en el próximo inicio y el código de programa de gestión de actualización realizará la etapa de borrado una vez más.
En caso de que los bloques de datos se borren con éxito, todas las palabras de datos almacenadas en ellos tienen el mismo valor. El microprocesador 15 maneja, ventajosamente, tales palabras de datos como instrucciones neutras: una vez ejecutada, una instrucción neutra no interrumpe la ejecución del microprocesador 15 o no modifica su flujo de ejecución. El microprocesador pasa por encima de esa instrucción y ejecuta la siguiente instrucción. Esta puede ser una instrucción indefinida que no desencadena una excepción del microprocesador, o una instrucción básica (por ejemplo, el copiado de un valor de registro en sí mismo) que lleva al microprocesador 15 a ejecutar automáticamente la siguiente instrucción almacenada. Si se produce una interrupción una vez que se han borrado los bloques de datos del cargador de arranque previo, en el siguiente inicio, se lee una instrucción neutra en la primera dirección de la parte de almacenamiento de cargador de arranque. A continuación, el microprocesador 15 ejecuta las siguientes instrucciones neutras de la parte de almacenamiento de cargador de arranque, hasta que llega a la instrucción de inicio del código de programa de gestión de actualización. Seguidamente, se ejecuta el código de programa de gestión de actualización, lo que lleva a la actualización de la parte de cargador de arranque. De esta forma, incluso si la dirección del código de programa de gestión de actualización no pudiera almacenarse en la parte de almacenamiento de cargador de arranque después de una interrupción, el microprocesador 15 aún puede acceder al código de programa de gestión de actualización y ejecutarlo.
En la etapa 207, la escritura de la instrucción de salto en la dirección del código de programa de gestión de actualización, en el área de cargador de arranque, es, ventajosamente, atómica, con el fin de proporcionar una garantía de seguridad. De esta forma, esta operación de escritura no se ve afectada por una interrupción. La instrucción de salto constituye una instrucción de actualización, que proporciona acceso al código de programa de gestión de actualización sin tener que solicitar la ejecución de todas las instrucciones neutras almacenadas en el área de almacenamiento de cargador de arranque borrada. En lugar de una instrucción de salto, se puede utilizar otro tipo de instrucción de bifurcación como instrucción de actualización.
Si se produce una interrupción en el paso 208 hasta la modificación de la instrucción de salto, la instrucción de salto se lee primeramente y el código de programa de gestión de actualización se ejecuta en el siguiente inicio. A continuación, el código de programa de gestión de actualización reanuda la copia del cargador de arranque actualizado en el área de almacenamiento 121 de cargador de arranque.
La instrucción de actualización puede estar formada por un código de salto que comprende varias instrucciones y termina con la instrucción de salto. En tal caso, las primeras instrucciones del código de salto se escriben inicialmente en el área de almacenamiento 121 de cargador de arranque, y la instrucción de salto se escribe en una última operación de escritura atómica.
A diferencia de lo que podría haber concebido un experto en la técnica, las operaciones de borrado y escritura del área de almacenamiento 121 de cargador de arranque están desfasadas en el tiempo, lo que, de hecho, proporciona una seguridad de actualización del cargador de arranque.
El microcontrolador 11 puede incluir, en particular, un microprocesador 15 distribuido comercialmente bajo la referencia ARM7.
Las siguientes instrucciones pueden almacenarse en el área de almacenamiento 121 de cargador de arranque, en la etapa 207:
@OxOO: PC LDR, OxOOOAAAOOBB
(Esta instrucción almacena la dirección en el registro en curso en ese momento)
@ xO1: SALTO OxOOOAAAOOBB
(Esta instrucción es una instrucción de salto que bifurca la ejecución a la dirección OxOOOAAAOOBB) Ventajosamente, la parte AAA de la dirección constituye un desplazamiento de direcciones entre el cargador de arranque actualizado y el código de programa de gestión de actualización. Esto significa que la dirección del cargador de arranque actualizado se puede establecer como OxOOOOOOOOBB. Usando tal desplazamiento, la dirección almacenada en OxYY se puede modificar fácilmente en la etapa 209 de manera que apunte al cargador de arranque actualizado en lugar de al código de programa de gestión de actualización. Los valores 1 incluidos en el desplazamiento de direcciones simplemente se establecen en valores 0 mediante una operación de escritura.
Aunque la invención se ha descrito en su aplicación a un procedimiento de actualización de cargador de arranque, la invención también se aplica a un procedimiento de actualización de cualquier otro tipo de software almacenado en una memoria EEPROM.

Claims (7)

REIVINDICACIONES
1. Un método para actualizar una parte (123) de cargador de arranque previo de un firmware de un dispositivo integrado (1), de tal manera que dicho firmware comprende un conjunto ordenado de bloques de datos y dicho firmware comprende dicha parte (123) de cargador de arranque previo almacenada en un área de almacenamiento (121) de cargador de arranque de la memoria EEPROM del dispositivo integrado, para que se ejecute al inicio del dispositivo integrado, y una parte (124) de firmware principal previo, almacenada en un área de almacenamiento (122) de firmware principal de la memoria EEPROM, de tal modo que el método comprende las etapas, ejecutadas por el dispositivo integrado, de:
a) borrar (202) bloques de datos del área de almacenamiento de firmware principal,
b) cargar en el área de almacenamiento (122) de firmware principal borrada un código de programa de gestión de actualización (203), en una ubicación subsiguiente al área de almacenamiento (121) de cargador de arranque, y una parte (204) de cargador de arranque actualizado, en una ubicación a la que se accede durante la ejecución del código del programa de gestión de actualización,
c) ejecutar la parte (205) de cargador de arranque previo desencadenando una ejecución de dicho código de programa de gestión de actualización, comprendiendo esta etapa de ejecución del código de programa de gestión de actualización:
- borrar (206) bloques de datos del área de almacenamiento de cargador de arranque, de manera que se borre toda el área de memoria que precede al código de programa de gestión de actualización, y almacenar (207) al menos una instrucción de salto al comienzo de dicha área de almacenamiento de cargador de arranque borrada, de tal modo que la ejecución de esta instrucción de salto al inicio bifurca la ejecución del código de programa de gestión de actualización;
- escribir (208) de la parte de cargador de arranque actualizado en el área de almacenamiento de cargador de arranque borrada de la memoria EEPROM;
d) modificar (209) la instrucción de salto de tal modo que la parte de gestor de arranque actualizado del firmware se ejecute al inicio.
2. Un método de acuerdo con la reivindicación 1, que comprende, además, una etapa b') entre las etapas a) y c), de tal manera que la etapa b') comprende un reinicio del dispositivo integrado.
3. Un método de acuerdo con la reivindicación 1, en el que la etapa d) comprende modificar (209) la instrucción de salto para bifurcar la ejecución al software de cargador de arranque actualizado.
4. Un método de acuerdo con la reivindicación 3, en el que la modificación de la instrucción de salto se realiza mediante una operación de inscripción atómica.
5. Un método de acuerdo con la reivindicación 1, que comprende, además, una etapa e) en la que la parte de cargador de arranque actualizado borra el código de programa de gestión de actualización y escribe una parte de firmware principal actualizada en esta posición borrada.
6. Un método de acuerdo con la reivindicación 1, en el que la memoria EEPROM (12) comprende modos de borrado y escritura, de tal manera que la unidad de datos de memoria más pequeña borrada en modo de borrado es de mayor tamaño que la unidad de datos de memoria más pequeña escrita en modo de escritura.
7. Un método de acuerdo con las reivindicaciones 1 y 6, en el que la modificación de la parte de cargador de arranque previo comprende establecer todas las palabras de datos almacenadas en el área (121) de cargador de arranque en un mismo valor, de tal modo que el dispositivo integrado (1) comprende un microprocesador (15) diseñado para manejar estas palabras de datos que tienen este mismo valor que instrucciones neutras.
ES11776462T 2010-11-08 2011-11-02 Procedimiento de actualización de software para un dispositivo integrado Active ES2824830T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP10306218A EP2453352A1 (en) 2010-11-08 2010-11-08 Software updating process for an embedded device
PCT/EP2011/069233 WO2012062632A1 (en) 2010-11-08 2011-11-02 Software updating process for an embedded device

Publications (1)

Publication Number Publication Date
ES2824830T3 true ES2824830T3 (es) 2021-05-13

Family

ID=43901326

Family Applications (1)

Application Number Title Priority Date Filing Date
ES11776462T Active ES2824830T3 (es) 2010-11-08 2011-11-02 Procedimiento de actualización de software para un dispositivo integrado

Country Status (5)

Country Link
US (1) US9164756B2 (es)
EP (2) EP2453352A1 (es)
CN (1) CN103299276B (es)
ES (1) ES2824830T3 (es)
WO (1) WO2012062632A1 (es)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10055251B1 (en) 2009-04-22 2018-08-21 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for injecting code into embedded devices
WO2013176711A2 (en) * 2012-02-15 2013-11-28 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for inhibiting attacks on embedded devices
DE102012012509B4 (de) 2012-06-22 2021-02-04 Giesecke+Devrient Mobile Security Gmbh Verfahren und Vorrichtung zum Austausch des Betriebssystems eines ressourcenbeschränkten tragbaren Datenträgers
FR2993682B1 (fr) * 2012-07-20 2014-08-22 Oberthur Technologies Mise a jour d'un systeme d'exploitation pour element securise
GB2515364B (en) * 2013-12-20 2015-06-17 Nordic Semiconductor Asa Updatable integrated-circuit radio
DE102014224278A1 (de) * 2014-11-27 2016-06-02 Bundesdruckerei Gmbh Verfahren zum Nachladen von Software auf eine Chipkarte durch einen Nachladeautomaten
US9836417B2 (en) * 2015-04-20 2017-12-05 Western Digital Technologies, Inc. Bridge configuration in computing devices
CN106257417B (zh) * 2015-06-17 2021-07-20 中兴通讯股份有限公司 引导程序升级方法、嵌入式设备、控制设备及嵌入式系统
CN105022646B (zh) * 2015-07-13 2018-02-13 苏州大学 一种数据无损的远程代码更新方法和装置
US9959125B2 (en) * 2015-08-05 2018-05-01 Samsung Electronics Co., Ltd. Field update of boot loader using regular device firmware update procedure
CN105511929A (zh) * 2015-12-31 2016-04-20 青岛高校信息产业股份有限公司 一种设备远程无线升级方法
DE102016106819A1 (de) * 2016-04-11 2017-10-26 Endress+Hauser Conducta Gmbh+Co. Kg Verfahren zur Aktualisierung einer Firmware-Komponente und Gerät der Mess- und Regeltechnik
US10372434B1 (en) 2016-07-22 2019-08-06 Amdocs Development Limited Apparatus, computer program, and method for communicating an update to a subset of devices
CN107870775A (zh) * 2016-09-26 2018-04-03 深圳市中兴微电子技术有限公司 一种处理器及BootLoader程序的更新方法
US10740468B2 (en) * 2016-09-30 2020-08-11 Hewlett Packard Enterprise Development Lp Multiple roots of trust to verify integrity
US10846099B2 (en) * 2016-10-07 2020-11-24 Blackberry Limited Selecting a boot loader on an electronic device
US10466994B2 (en) * 2016-11-03 2019-11-05 Digi International Inc. System and methods for wireless firmware upgrades using one-way broadcast transmissions
US10547326B2 (en) * 2017-01-12 2020-01-28 Proton World International N.V. Error correction in a flash memory
DE102017125172A1 (de) 2017-10-26 2019-05-02 Schréder S.A. Verfahren zur Aktualisierung eines Bootloaders eines Controllers einer Leuchte
CN108021383A (zh) * 2017-12-01 2018-05-11 东信和平科技股份有限公司 一种智能卡操作系统升级方法及系统
CN108874434A (zh) * 2018-05-02 2018-11-23 四川斐讯信息技术有限公司 一种可穿戴设备的系统软件升级方法及可穿戴设备
CN109933348B (zh) * 2019-01-21 2023-02-14 宁波普瑞均胜汽车电子有限公司 一种电子控制单元中Bootloader的更新方法和装置
CN111475179B (zh) * 2019-01-23 2023-10-03 北京新能源汽车股份有限公司 一种软件在线刷写方法、装置、电子控制单元及上位机
CN110321150A (zh) * 2019-04-27 2019-10-11 深圳普智远科技有限公司 一种远程更新嵌入式设备软件的方法
US11372979B2 (en) * 2019-12-17 2022-06-28 Hewlett Packard Enterprise Development Lp Computing device login failsafe
CN111562932B (zh) * 2020-05-08 2023-09-26 北京计算机技术及应用研究所 一种高可靠嵌入式软件升级方法及系统
CN111796848A (zh) * 2020-07-08 2020-10-20 中国第一汽车股份有限公司 Bootloader软件更新方法、装置、嵌入式控制器以及存储介质
CN111897594A (zh) * 2020-07-10 2020-11-06 广东小天才科技有限公司 电子设备及其固件加载方法和装置
CN112214345B (zh) * 2020-11-02 2022-12-06 西安电子工程研究所 一种基于多重加载的多fpga软件烧写故障恢复方法
EP4006718B1 (en) * 2020-11-30 2024-05-01 Carrier Corporation Failsafe update of bootloader firmware
CN113434166B (zh) * 2021-06-11 2022-10-11 重庆长安汽车股份有限公司 一种含固定刷写区且可回滚的双备份方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5701492A (en) * 1996-03-29 1997-12-23 Canon Kabushiki Kaisha Fail-safe flashing of EPROM
US7089549B2 (en) * 2002-04-01 2006-08-08 International Business Machines Corp. Updating flash memory
KR100506203B1 (ko) * 2003-09-17 2005-08-05 삼성전자주식회사 부팅 및 부트 코드 업데이트 방법 및 시스템
KR100778293B1 (ko) * 2005-10-10 2007-11-22 삼성전자주식회사 디지털방송처리장치 및 디지털방송처리장치 부트로더의업그레이드 방법
JP2008276555A (ja) * 2007-04-27 2008-11-13 Toshiba Corp 情報処理装置、およびファームウェア更新方法
US20100131694A1 (en) * 2008-11-26 2010-05-27 Kelly Scott G Secure Boot ROM Emulation

Also Published As

Publication number Publication date
US20140351569A1 (en) 2014-11-27
WO2012062632A1 (en) 2012-05-18
CN103299276B (zh) 2016-08-31
US9164756B2 (en) 2015-10-20
CN103299276A (zh) 2013-09-11
EP2638466B1 (en) 2020-08-05
EP2638466A1 (en) 2013-09-18
EP2453352A1 (en) 2012-05-16

Similar Documents

Publication Publication Date Title
ES2824830T3 (es) Procedimiento de actualización de software para un dispositivo integrado
US10552311B2 (en) Recovery for non-volatile memory after power loss
US9542195B1 (en) Motherboards and methods for BIOS failover using a first BIOS chip and a second BIOS chip
KR100584338B1 (ko) 소프트웨어 업데이트 방법 및 시스템
JP4668416B2 (ja) ブート・ブロックへの書き込みアクセスを可能にする時のブート・ブロック・コードの保護
TWI515660B (zh) 韌體變量更新方法
US20070055969A1 (en) System and method for updating firmware
US20070113067A1 (en) Method and apparatus for booting a microprocessor system using boot code stored on a serial flash memory array having a random-access interface
US20110004871A1 (en) Embedded electronic device and firmware updating method thereof
US20040076043A1 (en) Reliable and secure updating and recovery of firmware from a mass storage device
EP2329366B1 (en) Performing a pre-update on a non volatile memory
CN110333891A (zh) 基于物联网的增强型ota升级的方法
JP2008198310A (ja) ビットエラーの修復方法および情報処理装置
US20080098388A1 (en) Safe Flashing
CN101645046A (zh) 一次性可编程存储器仿真
CN110874237A (zh) 软件升级方法、装置、终端以及可读存储介质
US10817213B2 (en) Data storage device and operating method for data storage device
US20150100722A1 (en) Utilizing destructive features as ram code for a storage device
EP4113288B1 (en) Systems and method for bootup activation of firmware images
JP2005056144A (ja) フラッシュメモリ搭載電子装置、そのメモリデータ管理方法およびプログラム
JP2015191395A (ja) 電子情報記憶媒体、情報処理方法、及び情報処理プログラム
KR100575927B1 (ko) 이동통신 단말기에서 부팅 방법
JP2004094628A (ja) フラッシュメモリのメモリ書き換え制御システム、メモリ書き換え制御方法及びメモリ書き換え制御方法の各工程を実行させるプログラム
JP2008305263A (ja) 不揮発性半導体記憶装置及びメモリ管理方法
CN117573174A (zh) 一种基于芯片的更新Bootloader的方法及装置