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

 
 
> MULTI for MIPS, проблемма линковки
jorikdima
сообщение Sep 15 2006, 07:25
Сообщение #1


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Добрый день.
Уже достало мучится с этим Гринхилсом.
Существует достаточно большой проект для MIPS написаный на С. Изначально писался под компилятор GNU sde toolchain, соответственно были написаны скрипты компилятору и линкеру. Все нормально компилируется и линкуется. Но встала необходимость (рассматривается возможность на самом деле) перейти на другой компилятор, например МУЛЬТИ (под МИПС больше ничем особо не пахнет).
И вот вроде бы перенес все настроики компилятора, все вроде бы компилится, дело за малым - линковка biggrin.gif . И вот тут проблему никак не удается решить. Создаю свой файл дириктив линкеру, прописываю там области памяти и секции (то как он парсит этотт файл - отдельная история cranky.gif ):
Код
CONSTANTS
{
    FLAS_BASE = 0xBFC00000
;
    FLASH_OFFSET = 0x4000
;
    RAM_BASE = 0xA0000000
;
    SCRATCHPAD_BASE = 0xBC000000
;
}
MEMORY
{
    flash    : ORIGIN = FLAS_BASE + FLASH_OFFSET ,    LENGTH = 10M
    ram    : ORIGIN = RAM_BASE ,    LENGTH = 10M
    scratch : ORIGIN = SCRATCHPAD_BASE , LENGTH = 10M
}
SECTIONS
{
    .code : {
        init.o ( .text )
        * ( .text )
        * ( .rodata )
        * ( .rel.dyn )
        * ( .eh_frame )
        
    } > flash
    .initial_dataf ROM ( .initial_data ) : {
        * ( .data )
        * ( .lit8 )
        * ( .lit4 )
        * ( .sdata )
    } > .
    .uninitial_dataf ROM ( .uninitial_data ) : {
        * ( .sbss )
        * ( .scommon )
        * ( .bss )
        * ( COMMON )
    } > .
    .isramf  ROM ( .isram ) : {
        * ( .isram )
    } > .
    .ROM.free_space ROM ( .free_space ) : > .

    end = .;

    .initial_data : > ram
    .uninitial_data : > .
    .free_space : > .
    .isram : > scratch
    

}


Ставлю в настройках проекта [Linker Command File]= мой файл. Типа теперь он должен использовать ТОЛЬКО МОИ секции, но линкер упорно продолжает видеть также свой дефолтовый файл standalone_ram.ld . И пишет, что одна из моих секций перекрывается с одной из секций в его файле.
Код
SECTIONS
{
    .zdata                        ABS : > zero_memory
    .zbss                        ABS : > .
    .rozdata                            ABS : > .

    .text                            : > dram_memory
    .syscall                            : > .
    .secinfo                            : > .
    .fixaddr                            : > .
    .fixtype                            : > .
    .robase                           ALIGN(8) : > .
    .rodata                            : > .

    .sdabase                               ALIGN(8) : > .
    .sdata                            : > .
    .sbss                            : > .
    .rosdata                            : > .
    .data                            : > .
    .profile                            : > .
    .bss                            : > .
    .heap                ALIGN(8) PAD(heap_reserve)  : > .
    .stack                ALIGN(8) PAD(stack_reserve) : > .

Причем то что он продолжает как то использовать свой файл - тоочно, так как если его открытьь и закоментить (как то изменить) то он начинает выдавать адекватные ошибки по этому поводу. Почему он упорно не хочет отказыватся от своего файла.

Второе. Я вообще хотел бы на выходе получить бинарник. Для этого я так понимаю надо поставить опцию Binary Code Generation но сразу при построении проекта среда говорит, что для МИПСа я этого сделатьь не могу, почему??? Может эта опция не о том? Для х86 - тоже самое. Если без этой опции скомпилить сэмпл, то ниче похожего на бинарник нету, только объектные файлы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andk
сообщение Sep 18 2006, 05:17
Сообщение #2


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

Группа: Свой
Сообщений: 199
Регистрация: 17-12-04
Из: Миасс
Пользователь №: 1 519



Да, GHS довольно своеобразная среда..smile.gif
Я к ней привыкнуть не смог, пользуюсть отдельными утилитами. Только отладчик запускаю из-под среды.
Просмотри файлы проекта (default.gpj, *.gpj) скорее всего там и найдешь проблему.

В оконцовке у меня это выглядит примерно так:
1. Батник для запуска компилятора -
......
D:\Dev\GHS\mips407\gbuild.exe -all default.gpj
.......

default.gpj - файл "проекта" -

#!gbuild
primaryTarget=mips_standalone.tgt
[Project]
-bsp generic <<< здесь глобальные настройки компилятора
-G
-object_dir=objs
-wantprototype
-cpu=rc32364
-littleendian
default.con
src\hello.gpj [Program]
src\resource.gpj [Project]

Если настройки компилятора разные для разных файлов, то оформляется ввиде "подпроектов" с индивидуальными настройками внутри.
Соответственно, hello.gpj и resource.gpj - файлы:
#!gbuild
[Program]
hello.c <<< исходники добавляю свои, как мне нужно
dmatest.c
tdm.c
eth.c
DspIf.c
standalone_ram.ld <<< файлик для линкера - я имя его не менял, потроха поправил и все.

resource.gpj - не разбирался, зачем этот файл, поэтому оставил все как было.
#!gbuild
[Project]
resource_readme.txt
standalone_ram.ld

Ну и все практически smile.gif
В standalone_ram.ld правишь что тебе нужно, прикручиваешь свою любимую среду и вперед!
Кстати, хелп у GHS не плохой, много полезных фич можно вычитать.

Бинарник... не помню, по моему не заморачиваясь на разборки с линкерными ключами - конвертировал из ELF - да он не очень мне нужен был.
А Вообще - Build options - Linker - Generate additional output.

Creates the specified output type in addition to the project executable. Permitted settings
for this option are:
<> Memory Image File (-memory) &ndash; Generates output file with .mem extension containing the output of the image as translated by the gmemfile utility program. For more information about gmemfile, see "The gmemfile Utility Program" in the MULTI: Building Applications book for your target.

Вроде то, что тебе нужно. По виду - честный образ памяти.

<> S-Record File (-srec) &ndash; Generates output file with .run extension
containing the output of the image as translated by the gsrec utility program. For more information about gsrec, see "The gsrec Utility Program" in the MULTI: Building Applications book for your target.

<> None (--no_additional_output) : [default]
Go to the top of the page
 
+Quote Post



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

 


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


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