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

 
 
> Кросс-компиляция под Xscale/ARM
samosad
сообщение Mar 1 2008, 20:27
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 27-02-08
Пользователь №: 35 445



Добрый вечер, прошу совета по кросс-компиляции.

Значит имеем:
хост - PC, OS OpenSUSE 10.3, с компилятором gcc, всевозможными поднятыми серверами,
таргет - Intel IXDP425, соответственно на ней процессор IXP425 архитектуры Xscale, RedBoot 1.94 / 2

Под целевую платформу собрал Linux - Snapgear 3.5 по инструкции с помощью готового toolchain
arm-linux-tools-20061213.tar.gz отсюда: http://snapgear.org/snapgear/downloads.html.

Linux на неё грузится, радостно запускается, видим командную строку.

Далее пытаюсь пишу элементарную программу типа:
file.c :
Код
main()
{
  while(1);
}

Компилирую под хост - gcc file.c - запускаю, работает;
компилирую под таргет - arm-linux-gcc -mbig-endian file.c - загружаю на платформу, запускаю, резутат типа такого: "ошибка libc.so: выполнение бинарного файла остановлено!"
(если не писать параметр -mbig-endian результат еще хуже: "can not execute binary file")
Причем этот же тулчайн (arm-linux-gcc) только что собрал рабочий Snapgear Linux под эту платформу, а элементарная прога типа этой file.c или HelloWorld просто не запускается.

И еще один вопрос - можно ли запускать исполняемые файлы прямо из под RedBoot'a? Упомянутые выше не запускаются, вызывая зависание системы.

Может кто знает, в чем проблема, подскажите, буду очень благодарен!!!

Сообщение отредактировал samosad - Mar 1 2008, 20:28
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
samosad
сообщение Mar 17 2008, 20:34
Сообщение #2





Группа: Новичок
Сообщений: 6
Регистрация: 27-02-08
Пользователь №: 35 445



значит получил я вот такой файл:
Код
# arm-elf-objdump -h while.elf

while.elf:     file format elf32-bigarm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .init         00000020  00008000  00008000  00008000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .text         000024e4  00008020  00008020  00008020  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .fini         0000001c  0000a504  0000a504  0000a504  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  3 .rodata       0000000c  0000a520  0000a520  0000a520  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .eh_frame     00000004  0000a52c  0000a52c  0000a52c  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 .ctors        00000008  00012530  00012530  0000a530  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  6 .dtors        00000008  00012538  00012538  0000a538  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  7 .jcr          00000004  00012540  00012540  0000a540  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  8 .data         00000930  00012544  00012544  0000a544  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  9 .bss          00000108  00012e74  00012e74  0000ae74  2**2
                  ALLOC
10 .comment      00000498  00000000  00000000  0000ae74  2**0
                  CONTENTS, READONLY
11 .debug_aranges 00000350  00000000  00000000  0000b310  2**3
                  CONTENTS, READONLY, DEBUGGING
12 .debug_pubnames 0000069c  00000000  00000000  0000b660  2**0
                  CONTENTS, READONLY, DEBUGGING
13 .debug_info   0000e556  00000000  00000000  0000bcfc  2**0
                  CONTENTS, READONLY, DEBUGGING
14 .debug_abbrev 0000295d  00000000  00000000  0001a252  2**0
                  CONTENTS, READONLY, DEBUGGING
15 .debug_line   0000217d  00000000  00000000  0001cbaf  2**0
                  CONTENTS, READONLY, DEBUGGING
16 .debug_frame  000008c8  00000000  00000000  0001ed2c  2**2
                  CONTENTS, READONLY, DEBUGGING
17 .debug_str    000013e9  00000000  00000000  0001f5f4  2**0
                  CONTENTS, READONLY, DEBUGGING
18 .debug_loc    000022ae  00000000  00000000  000209dd  2**0
                  CONTENTS, READONLY, DEBUGGING
19 .debug_ranges 000003d0  00000000  00000000  00022c90  2**3
                  CONTENTS, READONLY, DEBUGGING
20 .ARM.attributes 00000010  00000000  00000000  00023060  2**0
                  CONTENTS, READONLY
#

big-endian при компиляции включил.
дальше делаю
Код
# arm-elf-objcopy -O binary while.elf while.bin

при попытке выполнения while.bin под РедБутом плата ресетицца. это конечно тоже результат (раньше зависала и приходилось руками выкл/вкл делать smile.gif ) но всё же не уверен что это правильный результат... аналогичная история с вторым тестовым файлом hello.bin
полдня убил на чтение info ld но что делать не понял. выходит мне придётся писать Makefile и .ld файл в которых надо будет указывать адреса размещения секций программы в памяти??? это ООчень пугает, и откуда брать эти адреса...

может мне нужен другой тулчейн например xscale-elf-gcc? или это тоже самое что arm-elf-gcc?
Go to the top of the page
 
+Quote Post
amw
сообщение Mar 18 2008, 08:40
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(samosad @ Mar 17 2008, 22:34) *
значит получил я вот такой файл:
Код
# arm-elf-objdump -h while.elf

while.elf:     file format elf32-bigarm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .init         00000020  00008000  00008000  00008000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .text         000024e4  00008020  00008020  00008020  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE

VMA == LMA
Похоже на правду.
Смущение вызывает сам адрес. Это область SDRAM? Или Flash? А не занята ли эта область памяти, например RedBoot-ом? Вопросы относятся ко всем секциям.
Если Вы хотите отказаться от ОС, то Вам нужно все делать самому. Абсолютно так-же как и в случае AVR, ARM типа LPC2xxx AT91SAMxxx и др.
Необходимый минимум:
1. Написать скрипт линкера. Описать в нем области памяти (memory region). Распределить секции по этим областям.
2. Написать C-Startup файл. Провести в этом файле инициализацию секций .data и .bss. В случае необходимости (т.е. если RedBoot не делает этого или делает не так как Вам нужно) инициализировать стеки и вектора исключений.
3. Написать простейшую программу на C и помигать светодиодом. printf() не катит, так как неизвестно, куда он будет выводить символы.
4. Покурить ман на предмет отладочных функций RedBoot и попытаться его использовать для отладки.
Цитата
полдня убил на чтение info ld но что делать не понял. выходит мне придётся писать Makefile и .ld файл в которых надо будет указывать адреса размещения секций программы в памяти??? это ООчень пугает, и откуда брать эти адреса...

Либо используйте ОС, либо делайте все самостоятельно.
Цитата
может мне нужен другой тулчейн например xscale-elf-gcc? или это тоже самое что arm-elf-gcc?

Разница только в том (на сколько я успел заметить), что arm-elf-gcc работает всегда и везде, а xscale-elf-gcc мне не удалось заставить работать как надо мне.

Собственно, приведите исходник программы. И начните с "чистого C" а не C++. Проще разбираться.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post



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

 


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


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