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

 
 
 
Reply to this topicStart new topic
> Ошибка undefined reference
Fujitser
сообщение Jan 25 2017, 06:53
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 28-02-05
Из: Екатеринбург
Пользователь №: 2 925



Пытаюсь собрать в DS-5 Altera Edition проект BareMetalBoot-GNU (с сайта rocketboards.org)
Тулчейн arm-none-eabi-gcc.
Возникают ошибки типа:
undefined reference to `__bss_start__'
undefined reference to `__bss_end__'
undefined reference to `alt_clk_ext_clk_freq_set'
и т.п.

Что делать и в какую сторону копать вообще?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 25 2017, 10:24
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Копать в сторону скрипта линкера и стартапа.

Для bare metall проектов всегда есть ассемблерный файлик который линкуется по адресу 0 и с выполнения которого начинается всё веселье.
Там в этом файлике происходит копировние всех необходимых секций из ROM в RAM, очистка RAM нулями там где надо, заполнение таблицы прерываний.. и т.д.. Короче всё для того, чтоб дальше Сишный код работал.
Очень похоже, что у вас этого стартапа просто нет.

У вас кстати скорее наоборот - нет скрипта линкера, который переменные __bss_start__ __bss_end__ объявляет, а стартап на них ссылается, но их нет. В итоге фиаско )


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Fujitser
сообщение Jan 25 2017, 14:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 28-02-05
Из: Екатеринбург
Пользователь №: 2 925



Цитата(sigmaN @ Jan 25 2017, 15:24) *
У вас кстати скорее наоборот - нет скрипта линкера, который переменные __bss_start__ __bss_end__ объявляет, а стартап на них ссылается, но их нет. В итоге фиаско )


Спасибо за подсказку. Скрипт линкера есть, в нём есть такие строки:
Код
  .bss : ALIGN (8)
  {
    *(.shbss)
    *(.bss .bss.* .gnu.linkonce.b.*)
    *(COMMON)
    . = ALIGN (8);
    *(.ram.b .bss.ram)
    . = ALIGN (8);
    _end = .;
    __end = .;
  } >ram

и ещё куча всего.

startup.s тоже есть, но он какой-то почти пустой:
Код
.globl __reset

.text

__reset:
   b _start

и всё. То есть он ссылается только на _start, в скрипте линковки это определено как:
Код
    PROVIDE(__cs3_reset = __reset);
    *(.cs3.reset)
    _start = DEFINED(__cs3_start_asm) ? __cs3_start_asm : _start;


В общем, пока ясности не прибавилось.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 25 2017, 16:23
Сообщение #4


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Очень даже прибавилось. Все пустое и какое-то стандартное. Вам нужны стартап и скрипт линкера под ваш камень.
Ну, либо вы не распутали историю до конца.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Fujitser
сообщение Jan 26 2017, 16:09
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 28-02-05
Из: Екатеринбург
Пользователь №: 2 925



Цитата(sigmaN @ Jan 25 2017, 21:23) *
Очень даже прибавилось. Все пустое и какое-то стандартное. Вам нужны стартап и скрипт линкера под ваш камень.
Ну, либо вы не распутали историю до конца.


Просто скрипт линкера я не весь привёл, он реально большой. А стартовый код вот такой, да.
Камень Cyclone V.
Ещё раз спасибо, буду дальше думать.
Go to the top of the page
 
+Quote Post

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

 


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


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