реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Помогите найти секцию
Troll
сообщение May 5 2009, 12:24
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Доброго дня.

Исходные данные:
- Кусок скрипта линкера
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

Подскажите из-за чего происходит такая фигня.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
klen
сообщение May 5 2009, 13:33
Сообщение #2


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



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

делаем предварительное заключение - скриптт линкера не виноват, еслиб он - то тогдабы и в elf'е косяг был
были у меня траблы с objcopy - выдавал бинать ровно 2Гб независимо от содержания elf.
попробуте так
objcopy -O elf32-littlearm -S _flash.elf flash.bin
Go to the top of the page
 
+Quote Post
Troll
сообщение May 6 2009, 03:36
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Цитата(klen @ May 5 2009, 20:33) *
попробуте так
objcopy -O elf32-littlearm -S _flash.elf flash.bin

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


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
klen
сообщение May 6 2009, 05:20
Сообщение #4


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



а дайте мне cstartup.o lowlevel.o syscalls.o main.o, попробую руками .. поглядеть че происходит.

ну и как вариант взять мой пакет тулсов и ими собрать. посмотреть что выйдет.
Go to the top of the page
 
+Quote Post
Troll
сообщение May 6 2009, 07:39
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



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

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

Архив проекта.
Прикрепленные файлы
Прикрепленный файл  LOADER.rar ( 62.36 килобайт ) Кол-во скачиваний: 19
 


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 6 2009, 08:21
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Могу предложить такую модификацию:
Код
.section .vectors, "ax"
.arm
.....
/*------------------------------------------------------------------------------
*- Function             : reset_handler
*------------------------------------------------------------------------------*/
.section .reset_handler, "ax"
reset_handler:


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Troll
сообщение May 6 2009, 09:32
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



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

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

В целях повышения образованности, что означает параметр "ax"? И почему без него не работает?


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 6 2009, 09:41
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Troll @ May 6 2009, 12:32) *
В целях повышения образованности, что означает параметр "ax"?
allocatable, executable. Соответственно, выходные секции получают эти же атрибуты. А уже по этим атрибутам, видимо, objcopy решает, что включать в выходной hex. Секция .text и ее производные (.text.*) имеет такие атрибуты по умолчанию. Аналогично с .data, .bss


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Troll
сообщение May 6 2009, 11:17
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Всем большое спасибо за помощь. a14.gif


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 18:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01318 секунд с 7
ELECTRONIX ©2004-2016