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

 
 
85 страниц V  « < 42 43 44 45 46 > »   
Reply to this topicStart new topic
> свежак KGP win32/arm/avr/mips/m68k, GNU tools chain
klen
сообщение Oct 17 2011, 13:02
Сообщение #646


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(_3m @ Oct 15 2011, 08:09) *
Сама либа есть, но либо что то с путями либо она лежит не там где нужно. А насчет битости - не знаю как проверить.

Не забывает кешировать либы! товарищи! ldconfig приходит на помощ...
Go to the top of the page
 
+Quote Post
Ash_snz
сообщение Nov 2 2011, 16:12
Сообщение #647


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958



Солнце еще не погасло, но я кажется начинаю разбираться.

Вопрос по коду. Он вылетает в ошибку если пытаться .bss сунуть в память сразу после .data (пытаюсь расположить их в оперативу)

CODE
SECTIONS
{
.txt1 0xbfc00000 :
{
boot.o (.text)
}

.txt2 0xbfc00180 :
{
except.o (.text)
}

.txt3 (ADDR(.txt2) + SIZEOF(.txt2)) :
AT (ADDR(.txt2) + SIZEOF(.txt2))
{
tini.o (.text)
}


.txt4 (ADDR(.txt3) + SIZEOF(.txt3) - 0x20000000) :
AT (ADDR(.txt3) + SIZEOF(.txt3))
{
main_text_start = .;
CREATE_OBJECT_SYMBOLS
main.o (.text .text.* .text.cos)
mxm_ash.o (.text)
*(.text.*)
}

_gp=ALIGN(16) + 0x7ff0;

.rodata (main_text_start + SIZEOF (.rodata))
{
*(.rodata .rodata.*)
}

.sdata (ADDR(.rodata) + SIZEOF(.rodata))
{
PROVIDE (_errno=0);
*(.sdata .sdata.* .gnu.linkonce.s.*)
}


.data 0xa0000000 :
{
*(.data)
SORT(CONSTRUCTORS)
}


.bss /*(ADDR(.data) + SIZEOF(.data))*/ : /*<--Если снять ремарку, то появляются ошибки*/
{
*(.bss)
*(COMMON)
}

.sbss :
{
*(.dynsbss)
*(.sbss .sbss.* .gnu.linkonce.sb.*)
*(.scommon)
}

}


Ошибки выглядят вот так:
Код
comdiv32-kgp-elf-ld: small-data section exceeds 64KB; lower small-data size limit (see option -G)
main.o: In function 'timera_interrupt':
(.text+0x910):relocation truncated to fit: R_MIPS_GPREL16 against 'timer_counter'

Остальные аналогичные.
Почему не дает-то? по всякому уже пробовал... sad.gif

Сообщение отредактировал IgorKossak - Nov 2 2011, 17:55
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 7 2011, 06:29
Сообщение #648


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



2_Ash_snz
уу.... бойци невидимого(или недвижиммого ??) фронта прорезались...
дайте карту раскладки памяти на кристалле(плате), напишем Вам тестовый скрипт линкера, а то тот который Вы предлагаете чудной.


2_All
собрал спецсборку для CortexM4, все либы что используют плавучку ( втроенные операции над типом float и libm )- особраны с использованием FPU. пожже выложу. люди хелп...дайте кому не жалко платку с stm32f4xx напрокат потестить компиллер...
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 8 2011, 19:49
Сообщение #649


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



свежак для ARM. хост - linux64

http://klen.org/Files/DevTools/linux-x86_6..._64-20111108.7z
75.2 Mb

в мультилиб добавил отдельный вариант для микросхем Cortex-M4 и Cortex-M4F

соответственно при компиляции с ключеми -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 будет компилятся код с подержкой cоспроца и также будут линковатся с версиями библиотек которые собраны с этими же ключами (libc libm libgfortan ... ). в выходном коде Вы с радостью обнаружите инструкции сопроца.

если подсунуть только -mcpu=cortex-m4 то процес аналогичный за исключением того что либы без поддержки сопроца, но за счет того что в едре четверки реализован simd набор можно тоже получит профицит по сравнению с кодом скомпленным с -mcpu=cortex-m3 (который в обязательном порядке должен работать на Cortex-M4 )

поскольку самого пациента нихт... тестировал глазами глядя на выходящий асм. с нетерпением жду отзывов и момента когда к нам привезут микросхемы на опыты.
Go to the top of the page
 
+Quote Post
Ash_snz
сообщение Nov 9 2011, 05:35
Сообщение #650


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958



Цитата(klen @ Nov 7 2011, 12:29) *
2_Ash_snz
уу.... бойци невидимого(или недвижиммого ??) фронта прорезались...
дайте карту раскладки памяти на кристалле(плате), напишем Вам тестовый скрипт линкера, а то тот который Вы предлагаете чудной.
Бойцы невидимого фронта сильно зависят от задач, которые ставят выше.
ОК, Раскладку нарисую. А почему чудной? вроде довольно последовательно...
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 9 2011, 06:29
Сообщение #651


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(Ash_snz @ Nov 9 2011, 09:35) *
Бойцы невидимого фронта сильно зависят от задач, которые ставят выше.
ОК, Раскладку нарисую. А почему чудной? вроде довольно последовательно...

чудной поому что Вы явно распихиваете объектники - зачем такой гимор? а если еще модуль появится в проекте - оптья скрипт править? я правильно понял содержимое скрипта?
Go to the top of the page
 
+Quote Post
Ash_snz
сообщение Nov 9 2011, 09:16
Сообщение #652


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958



Цитата(klen @ Nov 9 2011, 12:29) *
чудной поому что Вы явно распихиваете объектники - зачем такой гимор? а если еще модуль появится в проекте - оптья скрипт править? я правильно понял содержимое скрипта?
Верно. Так и есть.

Карта:
ОЗУ 0xa000 0000 - 0xa00F FFFF (1MB)
ПЗУ 0xBFC0 0000 - 0xBFCF FFFF (1MB)
Это все виртуальные адреса.

При этом существует кешируемая память. т.е. физические адреса будут теже (кому в ОЗУ - тому в ОЗУ, кому в ПЗУ - тому в ПЗУ) а виртуальные станут на -0x2000 0000 меньше
Получается что при обращении по уменьшенному адресу данные побегут через кеш проца, но наруже попадают все равно туда же.
Кешируемое:
ОЗУ 0x8000 0000 - 0x800f ffff
ПЗУ 0x9fc0 0000 - 0x9fcf ffff

boot.o Мы четко располагаем в 0xbfc0 0000 это стартовый адрес - никуда не дется
except.o тоже четко в 0xbfc0 0180 это адрес обработчика прерываний.
tini.o - инициализация, расположили за ними.
Это все без вариантов в некешируемой области (еще и на ассемблере).

Текст основной программы main.o в кешируемую область, поэтому от адреса - 0x20000000, но расположили в бинарнике сразу за предыдущей секцией, чтобы не получать бинарник на полГига и запихать его в пзушку.

Расположение остальных секций - шаманство с переменными.

зы на самом деле при обращении в ПЗУ по стартовому адрему 0xbfc0 0000 мы попадаем не в начало ПЗУ, это ровно ее середина.
Соответственно начало ПЗУ в адресе 0xbfb0 0000 и размер ее 2МБ, но мы за первостью опытов используем только верхнюю половину размером с 1 МБ...

Сообщение отредактировал Ash_snz - Nov 9 2011, 09:18
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 9 2011, 19:22
Сообщение #653


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(klen @ Nov 9 2011, 01:49) *
свежак для ARM. хост - linux64

http://klen.org/Files/DevTools/linux-x86_6..._64-20111108.7z
75.2 Mb


Что-то у меня не заработало (на M3). Ругается линкер:
Цитата
ld: warning: creating a segment to contain the file and program headers outside of any MEMORY region


Тестовый пример я постил здесь, на нём ошибка тоже проявляется.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Aaron
сообщение Nov 10 2011, 08:20
Сообщение #654


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



Цитата(klen @ Sep 25 2011, 15:33) *
...
сборка ARM для win32
http://klen.org//Files/DevTools/mingw32/ar...w32_20110925.7z
не тестировал

Решил осваивать C++, как пример изучаю scmRTOS.
Со старой сборкой (4.6.0 20101030) всё компилится и работает (пример из исходников ОС), а с указанной выше имеем:
Цитата
-----------------------------------------------------------
arm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform) 4.7.0 20110618 (experimental)
--- C++ compiling ./src/main.cpp...
C:/DevTools/arm_kgp_eabi_x86_32/bin/arm-kgp-eabi-g++ -c -mcpu=cortex-m3 -mthumb -I "./src" -I "SamplesCommon" -I "scmRTOS/Common" -I "scmRTOS/Cortex-M3" -I "scmRTOS/Extensions/Profiler" -MD -DSTM32F10X_MD_VL -DVER_MAJOR=0 -DVER_MINOR=1 -Wa,-adhlns=./lst/main.lst -O3 -g -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -fno-threadsafe-statics -funsigned-bitfields -fshort-enums -Wall -Wextra -Winline -Wpointer-arith -Wredundant-decls -Wshadow -Wcast-qual -Wcast-align -pedantic -o obj/main.o ./src/main.cpp
mingw32-make: *** [obj/main.o] Error 1

Попробовал этот вызов запустить из консоли винды, получил:
Прикрепленное изображение

Попробовал заменить эту библиотеку старой (от 4.6.0 сборки), сообщение осталось то же самое.
Go to the top of the page
 
+Quote Post
Ash_snz
сообщение Nov 10 2011, 15:53
Сообщение #655


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958



2 Klen

Умудрился собрать бинарник со следующим скриптом->
И даже размер не гиговый.

CODE
MEMORY
{
ROM : ORIGIN = OxbfcOOOOO, LENGTH = 1M
/*ROM2 : ORIGIN = 0x10000000, LENGTH = 1M*/
RAM : ORIGIN = 0x80000000 , LENGTH = 1M
}
/*REGION_ALIAS ( "REGION_TEXT" , ROM) ; */
REGION_ALIAS("REGION_TXT1", ROM) ;
REGION__ALIAS ( "REGION_TXT2" , ROM) ;
REGION___ALIAS ( "REGION_TXT3" , ROM) ;
REGION__ALIAS ( "REGION_TXT4" , ROM) ;
REGION_ALIAS("REGION_RODATA", ROM) ;
REGION_ALIAS("REGION_DATA", RAM) ;
REGION_ALIAS("REGION_SDATA", RAM) ;
REGION_ALIAS("REGION_BSS", RAM) ;
REGION_ALIAS("REGION_SBSS", RAM) ;
REGION^ALIAS("REGION_DEFAULT",ROM) ;

SECTIONS
{
.txtl 0xbfc00000 :
{
boot.o(.text)
} > REGION_TXT1

.txt2 0xbfc00180 :
{
except.o(.text)
}>REGION_TXT2

.txt3 (ADDR(.txt2) + SIZEOF(.txt2)):
AT (ADDR(.txt2) + SIZEOF(.txt2))
{
tini.o(.text)
}>REGION_TXT3

.txt4 ((ADDR( .txt3) + SIZEOF(.txt3))-0x20000000 ) :
AT (ADDR( .txt3) + SIZEOF(.txt3))
{
main_text_start = . ;
CREATE_OBJECT_SYMBOLS
main.o(.text .text.* .text.cos)
mxm_ash.o(.text)
*(.text.*)
PROVIDE (errno = .);
}

.rodata:
AT (ADDR( .txt3) + SIZEOF(.txt3) + SIZEOF(.txt4))
{
*(.rodata .rodata.*)
}> REGION_RODATA

/*_gp = ALIGN(16) + 0x7ff0;*/

.sdata 0x80000000 :
AT (ADDR( .txt3) + SIZEOF(.txt3) + SIZEOF(.txt4) + SIZEOF(.rodata)
{
/*PROVIDE ( _errno = 0xbfc00000);*/
*(.sdata .sdata.* .gnu.linkonce.s.*)
} > REGION_SDATA

.sbss :
AT (ADDR(.rodata) + SIZEOF(.rodata) + SIZEOF(.sdata))
{
*(.dynsbss)
*(.sbss .sbss.* .gnu.linkonce.sb.*)
*(.scommon)
}> REGION_SBSS


.data:
AT (ADDR(.sbss) + SIZEOF(.sbss))
{
*(.data)
SORT(CONSTRUCTORS)
} > REGION_DATA


/*. = ADDR(.data) + SIZEOF(.data);
. = ALIGN (32);*/

.bss:
AT (ADDR(.data) + SIZEOF(.data))
{
*(.bss)
*(COMMON)
} > REGION_BSS

/*.default :
AT (ADDR(.rodata) + SIZEOF(.rodata) + SIZEOF(.sdata) + SIZEOF(.sbss)
{
*(.* .*.-*)
}*/


_gp = ALIGN(32);/* + Ox7ffO;*/

}


Принцип скрипта такой же, к сожалению.

По скрипту остались вопросы:
- где и зачем должен быть global pointer - _gp? в какой области памяти и вообще на кой он?
- где должен быть __errno? Смутно догадываюсь что это номер ошибки мат библиотеки.
- почему при расположении errno в оперативе он ругается R_MIPS_26 (кажется так)? Предполагаю что ошибка невозможности джампа через 26 битный адрес. Надо пересобирать libm для джампа по 32 разрядам?
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 12 2011, 09:08
Сообщение #656


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



2_AHTOXA
это ж варнинг, у меня тоже ругается, и все работает после зашивки. я пока так и не выяснил причину варнинга потому что имени сегмента линкер не называет. надщ под отладчиком линкер смотреть. рабочая гипотиза что это что-то новое из разряда отладочных секций которые в скрипте не указаны, вот он ее и не знает куда сунуть и в конечном итоге выкидывает. поскольку прошивки работают и отлаживаются в микросхеме - я пока подзабил на это.

2_Aaron
".. точка входа в libstdc++ ..." это известная мне ситуация. дело в том что периодически меняется интерфейс libcstdc++ и тогда если компилятор пытается грузануть libcstdc++.dll(.so) не той версии (например если установлена еще и другая версия компилера)- например из за косяков с путями и тд - то он естественно отвалится. в дистрибутиве который я выкладываю всегда есть эти либы в /lib /lib64 для сошек, dll'ки всегда лежат в /bin вместе с бинарниками.

2_Ash_snz
по поводу символов в скрипте это - воля разработчика программы и библиотек - они могут по логике требовать адреса, ну наприме CRT коду нада знать начало и конец секций data и bss чтоб их проинициализировать. тут в каждом конкретном случае отделно нада разбиратся. По поводу R_MIPS_26 я точно не знаю, но очень похоже на то что вы сказали. пробуте вообще все пересобрать с поддержкой длинных вызовов - а там видно будет. Вообще не имея локументации на микросхемы все про комдивчик мне видится очень мутным - я полагал что будет еще проще чем с армами, судя по тому что имеет microchip c pic32 в котором также m4k ядро.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 12 2011, 09:29
Сообщение #657


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(klen @ Nov 12 2011, 15:08) *
2_AHTOXA
это ж варнинг, у меня тоже ругается, и все работает после зашивки.

У меня не получилось даже зашить полученную прошивку, её не переваривает openocd. Да и судя по размеру полученных сегментов (text - 10k против 15k в прошлой версии, и т. д.), линкер там явно что-то выкинул.
Ещё смутили многочисленные вхождения чего-то типа .gnu.lto_.* в map-файле, хотя LTO я не включал.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 12 2011, 12:24
Сообщение #658


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(AHTOXA @ Nov 12 2011, 13:29) *
У меня не получилось даже зашить полученную прошивку, её не переваривает openocd. Да и судя по размеру полученных сегментов (text - 10k против 15k в прошлой версии, и т. д.), линкер там явно что-то выкинул.
Ещё смутили многочисленные вхождения чего-то типа .gnu.lto_.* в map-файле, хотя LTO я не включал.


многочисленные .gnu.lto_.* это все теже секцции с кодом или данных при включенном секцеонировании --fdata-section -ffunction-section но с включенным еще и LTO. дело в том что все либы я собираю с LTO. если пользователь воткнет эту оптимизацию лоя своего кода и скажет линкеру оптимизировать то весь проект
заоптимизируется, а если бы я собирад без LTO либы - то тогдюа пользователдь смог бы отоптимизировать при линковке только свои объектники. Я дума причина не в этом. у меня то работает. значит различия не в компилере а в коде и опциях компилера и скрипте линкера. нада разбиратся. Попробуйте чтонить савсем простое скомилять и залинковать и посмотреть на выходной дамп - станет ясно где что произошло

а вот то что OpenOCD тупит на входной файл - это вообще жесть какаято. это может быть только если ELF битый и он не может от туда вытащить данные для зашивки... злобный косяг какойто. сборка последняя полностью или чтото намешано?
Go to the top of the page
 
+Quote Post
Ash_snz
сообщение Nov 12 2011, 15:50
Сообщение #659


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 12-05-11
Пользователь №: 64 958



Цитата(klen @ Nov 12 2011, 15:08) *
2_Ash_snz
По поводу R_MIPS_26 я точно не знаю, но очень похоже на то что вы сказали. пробуйте вообще все пересобрать с поддержкой длинных вызовов - а там видно будет. Вообще не имея документации на микросхемы все про комдивчик мне видится очень мутным - я полагал что будет еще проще чем с армами, судя по тому что имеет microchip c pic32 в котором также m4k ядро.
Смотри личку.
У нас кстати R3000 ядро.
Пересобрать, это Новая задача sm.gif Вызов принят.
В прошлый раз все было пересобрано великим Кленом под фаст маф и хард флоат.
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 12 2011, 23:15
Сообщение #660


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(Ash_snz @ Nov 12 2011, 19:50) *
У нас кстати R3000 ядро.

чето я попутол все.... действительно R3000
Go to the top of the page
 
+Quote Post

85 страниц V  « < 42 43 44 45 46 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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