Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как из elf сделать bin? 
:(
    Опции темы
daemonaz
Дата 25.4.2012, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Вопрос к знатокам eCOS, имеются готовые откомпилированные с помошью ecosconfig библиотеки для jtag и ram, процессор At91sam9263,  я новичок и работал чаше всего с ram, мне удобно заливать бинарники через Redboot. 
Но некоторые функции, недостающиеся в ram, но находятся в jtag, и генерирует только формата elf, вопрос можно ли каким то способом преобразовать его в bin, чтобы была возможность прошить в терминалке верез redboot без программатора?
PM MAIL   Вверх
xvr
Дата 25.4.2012, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Можно. Утилита objcopy из тулчейна. Но сначала убедитесь, что из вашего elf в принципе можно сделать один bin файл (посмотрите секции в elf файле с помощью objdump)


PM MAIL   Вверх
daemonaz
Дата 26.4.2012, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Спасибо.
Библиотеки скомпилированы не мною, а программистами, которые уже уволились, оставив мне в наследии пару лайбов: один так называемый ram я так понял заточен для написания приложения, бинарник его можно прошивать через redboot с помошью команды load, а второй jtag специфический для работы с jtag, бинарник тоже генерирует, но какой-то неправильный, в результате только мы получаем только elf. Я хотел бы уточнить возможно ли преобразовать этот elf в правильный бинарник?

Что нужно посмотреть? заголовки?
Вот что у меня получилось
user posted image


Это сообщение отредактировал(а) daemonaz - 26.4.2012, 10:51
PM MAIL   Вверх
500mhz
Дата 26.4.2012, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



Выкиньте debug info и скажите компилятору скомпилировать все в 1 секцию под нужный адрес


--------------------

PM MAIL ICQ   Вверх
daemonaz
Дата 26.4.2012, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



500mhz,  как это сделать поподробней если несложно?
Наверное имеете ввиду objcopy --strip-debug или --remove-section .debug_info?
PM MAIL   Вверх
daemonaz
Дата 26.4.2012, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



сравнивил заголовки двух elf одного и того же приложения, но скомпилированных под jtag и под ram, разница между ними лишь в размерах секции, затем в makefile вижу такую строку

arm-eabi-objcopy --strip-debug --strip-unneeded $@ -O binary ${BIN}/$@.bin

это просто удаляет ненужные секции для бинарника, первый бинарник под ram правильный, а второй под jtag какой-то неправильный, то есть при заливке и запуске прошивки через Redboot появляется абракадабра и проц виснет до сброса питания. 

jtag
user posted image

ram
user posted image





Это сообщение отредактировал(а) daemonaz - 26.4.2012, 12:19
PM MAIL   Вверх
500mhz
Дата 26.4.2012, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



у тебя адрес загрузки ram и jtag какие?


--------------------

PM MAIL ICQ   Вверх
daemonaz
Дата 26.4.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



500mhz, вот я выложил ldi-файлы


для RAM

Код


#include <cyg/infra/cyg_type.inc>
#include <pkgconf/hal_arm_at91sam9.h>

MEMORY
{
    ram : ORIGIN = 0x20000000, LENGTH = 0x4000000
}

SECTIONS
{
    SECTIONS_BEGIN

    SECTION_fixed_vectors (ram, 0x20000400, LMA_EQ_VMA)

//reserve space for rom monitor
    SECTION_rom_vectors (ram, 0x20032000, LMA_EQ_VMA)
    SECTION_RELOCS (ram, ALIGN (0x1), LMA_EQ_VMA)
    SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_got (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_data (ram, ALIGN (0x4), FOLLOWING (.gcc_except_table))
    SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
    SECTIONS_END
}


для JTAG


Код

// eCos memory layout - Mon Nov 10 16:00:46 MSK 2008

// This is a generated by hands file - do not edit

#include <cyg/infra/cyg_type.inc>
#include <pkgconf/hal_arm_at91sam9.h>

MEMORY
{
    ram : ORIGIN = 0x20000000, LENGTH = 0x4000000
}

SECTIONS
{
    SECTIONS_BEGIN
    SECTION_rom_vectors (ram, 0x20000000, LMA_EQ_VMA)
    SECTION_fixed_vectors (ram, 0x20000400, LMA_EQ_VMA)


    SECTION_RELOCS (ram, ALIGN (0x1), LMA_EQ_VMA)
    SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_got (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA)
    SECTION_data (ram, ALIGN (0x4), FOLLOWING (.gcc_except_table))
    SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA)
    CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
    SECTIONS_END
}


исходя из сравнении двух файлов линковки Ldi разница в адресе rom-vectors
   0x20032000 vs 0x20000000 это как раз адреса RAM

Код


Bootnum E0
Platform: BOARD(cpu 1) Atmel (AT91SAM9263-EK) (ARM926EJ-S)
RAM: 0x20000000-0x24000000 [0x2001b300-0x238ed000 available]
FLASH: 0x10000000-0x107fffff, 128 x 0x10000 blocks




PM MAIL   Вверх
xvr
Дата 26.4.2012, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Ваши конфигурации собраны под разные адреса загрузки. (Возможно, не только адреса там разные - надо смотреть конфигурации сборки)
Возможно jtag'овские бинари надо шить вместо redboot'а (а может и нет)

PM MAIL   Вверх
daemonaz
Дата 26.4.2012, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



xvr, в том то и вся проблема ни порта, ни конфигурации ничего не осталось, есть вот две библиотечные папки: одна ram а другая - jtag, в них содержатся lib и include, да заливается с программатора прямо на redboot, сначала натыкается на зарезервированное место под redboot, затем как то видит свободное место, туда и пишет. Может быть обмануть каким-то способом, мне нужен всего лишь один модуль из-за чего страдаю, это несчатсный spi, которого в ram-конфигурации нет, есть только в jtag.
PM MAIL   Вверх
xvr
Дата 26.4.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(daemonaz @  26.4.2012,  13:06 Найти цитируемый пост)
исходя из сравнении двух файлов линковки Ldi разница в адресе rom-vectors

Не только 'rom-vectors', но и всего, что за ними идет.
Т.е. конфигурация jtag расчитана на прямую загрузку в начало RAM области МК, и явно не через redboot (т.к. он сам там сидит), а через отладочные средства, работающие через JTAG интерфейс с ARM'ом напрямую

Добавлено через 2 минуты и 38 секунд
Цитата(daemonaz @  26.4.2012,  13:26 Найти цитируемый пост)
Может быть обмануть каким-то способом,

Можно. Заливайте через JTAG на адрес 0x20000000 и запускайте оттуда (например через OpenOCD)


Это сообщение отредактировал(а) xvr - 26.4.2012, 13:34
PM MAIL   Вверх
daemonaz
Дата 26.4.2012, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Мне нужен бинарник, чтобы другие люди могли прошивать через Redboot для теста, не прибегая к программаторам и всяким приблюдам типа OpenOCD. По крайней мере понять как залить прошивку и сохранить его в NOR-flash с использованием программатора, поскольку заливается в оперативку, там же запускается. 

Это сообщение отредактировал(а) daemonaz - 27.4.2012, 08:07
PM MAIL   Вверх
xvr
Дата 27.4.2012, 21:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(daemonaz @  26.4.2012,  13:37 Найти цитируемый пост)
Мне нужен бинарник, чтобы другие люди могли прошивать через Redboot для теста, не прибегая к программаторам и всяким приблюдам типа OpenOCD.

Только пересобрать нужные бинарники под конфигурацию RAM. Бинарники, собраные под JTAG конфигурацию в принципе не могут быть залиты через RedBoot (в каком бы виде вы их не подавали - в виде elf или bin файлов). И причина не в формате файла, а в том, что они (бинарники) хотят быть запущенными там, где работает сам RedBoot

Если пересобрать по каким либо причинам невозможно, то остается вариант с промежуточным загрузчиком, который сам будет грузиться в конфигурации RAM и копировать необходимый образ из себя на 0x2000000 и запускать его там. Но этот вариант очень напоминает вырезание гланд автогеном через жо...  smile 

PM MAIL   Вверх
daemonaz
Дата 28.4.2012, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 4.5.2008

Репутация: нет
Всего: нет



Пересобрать к сожалению нет такой возможности.
а что если изменить содержимое файла xxx_jtag.ldi и xxx_jtag.h в папке include, а также xxx_jtag.ld в папке lib, там где указан адрес 0x2000000 на тот адрес, который в конфигурации RAM, и скомпилировать заново? 

Только что попробывал сделать вышеописанное. Вуаля! Все работает! Bin оказался правильным..
Спасибо за помошь! smile 



Это сообщение отредактировал(а) daemonaz - 28.4.2012, 09:34
PM MAIL   Вверх
xvr
Дата 30.4.2012, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(daemonaz @  28.4.2012,  09:21 Найти цитируемый пост)
а что если изменить содержимое файла xxx_jtag.ldi и xxx_jtag.h в папке include, а также xxx_jtag.ld в папке lib, там где указан адрес 0x2000000 на тот адрес, который в конфигурации RAM, и скомпилировать заново? 

Ну собственно это и есть один из вариантов 'пересбора'

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1163 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.