Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите найти секцию
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Troll
Доброго дня.

Исходные данные:
- Кусок скрипта линкера
CODE
ENTRY(_exception_vectors)

MEMORY
{
ROM (rx) : ORIGIN = 0x00100000, LENGTH = 0x00040000
RAM (rwx) : ORIGIN = 0x00200000, LENGTH = 0x00008000
REMAPED (rwx) : ORIGIN = 0x00000000, LENGTH = LENGTH(RAM)
}


SECTIONS
{
.vectors : {
KEEP(*(.vectors))
. = ALIGN(64);
} > REMAPED AT > ROM


.text : {
_stext = .;
KEEP(*(.reset_handler)) /* Startup code from .init-section */
...
_etext = . ;
} > ROM


- кусок стартапа:
CODE
.section .vectors
.arm

_exception_vectors:
LDR PC, ResetAddr /* Reset */
LDR PC, UndefAddr /* Undefined instruction */
LDR PC, SWIAddr /* Software interrupt */
LDR PC, PAbortAddr /* Prefetch abort */
LDR PC, DAbortAddr /* Data abort */
NOP /* Reserved */
LDR PC, IRQAddr /* IRQ interrupt */
LDR PC, FIQAddr /* FIQ interrupt */
ResetAddr:
.word ResetHandler
UndefAddr:
.word UndefHandler
SWIAddr:
.word SWIHandler
PAbortAddr:
.word PAbortHandler
DAbortAddr:
.word DAbortHandler
NOP
IRQAddr:
.word IRQHandler
FIQAddr:
.word FIQHandler

/*------------------------------------------------------------------------------
*- Function : reset_handler
*------------------------------------------------------------------------------*/
.section .text
reset_handler:
ResetHandler:
ldr pc, =_low_level_init
...


Все это компилится и собирается.

по map и dump файлам все нормально. Вначале 64 байта для векторов прерывания, затем начиная с 0х100040 идет первая команда после метки ResetHandler (вызов _low_level_init).

Проблема в том, что в бинарнике отсутствует секция векторов (в elf файле секция есть, а здесь...) unsure.gif . То есть сам бинарник начинается с кода команды "ldr pc, =_low_level_init".

Линковка командой: arm-elf-gcc -nostartfiles -Wl,--cref -T elf32-littlearm.lds -lc -lgcc -Wl,-Map=mapfile -Wl,--verbose -n -o _flash.elf cstartup.o lowlevel.o syscalls.o main.o
Бинарник получаю командой: arm-elf-objcopy _flash.elf -O binary _flash.bin

GCC 4.2.2 BinUtils 2.18

Подскажите из-за чего происходит такая фигня.
klen
1. на первый взгляд скрипты адекваты.
2. в elf файле как Вы говорите секция с векторами есть.
3. в бинарнике ее нет.

делаем предварительное заключение - скриптт линкера не виноват, еслиб он - то тогдабы и в elf'е косяг был
были у меня траблы с objcopy - выдавал бинать ровно 2Гб независимо от содержания elf.
попробуте так
objcopy -O elf32-littlearm -S _flash.elf flash.bin
Troll
Цитата(klen @ May 5 2009, 20:33) *
попробуте так
objcopy -O elf32-littlearm -S _flash.elf flash.bin

Опять фигня получается. Теперь в бинарнике в начале появилось 160 байт мусора. А затем с адреса 0х1000A0 идут коды команд ResetHandler.
klen
а дайте мне cstartup.o lowlevel.o syscalls.o main.o, попробую руками .. поглядеть че происходит.

ну и как вариант взять мой пакет тулсов и ими собрать. посмотреть что выйдет.
Troll
Цитата(klen @ May 6 2009, 12:20) *
а дайте мне cstartup.o lowlevel.o syscalls.o main.o, попробую руками .. поглядеть че происходит.

ну и как вариант взять мой пакет тулсов и ими собрать. посмотреть что выйдет.

Архив проекта.
Сергей Борщ
Могу предложить такую модификацию:
Код
.section .vectors, "ax"
.arm
.....
/*------------------------------------------------------------------------------
*- Function             : reset_handler
*------------------------------------------------------------------------------*/
.section .reset_handler, "ax"
reset_handler:
Troll
Цитата(Сергей Борщ @ May 6 2009, 15:21) *
Могу предложить такую модификацию:
Код
.section .vectors, "ax"

Так работает. Спасибо.

В целях повышения образованности, что означает параметр "ax"? И почему без него не работает?
Сергей Борщ
Цитата(Troll @ May 6 2009, 12:32) *
В целях повышения образованности, что означает параметр "ax"?
allocatable, executable. Соответственно, выходные секции получают эти же атрибуты. А уже по этим атрибутам, видимо, objcopy решает, что включать в выходной hex. Секция .text и ее производные (.text.*) имеет такие атрибуты по умолчанию. Аналогично с .data, .bss
Troll
Всем большое спасибо за помощь. a14.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.