|
|
  |
Сборка GNU toolchains, может кто подсказать? |
|
|
|
May 15 2008, 15:12
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 27-06-05
Из: Россия
Пользователь №: 6 324

|
О, на вас вся надежда! Повторюсь немного: 1. Собрал binutils. Вроде как без проблем. 2. Собираю gcc. Eсли в t-arm-elf раскомментировать строки (я правда не знаю еще, необходимо ли это, но так как работать будет нужно сэтой архитектурой, решил что нужно) MULTILIB_OPTIONS += march=armv7 MULTILIB_DIRNAMES += thumb2 MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7* MULTILIB_MATCHES += march?armv7=mcpu?cortex-m3 то newlib потом отказываются собираться с ошибкой: ../../../../../../.././src/newlib/libc/machine/arm/setjmp.S: Assembler messages: ../../../../../../.././src/newlib/libc/machine/arm/setjmp.S:123: Error: SP not allowed in register list -- `stmea a1!,{v1-v7,fp,ip,sp,lr}' ../../../../../../.././src/newlib/libc/machine/arm/setjmp.S:145: Error: SP not allowed in register list -- `ldmfd a1!,{v1-v7,fp,ip,sp,lr}' make[9]: *** [lib_a-setjmp.o] Ошибка 1 make[9]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0/arm-elf/thumb/thumb2/newlib/libc/machine/arm' make[8]: *** [all-recursive] Ошибка 1 make[8]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0/arm-elf/thumb/thumb2/newlib/libc/machine' make[7]: *** [all-recursive] Ошибка 1 make[7]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0/arm-elf/thumb/thumb2/newlib/libc' make[6]: *** [all-recursive] Ошибка 1 make[6]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0/arm-elf/thumb/thumb2/newlib' make[5]: *** [all] Ошибка 2 make[5]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0/arm-elf/thumb/thumb2/newlib' make[4]: *** [multi-do] Ошибка 1 make[4]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0/arm-elf/newlib' make[3]: *** [all-multi] Ошибка 2 make[3]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0/arm-elf/newlib' make[2]: *** [all] Ошибка 2 make[2]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0/arm-elf/newlib' make[1]: *** [all-target-newlib] Ошибка 2 make[1]: Leaving directory `/usr/local/arm/src/build/newlib-1.16.0' make: *** [all] Ошибка 2 если те строки оставить закомментаренными, собираются нормально  . Косяк я так понимаю в libc, создаваемой при сборке gcc-4.3.1, но как с этим боротся - нихт ферштеен Все исходники с патчами брал из репозитария Дебиан. Может, подробнее расписать, с какими опциями собирал?
|
|
|
|
|
May 15 2008, 18:29
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Krom @ May 15 2008, 18:12)  Все исходники с патчами брал из репозитария Дебиан. Тут у меня крамольная мысл появилась  Если все с и в Дебиан, то может вот это поможет? http://buildd.emdebian.org/Это не совсем то, что нужно, но мало ли. Правда сам я не пробовал.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
May 15 2008, 19:28
|

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

|
Все прально не собираецца! не должен нада подправить ручками код функций setjmp longjmp : Код /* -------------------------------------------------------------------- int setjmp (jmp_buf); -------------------------------------------------------------------- */ FUNC_START setjmp
/* сохраняем по разному в armv4 и armv7 */ #ifdef __thumb2__ stmea a1!, { v1-v7, fp, ip, lr } /* сохраняем указатель стека, и тд */ str sp, [a1],#+4 #else stmea a1!, { v1-v7, fp, ip, sp, lr } #endif #if 0 /* Simulator does not cope with FP instructions yet. */ #ifndef __SOFTFP__ /* Save the floating point registers. */ sfmea f4, 4, [a1] #endif #endif /* When setting up the jump buffer return 0. */ mov a1, #0
FUNC_END setjmp /* -------------------------------------------------------------------- volatile void longjmp (jmp_buf, int); -------------------------------------------------------------------- */ FUNC_START longjmp
/* If we have stack extension code it ought to be handled here. */ /* Restore the registers, retrieving the state when setjmp() was called. */ #ifdef __thumb2__ ldmfd a1!, { v1-v7, fp, ip, lr } ldr sp, [a1],#+4 #else ldmfd a1!, { v1-v7, fp, ip, sp, lr } #endif #if 0 /* Simulator does not cope with FP instructions yet. */ #ifndef __SOFTFP__ /* Restore floating point registers as well. */ lfmfd f4, 4, [a1] #endif #endif /* Put the return value into the integer result register. But if it is zero then return 1 instead. */ movs a1, a2 #ifdef __thumb2__ it eq #endif moveq a1, #1
|
|
|
|
|
May 15 2008, 19:47
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Krom @ May 15 2008, 18:12)  MULTILIB_OPTIONS += march=armv7 MULTILIB_DIRNAMES += thumb2 MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7* MULTILIB_MATCHES += march?armv7=mcpu?cortex-m3
то newlib потом отказываются собираться с ошибкой:
../../../../../../.././src/newlib/libc/machine/arm/setjmp.S: Assembler messages: ../../../../../../.././src/newlib/libc/machine/arm/setjmp.S:123: Error: SP not allowed in register list -- `stmea a1!,{v1-v7,fp,ip,sp,lr}' Педварительное вскрытие показало что 1. Файл newlib/libc/machine/arm/setjmp.S содержит строку Код /* Save all the callee-preserved registers into the jump buffer. */ stmea a1!, { v1-v7, fp, ip, sp, lr } Видно, что это не генерируемая, просто набранная "в лоб" срока и от архитектуры эта строка не зависит. 2. DDI0405B_arm_v7m_architecture_app_level_reference_manual.pdf Цитата STM{IA|EA}<c><q> <Rn>{!}, <registers> where: <c><q> See Standard assembler syntax fields on page A6-7. <Rn> Specifies the base register. This register is allowed to be the SP. ! Causes the instruction to write a modified value back to <Rn>. If ! is omitted, the instruction does not change <Rn>. <registers> Is a list of one or more registers, separated by commas and surrounded by { and }. It specifies the set of registers to be stored. The registers are stored with the lowest-numbered register to the lowest memory address, through to the highest-numbered register to the highest memory address. Encoding T2 does not support a list containing only one register. If an STMIA instruction with just one register <Rt> in the list is assembled to Thumb and encoding T1 is not available, it is assembled to the equivalent STR<c><q> <Rt>,[<Rn>]{,#-4} instruction. The SP and PC cannot be in the list. То биш на cortex-m3 SP не может быть в списке сохраняемых регистров. Однако этот файл не, а точнее эта команда, записана в чистом виде а не генерируется, или иным способом (не)зависит от конкретной архитектуры. А должна зависеть, по моему. Вывод - нужно обращаться за разъяснениями в http://sourceware.org/newlib/2klen: У Вас действительно это компилится и работает для cortex? Можно подробней про процесс сборки? Я пробовал на binutils-2.18 gcc-core-4.3.0 nelib-1.16.0 Все взято с gnu.org и sourceware.org/newlib/ Скрипт и патчи прилагаю.
Сообщение отредактировал amw - May 15 2008, 19:48
Прикрепленные файлы
tools.zip ( 4.1 килобайт )
Кол-во скачиваний: 36
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
May 16 2008, 06:03
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 27-06-05
Из: Россия
Пользователь №: 6 324

|
Огромное всем спасибо, счас буду пробовать, ежели что - не обессудьте, опять приставать буду  Железа у меня до фига всякого, правда все для ARM7 и Cortex M3, закончим со сборкой начнем тестить. О, сразу вопрос - а insight для чего нужно и нужно ли вообще? Если нужно, с какими опциями собирать? Смотрел,в сборках у уважаемого klen эти библиотеки отсутствуют... Цитата(amw @ May 15 2008, 23:47)  Скрипт и патчи прилагаю. А расшифруйте мне, плиз, значение следующих строк из патча gcc-cortex.diff -#MULTILIB_OPTIONS += march=armv7 -#MULTILIB_DIRNAMES += thumb2 -#MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7* +MULTILIB_OPTIONS += march=armv7 +MULTILIB_DIRNAMES += thumb2 В принципе строчка с "+" вначале понятна, а что значит -#MULTILIB_OPTIONS += march=armv7? Удалить строку? Сорри за чаниковские вопросы, но в Линуксе я пока чайник и есть. Но учусь  emdebian я смотрел, но там какой-то совсем уж debian-way способ сборки, по которому, как мне кажется, и проконсультироваться-то будет не у кого. Позже будем разбираться.
|
|
|
|
|
May 16 2008, 07:27
|
Знающий
   
Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057

|
Цитата(Krom @ May 16 2008, 09:03)  -#MULTILIB_OPTIONS += march=armv7 -#MULTILIB_DIRNAMES += thumb2 -#MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7* +MULTILIB_OPTIONS += march=armv7 +MULTILIB_DIRNAMES += thumb2
В принципе строчка с "+" вначале понятна, а что значит -#MULTILIB_OPTIONS += march=armv7? Удалить строку? Не обращайте внимания - патчи генерятся автоматом, из диффов. Ниже она же добавляется. ЗЫ: Пардон, не доглядел. Строки так раскомментариваются.
|
|
|
|
|
May 16 2008, 07:53
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Krom @ May 16 2008, 09:03)  А расшифруйте мне, плиз, значение следующих строк из патча gcc-cortex.diff -#MULTILIB_OPTIONS += march=armv7 -#MULTILIB_DIRNAMES += thumb2 -#MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7* +MULTILIB_OPTIONS += march=armv7 +MULTILIB_DIRNAMES += thumb2 Патчи генеряться программой diff и накладываются программой patch. В результате работы diff получаем файл, в котором указано как из старого сделать новое. Строки помеченные минусом впереди означают что их нужно удалить из старого, а помеченные плюсом - добавить в старое. И после такого удаления и добавления получается новое. Для изменяемых строк (удаляемых и добавляемых) diff добавляет в начале минус или плюс, для неизменных - пробел. При накладывании патча программой patch она по неизменяемым строкам и доп инфе начинающейся с @ находит в старом нужное место, те строки, которые помечены минусом удаляет, а те что плюсом - добавляет. И пробелы и минусы и плюсы не вносятся в результирующий файл. 2klen: Ну так вот тестирование и началось  Так все таки не ясно как у Вас newlib собралось и действительно ли его сборка поддерживает cortex. Мож тута какя собака порылась  . У меня в этом setjmp.S тоже ошибка и она естественна, потому как процессор не поддерживает такой операции, а в newlib сие не проверяется. Может патч какой был специфический?
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
May 16 2008, 09:10
|

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

|
Цитата(amw @ May 16 2008, 11:53)  Может патч какой был специфический? да небыло никакого пача. 1. несобрался setjmp.s 2. грусно... 3. смотру код - ага! видно где ошибка. 4. читаю доку на Cortex M3 и вижу что SP нада запихывать иным от armv4 способом 5. правим файл - добавляем "иной способ" - ветка под дефайном __thumb2 5. собираем ... о! собралось!!! 6. компилирием код и шъем - смотрим (у меня ВРОДЕБЫ РАБОТАЛО на STM Primer - рекламный тамагочи от STM c STM32) 7. Дополнительно симулируем код в симуляторе 2amw: ну и как, работает?
|
|
|
|
|
May 16 2008, 09:51
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 27-06-05
Из: Россия
Пользователь №: 6 324

|
Итак, промежуточные результаты. С помощью шаманского бубна, такой-то матери, и, главное, с вашей помощью на текущий момент удалось собрать: binutils-2.18.1 (2.18.50 не захотели собираться, ну и фиг с ними пока) gcc-4.3.1 newlib-1.16.0 (только с помощью ручной правки, предложенной klen) Застопорился на сборке gdb-6.8. Собираю с опциями --prefix=/usr/local/arm --target=arm-elf --enable-interwork --enable-multlib при сборке выдает следующую ошибку: \configure: error: no termcap library found make[1]: *** [configure-gdb] Ошибка 1 make[1]: Leaving directory `/usr/local/arm/src/build/gdb-6.8' make: *** [all] Ошибка 2Чего это он? Попробовал поиском, действительно - нет такой библиотеки, тока win32-termcap.c. Это оно? Пока попробую собрать 6.7. Попробовал. Результат тот же. Что за termcap такая? Где ее взять?
|
|
|
|
|
May 16 2008, 10:31
|
Частый гость
 
Группа: Свой
Сообщений: 162
Регистрация: 7-12-07
Из: Могилев
Пользователь №: 33 064

|
* sys-libs/libtermcap-compat Homepage: http://www.catb.org/~esr/terminfo/ Description: Compatibility package for old termcap-based programs может этой библиотечки не хватает?
|
|
|
|
|
May 16 2008, 11:08
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 27-06-05
Из: Россия
Пользователь №: 6 324

|
да библиотека есть, как ее только подсунуть... и куда... Собираться она не хочет, требует altgcc. Скачанный бинарный пакет с этой библиотекой тоже не устанавливается из-за зависимостей. Наверное, должен быть другой путь, люди же (/me посматривает в сторону более опытных товарищей  ) как-то собирают
|
|
|
|
|
May 16 2008, 11:20
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(klen @ May 16 2008, 12:10)  2amw: ну и как, работает? Нет. Этого оказалось недостаточно. Код arm-elf-gcc -B/home/amw/devel/ARM/arm-elf-cortex/tools/build/newlib/arm-elf/newlib/ -isystem /home/amw/devel/ARM/arm-elf-cortex/tools/build/newlib/arm-elf/newlib/targ-include -isystem /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/newlib/libc/include -B/home/amw/devel/ARM/arm-elf-cortex/tools/build/newlib/arm-elf/libgloss/arm -L/home/amw/devel/ARM/arm-elf-cortex/tools/build/newlib/arm-elf/libgloss/libnosys -L/home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm -O2 -g -g -O2 -I. -I/home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/.. -O2 -g -g -O2 -mthumb -march=armv7 -c /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S: Assembler messages: /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:85: Error: thumb conditional instrunction not in IT block /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:91: Error: selected processor does not support requested special purpose register %x -- `mrs r2,CPSR' /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:94: Error: Thumb encoding does not support an immediate here -- `msr CPSR_c,#0xD1' /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:99: Error: Thumb encoding does not support an immediate here -- `msr CPSR_c,#0xD7' /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:103: Error: Thumb encoding does not support an immediate here -- `msr CPSR_c,#0xDB' /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:107: Error: Thumb encoding does not support an immediate here -- `msr CPSR_c,#0xD2' /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:111: Error: Thumb encoding does not support an immediate here -- `msr CPSR_c,#0xD3' /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:118: Error: Thumb load/store multiple does not support {reglist}^ -- `ldmdb r3,{sp}^' /home/amw/devel/ARM/arm-elf-cortex/tools/src/newlib-1.16.0/libgloss/arm/crt0.S:121: Error: selected processor does not support requested special purpose register -- `msr CPSR_c,r2' make[5]: *** [crt0.o] Помилка 1 На счет работает - нескажу, нет кортекса. А вот перекомпилить это могем  . Правда пока безуспешно. Цитата(Krom @ May 16 2008, 14:08)  да библиотека есть, как ее только подсунуть... и куда... Собираться она не хочет, требует altgcc. Скачанный бинарный пакет с этой библиотекой тоже не устанавливается из-за зависимостей. Наверное, должен быть другой путь, люди же (/me посматривает в сторону более опытных товарищей  ) как-то собирают Это в дебиан? тогда apt-get install ncurses
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
May 16 2008, 11:59
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 27-06-05
Из: Россия
Пользователь №: 6 324

|
Цитата(amw @ May 16 2008, 15:20)  тогда apt-get install ncurses установка libncurses5-dev помогла. То есть на текущий момент собрано практически все. Сегодня буду прикручивать к Эклипсу, ну а потом пробовать на железке - у меня STM3210B-EVAL (это в первую очередь пойдет), STR710-EVAL и LPC2468 OEM Boad. Бум тестить  . Мануал, как и обещал, за мной. Думаю, лишним на форуме не будет. Да, еще вопрос. insight - нужны будут при работе в Eclipse-GDB-...? Если да, то как их собирать?
|
|
|
|
|
May 16 2008, 12:10
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Krom @ May 16 2008, 14:59)  установка libncurses5-dev помогла. То есть на текущий момент собрано практически все. Сегодня буду прикручивать к Эклипсу, ну а потом пробовать на железке - у меня STM3210B-EVAL (это в первую очередь пойдет), STR710-EVAL и LPC2468 OEM Boad. Бум тестить  . Мануал, как и обещал, за мной. Думаю, лишним на форуме не будет. Да, еще вопрос. insight - нужны будут при работе в Eclipse-GDB-...? Если да, то как их собирать? insight это как бы "графический gdb". Для работы с eclipse он не нужен. Для eclipse нужен какраз gdb. После сборки insight появится его собственный arm-elf-gdb. Хотя по чесному он не его собственный, а пропатченный и включенный в insight "просто" gdb.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|