Рука: Как objcopy узнает, какие разделы от эльфа включить в двоичный файл или ihex? - PullRequest
2 голосов
/ 08 июня 2019

Я работаю над проектом, который включает в себя анализ файла arm elf и извлечение из него разделов.

Очевидно, что в файле эльфа имеется множество разделов, которые не загружаются во флэш-память, но мне интересно, как именно objcopy знает, какие разделы следует включать в двоичный файл, который будет записан непосредственно во флэш-память?

Возьмем, к примеру, следующую версию файла arm elf:

Заголовки разделов: [Nr] Имя Тип Addr Off Размер ES Flg Lk Inf Al

[0] NULL00000000 000000 000000 00 0 0 0

[1] .isr_vector PROGBITS 08020000 010000 0001f8 00 WA 0 0 4

[2] .firmware_header_ PROGBITS 080201f8 0101f8 000004 00 WA 0 0 4

[3] .text PROGBITS 08020200 010200 01e11c 00 AX 0 0 64

[4] .ARM.extab PROGBITS 0803e31c 033a68 000000 00 W 0 0 1

[5] .exidxARM_EXIDX 0803e31c 02e31c 000008 00 AL 3 0 4

[6] .ARM. Атрибуты

[8] .fini_array FINI_ARRAY 0803e32c 02e32c 000004 04 WA 0 0 4

[9] .firmware_header PROGBITS 0803e330 02e330 000008 00 WA 0 0 4

[10] .data PROGBITS 20000000 030000 0009c8 00 WA 0 0 8

[11] .RxDecripSection PROGBITS 200009c8 0309c8 000080 00 WA 0 0 4

[12] .RxarraySection PROGBITS 20000a48 030a48 0017d0 00 WA 0 0 4

[13].000080 00 WA 0 0 4

[14] .TxarraySection PROGBITS 20002298 032298 0017d0 00 WA 0 0 4

[15] .bss NOBITS 20003a68 033a68 045bc0 00 WA 0 0 8

[16] .heap PROGBITS 20049628 033a98 000000 00 W 0 0 1

[17] .reserved_for_sta PROGBITS 20049628 033a98 000000 00 W 0 0 1

[18] .battery_backed_s NOBITS 40024000 03400000000c 00 WA 0 0 4

[19] .комментарий PROGBITS 00000000 033a98 000075 01 MS 0 0 1

[20] .debug_frame PROGBITS 00000000 033b10 001404 00 0 0 4

[21] .stab PROGBITS 00000000 034f14 000084 0c 22 0 4

[22] .stabstr STRTAB 00000000 034f98 000117 00 0 0 1

[23]. Symtab SYMTAB 00000000 0350b0 009010 10 24 1646 4

[24] .strtab STRTAB 00000000 03e0c0 003dc8 00 0 0 1

[25] .shstrtab STRTAB 00000000 041e88 000132 00 0 0 1

Теперь, очевидно, довольно многие из этих разделов (например, .TxarraySection) не загружаются во флэш-память.Тем не менее, этот тип раздела - PROGBITS, и он имеет доступный для записи и выделенный флаг.Это ничем не отличается от isr_vector, который загружается, но имеет тот же тип и флаги.Что мне здесь не хватает?Стоит ли искать в шапке программы?

1 Ответ

0 голосов
/ 08 июня 2019

Адрес сообщает, что он находится в ОЗУ, поэтому, если ваш флеш-программист также не может обрабатывать SRAM, вы можете устранить их таким образом.То же самое можно сделать и с символами отладки, их адреса равны нулю.

...