You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

120 lines
4.0 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2007 by Dominic Rath *
  3. * Dominic.Rath@gmx.de *
  4. * *
  5. * Copyright (C) 2007,2008 Øyvind Harboe *
  6. * oyvind.harboe@zylin.com *
  7. * *
  8. * Copyright (C) 2008 by Spencer Oliver *
  9. * spen@spen-soft.co.uk *
  10. * *
  11. * This program is free software; you can redistribute it and/or modify *
  12. * it under the terms of the GNU General Public License as published by *
  13. * the Free Software Foundation; either version 2 of the License, or *
  14. * (at your option) any later version. *
  15. * *
  16. * This program is distributed in the hope that it will be useful, *
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  19. * GNU General Public License for more details. *
  20. * *
  21. * You should have received a copy of the GNU General Public License *
  22. * along with this program; if not, write to the *
  23. * Free Software Foundation, Inc., *
  24. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  25. ***************************************************************************/
  26. #ifndef IMAGE_H
  27. #define IMAGE_H
  28. #include <helper/fileio.h>
  29. #ifdef HAVE_ELF_H
  30. #include <elf.h>
  31. #endif
  32. #define IMAGE_MAX_ERROR_STRING (256)
  33. #define IMAGE_MAX_SECTIONS (512)
  34. #define IMAGE_MEMORY_CACHE_SIZE (2048)
  35. enum image_type
  36. {
  37. IMAGE_BINARY, /* plain binary */
  38. IMAGE_IHEX, /* intel hex-record format */
  39. IMAGE_MEMORY, /* target-memory pseudo-image */
  40. IMAGE_ELF, /* ELF binary */
  41. IMAGE_SRECORD, /* motorola s19 */
  42. IMAGE_BUILDER, /* when building a new image */
  43. };
  44. struct imagesection
  45. {
  46. uint32_t base_address;
  47. uint32_t size;
  48. int flags;
  49. void *private; /* private data */
  50. };
  51. struct image
  52. {
  53. enum image_type type; /* image type (plain, ihex, ...) */
  54. void *type_private; /* type private data */
  55. int num_sections; /* number of sections contained in the image */
  56. struct imagesection *sections; /* array of sections */
  57. int base_address_set; /* whether the image has a base address set (for relocation purposes) */
  58. long long base_address; /* base address, if one is set */
  59. int start_address_set; /* whether the image has a start address (entry point) associated */
  60. uint32_t start_address; /* start address, if one is set */
  61. };
  62. struct image_binary
  63. {
  64. struct fileio fileio;
  65. };
  66. struct image_ihex
  67. {
  68. struct fileio fileio;
  69. uint8_t *buffer;
  70. };
  71. struct image_memory
  72. {
  73. struct target *target;
  74. uint8_t *cache;
  75. uint32_t cache_address;
  76. };
  77. struct image_elf
  78. {
  79. struct fileio fileio;
  80. Elf32_Ehdr *header;
  81. Elf32_Phdr *segments;
  82. uint32_t segment_count;
  83. uint8_t endianness;
  84. };
  85. struct image_mot
  86. {
  87. struct fileio fileio;
  88. uint8_t *buffer;
  89. };
  90. int image_open(struct image *image, const char *url, const char *type_string);
  91. int image_read_section(struct image *image, int section, uint32_t offset,
  92. uint32_t size, uint8_t *buffer, size_t *size_read);
  93. void image_close(struct image *image);
  94. int image_add_section(struct image *image, uint32_t base, uint32_t size,
  95. int flags, uint8_t *data);
  96. int image_calculate_checksum(uint8_t* buffer, uint32_t nbytes,
  97. uint32_t* checksum);
  98. #define ERROR_IMAGE_FORMAT_ERROR (-1400)
  99. #define ERROR_IMAGE_TYPE_UNKNOWN (-1401)
  100. #define ERROR_IMAGE_TEMPORARILY_UNAVAILABLE (-1402)
  101. #define ERROR_IMAGE_CHECKSUM (-1403)
  102. #endif /* IMAGE_H */