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

 
 
 
Reply to this topicStart new topic
> Raw binary в Arm Realview/ADS/SDT
Hexxx
сообщение Oct 27 2007, 20:01
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 49
Регистрация: 29-03-06
Пользователь №: 15 592



Сделать свой ассемблерный startup ARM код и потом переход в сишный Thumb. Код асемблерный написал. В конце ассемблера вот такой переход:
Код
LDR   R12,   Main_Addr
BX    R12
  
IMPORT  __program_start      

Main_Addr DCD __program_start


Написал сишный код чтобы посмотреть как соберется:
Код
extern int __program_start(void);
int __program_start(void)
{
    return 1;
}


Компилится, собираю образ получаю:
Код
Warning : L6323W: Multiple variants of __program_start exist. Using the ARM variant to resolve relocation #0 in init.o(BOOT_NAND_LOADER)

Warning : L6323W: Multiple variants of __program_start exist. Using the ARM variant to resolve relocation #0 in init.o(BOOT_NAND_LOADER)

Warning : L6305W: Image does not have an entry point. (Not specified or not set due to multiple choices.)

В полученом образе получается, что сначала идет функция __program_start, а только потом startup код, который прыгает на __program_start.

Вопрос 1: как ему правильно задать entry point? ENTRY в ассемблере я писал. И в настройках проекта пытался указать имя - упорно невидит.
Вопрос 2: как сделать так чтобы вначале был таки startup код?
Впорос 3: откуда у компилера "Multiple variants of __program_start"? Как это убрать?

Сообщение отредактировал Hexxx - Oct 27 2007, 20:11
Go to the top of the page
 
+Quote Post
Leen
сообщение Oct 28 2007, 01:51
Сообщение #2


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

Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343



Цитата(Hexxx @ Oct 28 2007, 06:01) *
Вопрос 2: как сделать так чтобы вначале был таки startup код?

Это делается (в рвст) скриптом линкера:
Код
FLASH_LOAD 0x100000
  {
  EXE +0 0x40000
    {
    *.o (RESET, +FIRST) // это первый код, который линкер поместит в данную область.
    * (+RO)
    }
  DATA 0x200000 0x8000
    {
    * (+RW +ZI)
    }
  }
Go to the top of the page
 
+Quote Post
Hexxx
сообщение Oct 28 2007, 07:58
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 49
Регистрация: 29-03-06
Пользователь №: 15 592



Написал вот такой scatter файл:
Код
LOADREG1 0x800000 0x4000
{
    EXECREG1 0x800000
    {
        init.o (BOOT_INIT, +FIRST)
        * (+RO)
        
    }
}


Получаю:
Error : L6235E: scatter.txt(line 5, col 28) More than one section matches selector - cannot all be FIRST/LAST.
scatter.txt line 5

ОТКУДА у него "More than one"????

Сообщение, которое форум прилепил автоматом №1
Вроде понял. У меня просто init.s добавлен в сам проект. И оно его пытается повторно собрать и прилинковать. А как мне тогда сделать чтобы и init.s билдился, но повторно не пытался линковаться?

Сообщение, которое форум прилепил автоматом №2
Ага, надо просто убрать init.s из Link Order!

Сообщение отредактировал Hexxx - Oct 28 2007, 08:10
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:43
Рейтинг@Mail.ru


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