Ha especificado incorrectamente la dirección del gestor de arranque, y eso es importante.
Si las regiones que ocuparían el cargador de arranque y los programas de aplicación son contiguos con un poco de relleno para permitir el crecimiento de futuras versiones del cargador de arranque, simplemente puede concatenar los archivos binarios (con relleno) y producir un único binario plano. Si ambos van al mismo banco flash de usuario, ese sería el caso. Pero si las regiones son distcontinuas, entonces necesitarías un formato como un Intel Hex o un archivo de registro s o un .elf que pueda acomodar saltos a varias direcciones.
Con una cadena de herramientas de estilo GCC (como los propios Atmel ahora ofrecen para sus piezas ARM), normalmente puede utilizar el arm-none-eabi-objcopy
(la identificación del medio puede variar) para manipular y combinar archivos binarios .elf, hexadecimales y planos. Para casos simples, también puede combinar archivos binarios planos con cat
(si no se necesita relleno) o dd
(si lo es), y combinar archivos .hex con cat
o un editor de texto con secuencias de comandos, posiblemente después de eliminar cualquier Metadatos de archivo completo.
Para un programa típico que incluye el gestor de arranque que está viendo, encontrará las asignaciones de memoria reales en el archivo de script de vinculador (.ld), y puede encontrar el uso de objcopy
para producir un binario plano en el proyecto Makefile.
Tenga en cuenta que generalmente desea compilar y vincular cada uno de los cargadores de arranque y el programa de aplicación como proyectos independientes; no desea que el vinculador intente compartir nada entre ellos, excepto posiblemente por cosas que define en direcciones de envío fijas; de lo contrario, se vuelve casi imposible cambiar uno sin requerir una reconstrucción del otro, lo que en gran parte anula el propósito de tener un cargador de arranque. Cuando hago cargadores de arranque para sistemas basados en ARM, normalmente el analizador de arranque analiza la tabla de vectores al inicio del programa de aplicación, imitando lo que hace el hardware en el inicio; eso también hace posible simplemente copiar la tabla de vectores del programa de la aplicación a la dirección de inicio del hardware y hacer que el chip se inicie directamente en la aplicación sin un cargador de arranque, lo que puede simplificar la depuración.