Стесняюсь спросить...
Может это многообещающее сообщение откроет новый топик?
Какой именно файл подвергся "расчленению" и как его получить для "кормления IDA"?
Я уже вчера по данной теме нашел время - там всё неправильно. Оказалось, что вся организация сборки системы на SDK к GCC неправильная.
Процедуры из ROM-BIOS используют RAM (у них свои сегменты text, rodata, bss, ...) и изменить их нет возможности. А они неправильно размаплены в *.ld для GCC без NDA.
Надо отдельную тему - Распределение карты адресации CPU в RTL-ах, но времени на то нет. Что-то одно - или собирать правильный вариант, или описывать текущие беды и что есть "телепузикам".
Примерно вот с таким rtl871xAx-symbol-v01-rom.ld удается собрать rom.a для boot, т.к. в области загружаемого boot находятся данные от ROM-BIOS и они используются.
Код:
ENTRY(Reset_Handler)
MEMORY
{
ROM (rx) : ORIGIN = 0x00000000, LENGTH = 1M
SRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 448K
TCM (rwx) : ORIGIN = 0x1FFF0000, LENGTH = 65K
SDRAM_RAM (rwx) : ORIGIN = 0x30000000, LENGTH = 2M
}
SECTIONS
{
.rom :
{
__rom_image_start__ = .;
KEEP(*(.rom));
__rom_image_end__ = .;
} > ROM
.rom.global.variable :
{
__ram_image_start__ = .;
KEEP(*(.ram_dedecated_vector_table)); /* 0x10000000: NewVectorTable */
KEEP(*(.ram_user_define_irq_table)); /* 0x10000100: UserIrqFunTable */
KEEP(*(.ram_user_define_data_table)); /* 0x10000200: UserIrqDataTable */
/* __rom_bss_start__ = .; */
KEEP(*(.hal.ram.bss)); /* 0x10000300: CfgSysDebugWarn .. _pHAL_Gpio_Adapter */
KEEP(*(.timer2_7_vector_table.data)); /* 0x10000358: Timer2To7VectorTable */
KEEP(*(.infra.ram.bss)); /* 0x10000370: first .. z4 */
KEEP(*(.mon.ram.bss)); /* 0x10000384: pUartLogCtl .. ArgvArray, __rom_bss_end__ */
KEEP(*(.wlan_ram_map)); /* 0x100006e0: FalseAlmCnt, ROMInfo, DM_CfoTrack */
KEEP(*(.libc.ram.bss)); /* 0x10000760: rom_libgloss_ram_map __rtl_malloc_av_ __rtl_errno */
/* __rom_bss_end__ = .; */
/* __ram_start_table_start__ = .; */ /* 0x10000bc8: bootloader */
KEEP(*(SORT(.start.ram.data*)))
/* __ram_start_table_end__ = .; */
/* __image1_validate_code__ = .; */ /* 0x10000bdc: sign */
KEEP(*(.data));
KEEP(*(.hal.ram.data)); /* 0x10001c60: _reent *rtl_impure_ptr .. impure_data */
KEEP(*(.text*));
KEEP(*(.text));
__ram_image_end__ = .;
} > SRAM
}
SECTIONS
{
__rom_bss_start__ = 0x10000300; /* use in rom */
__rom_bss_end__ = 0x10000bc8; /* use in rom */
__ram_start_table_start__ = 0x10000bc8; /* use in rom */
__image1_validate_code__ = 0x10000bdc; /* needed by ram code */
_rtl_impure_ptr = 0x10001c60; /* for standard library */
}
Требуется интеграция этих данных в тело boot.
Но есть проблемы - GCC собирает некоторые сегменты в своей сортировке и адресация на данные нарушается (возникают отличия от варианта трансляции при изготовлении маски ROM к чипу внутри мелких сегментов, а общая структура не страдает)
Берем к примеру IAR:
Область переменных для ROM-BIOS в RAM по map (какого-то проекта) выходит такая:
Код:
10000000 D .vector_table$$Base
10000000 D NewVectorTable
10000000 d .LANCHOR2
10000100 D .user_vector_table$$Base
10000100 D .vector_table$$Limit
10000100 D UserIrqFunTable
10000100 d .LANCHOR0
10000200 D .user_data_table$$Base
10000200 D .user_vector_table$$Limit
10000200 D UserIrqDataTable
10000200 d .LANCHOR1
10000300 A __rom_bss_start__
10000300 D .rom.bss$$Base
10000300 D .user_data_table$$Limit
10000300 D CfgSysDebugWarn
10000304 D CfgSysDebugInfo
10000308 D CfgSysDebugErr
1000030c D ConfigDebugWarn
10000310 D ConfigDebugInfo
10000314 D ConfigDebugErr
10000318 D HalTimerOp
10000318 d .LANCHOR1
10000334 D GPIOState
10000334 d .LANCHOR0
1000034c D gTimerRecord
1000034c d .LANCHOR1
10000350 D SSI_DBG_CONFIG
10000350 d .LANCHOR0
10000354 D _pHAL_Gpio_Adapter
10000354 d .LANCHOR1
10000358 D Timer2To7VectorTable
10000358 d .LANCHOR0
10000370 d .LANCHOR0
10000370 d first
10000374 d z1
10000378 d z2
1000037c d z3
10000380 d z4
10000384 D UartLogCtl
100003ac D UartLogBuf
1000042c D UartLogHistoryBuf
100006a8 D pUartLogCtl
100006ac D ArgvArray
100006d4 D rom_wlan_ram_map
100006e0 D FalseAlmCnt
100006e0 d .LANCHOR0
10000720 D ROMInfo
10000738 D DM_CfoTrack
10000760 D rom_libgloss_ram_map
10000760 d .LANCHOR0
10000780 d .LANCHOR0
10000780 d __rtl_malloc_av_
10000b88 d __rtl_malloc_trim_threshold
10000b8c d __rtl_malloc_top_pad
10000b90 d __rtl_malloc_sbrk_base
10000b94 d __rtl_malloc_max_sbrked_mem
10000b98 d __rtl_malloc_max_total_mem
10000b9c d __rtl_malloc_current_mallinfo
10000bc4 D __rtl_errno
10000bc4 d .LANCHOR0
10000bc8 A __ram_start_table_start__
10000bc8 A __rom_bss_end__
10000bc8 D .rom.bss$$Limit
10000bc8 D IMAGE1$$Base
10000bc8 D bootloader
10000bdc A __image1_validate_code__
10001c60 A _rtl_impure_ptr
И видим различие некоторых адресов переменных (в областях их сегмента, т.к. у GCC своя политика сортировки в пределах конкретного сегмента), указанных в *.ld (export-rom_v02.txt или export-rom_v03.txt) кинутых народу для GCC.
IAR не использует *.ld (export-rom_v02.txt или export-rom_v03.txt) - он берет rom.a и из неё получает адреса процедур и данных ROM-BIOS.
Так-же не совпадают структуры WiFi для бинарных либ, не имеющих исходников - различия трансялции у GCC и IAR.
Можно пофиксить адреса к примеру записями типа:
_rtl_impure_ptr = 0x10001c60; /* for standard library */
но в промежутке между ними данные становятся неизвестными, пока полной карты не собрал (закончил копашения на том, что одна переменная не там садится в GCC... Сейчас итоговый бинарник самой части кодов V00 ROM-BIOS получается совпадающим по адресации процедур и данных в области ROM, одно несовпадение в сегменте RAM). ( ROM-BIOS в чипе имеет и дописанную часть V01 - но от неё вообще нет ничего кроме заголовков - см. export-rom_v03.txt).
Описывать более подробно не имею возможности.
Подождем "водопроводчика со стажем" findeler-а
:
Нет, надо разобраться. Всё должно быть в одном каталоге. Как я писал.
Распаковал- запустил - скомпилировал - загрузил - работает. Потом можно ковыряться.
Он "быстро стартанет" и сделает нам правильную версию под GCC cо всеми исходниками под GCC, хотя-бы на платку STM32F407 с STlink-ом и boot-loader-ом
А то народ не может "стартануть" по findeler-овски на них уже который год...