AVR, Arduino на Calculate

Пусть побудет пока на форуме, потом подумаем как переоформить.

Итак, для разработки на avr/arduino нам для начала понадобится crossdev.
Краем глаза смотрим в доку: https://wiki.gentoo.org/wiki/Arduino

нам предлагаются два способа:

1. Установка из портов

 # emerge -pvv cross-avr/gcc cross-avr/binutils cross-avr/avr-libc

если всё ОК, повторяем уже без флага -p

2. Установка через crossdev

 # emerge sys-devel/crossdev

 # crossdev -t avr --g 5.4.0-r3

понятно, что после --g нужно поставить ту версию компилятора, что у вас есть.
Я остановился на втором варианте. Сборка долгая, настройтесь на ожидание.
Если у вас всё правильно получилось, у вас получится в итоге что-то типа:

 # gcc-config -l
 [1] avr-5.4.0 *
 [2] i686-pc-linux-gnu-5.4.0 *
 [3] x86_64-pc-linux-gnu-5.4.0 *

 # binutils-config -l
 [1] avr-2.28 *
 [2] i686-pc-linux-gnu-2.28 *
 [3] x86_64-pc-linux-gnu-2.28 *

У меня три архитектуры, так что у вас список может быть короче. Версии gcc/binutil, понятное дело будут разные. Теперь у вас как бы всё хорошо. “Как бы”, потому что есть стародавний баг, поэтому нужно сделать магию:

 # ln -s /usr/lib/binutils/avr/2.28/ldscripts /usr/avr/lib/ldscripts

В старых хаутушках данная магия указана неправильно. Несложно догадаться, что при смене версии binutils, магию нужно повторять “на бис”:

 # rm /usr/avr/lib/ldscripts && ln -s /usr/lib/binutils/avr/{новаяверсия}/ldscripts /usr/avr/lib/ldscripts

конечно в идеале надо что-то сделать с исправлением бага, но гентушников мало, avr-щиков среди них ещё меньше, посему никому это не надо.

Собственно под avr вы уже можете собирать, для чего и в популярных Code::Blocks и Anjuta IDE есть шаблоны. Но avr != arduino. Поэтому в следующей серии опуса - как разрабатывать именно под arduino на этих IDE.

Задача перенесена в багтрекер http://www.calculate-linux.org/issues/991

Вчера установил CLDM-20170630, так и не смог собрать тулчейн по доке https://wiki.gentoo.org/wiki/Arduino :frowning:
Это просто беда какая-то каждый раз с его сборкой каждый раз.
Первая проблема - ругань на binutils, что в один слот две версии ставить нельзя. С этим понятно.
А вот с GCC не понятно совершенно. Или я чего-то не понимаю, или в логе нет внятного описания проблемы.

Что касается именно Ардуино - какие с ним проблемы? Вроде ставится штатно, кстати, вместе с тулчейном.

Первая проблема - ругань на binutils, что в один слот две версии ставить нельзя. С этим понятно.

в смысле?

А вот с GCC не понятно совершенно. Или я чего-то не понимаю, или в логе нет внятного описания проблемы.

там нет проблемы, совсем.

Что касается именно Ардуино - какие с ним проблемы?

Лично я не вижу смысла тащить джаву из-за текстового (хренового, кстати) редактора.

Вроде ставится штатно, кстати, вместе с тулчейном.
штатно ставится 1.0.5

* dev-embedded/arduino
     Доступные версии:      1.0.5-r1^bs {doc examples ELIBC="FreeBSD"}
     Домашняя страница:     http://arduino.cc/ https://arduino.googlecode.com/
     Описание:              An open-source AVR electronics prototyping platform

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

1 Like

Виктор Кустов wrote:

Первая проблема - ругань на binutils, что в один слот две версии ставить нельзя. С этим понятно.

в смысле?

В прямом при попытке установить с crossdev не указывая конкретную версию binutils.

А вот с GCC не понятно совершенно. Или я чего-то не понимаю, или в логе нет внятного описания проблемы.

там нет проблемы, совсем.
Мне не верить своим глазам?

При попытке установить правильным, на мой взгляд, способом. emerge -pvv cross-avr/gcc cross-avr/binutils cross-avr/avr-libc

emerge: there are no ebuilds to satisfy “cross-avr/gcc”.

emerge: searching for similar names…
emerge: Maybe you meant sys-devel/gcc?

Это на девственно чистой системе CLDM-17.6 Специально только что переустановил и не делал никаких обновлений или собственных настроек.

Всю жизнь в генте тулчейн для AVR ставился через не то место.

Установил как описано, с gcc проблем не возникло.

emerge -pvv cross-avr/gcc ...

но ведь такого пакета действительно нет

$ eix cross-avr/gcc
Совпадений не найдено.

Всю жизнь в генте тулчейн для AVR ставился через не то место.

Возможно. Для того, чтобы не возникало проблем я и описал способ установки.

Виктор Кустов wrote:

Установил как описано, с gcc проблем не возникло.

Для того, чтобы не возникало проблем я и описал способ установки.
Это хорошо, но у нас получается какой-то разговор слепого с глухим.

но ведь такого пакета действительно нет
Именно поэтому, как описано в первом способе оно не ставится.
Т.е. вот это

  1. Установка из портов
    # emerge -pvv cross-avr/gcc cross-avr/binutils cross-avr/avr-libc
    если всё ОК, повторяем уже без флага -p
    не работает от слова абсолютно именно потому, что таких пакетов действительно нет.

Как описано во втором способе, через crossdev, тоже не ставится, но тут уже свои нюансы. Можно подобрать версию gcc и(или) binutils, которые поставятся, но это будет танец с бубнами даже не для каждого выпуска, а для каждой системы. Все зависит от даты установки и уже установленных пакетов, которые зависят от binutils.

Поэтому правильнее будет дополнить.

crossdev -t avr --g X.X.X --b X.X.X

понятно, что после --g и --b нужно поставить ту версию компилятора и binutils, что у вас есть.

не работает от слова абсолютно именно потому, что таких пакетов действительно нет.

значит поменялось. поправлю, чтобы не вводить в заблуждение. кстати, в офиц. доке ровно такая же ошибка.

Как описано во втором способе, через crossdev, тоже не ставится, но тут уже свои нюансы. Можно подобрать версию gcc и(или) binutils, которые поставятся, но это будет танец с бубнами даже не для каждого выпуска, а для каждой системы.

А вот тут имеет смысл конкретизировать с какой ошибкой не поставилось.

понятно, что после --g и --b нужно поставить ту версию компилятора и binutils, что у вас есть.

согласен, поправлю.

я предпочитаю всё же разруливать такие ситуации через /etc/portage/ маскируя ненужное и размаскируя нужное.

И как-то хотелось бы кальку подточить так, чтобы обновлялась вся эта экибана без проблем. до сих пор обновлялась норм. Но вот на последнем обновлении потребовала внимания.

Linux calculate 4.9.47-calculate
Собирал, то gcc error то binutils не тот.

В общем собрал так:

# emerge dev-embedded/arduino
# emerge crossdev
# emerge --autounmask-write =sys-devel/binutils-2.28.1
# dispatch-conf (соглашаемся с принятием binutils-2.28.1)
# crossdev -s4 --stable --portage --verbose --target avr (тут ругань была в самом IDE arduino)
# USE="-openmp -hardened -sanitize -vtv" crossdev -s4 --portage --verbose --target avr
# arduino (запускаем, радуемся)

Может быть это избавит некоторых от мучений на данный момент.

Ссылки:
https://wiki.gentoo.org/wiki/Arduino
https://wiki.gentoo.org/wiki/Talk:Arduino

я очень хочу откреститься от dev-embedded/arduino, не нравится он мне. в идеале - code::blocks(anjuta)+crossdev+arduino-makefile (https://github.com/sudar/Arduino-Makefile)

не отказался бы от помощи.
ну и да, ponyprog3.0 нужно запихать в портежи

Долго я пытался установить cross-avr/binutils, борясь с тем, что все версии замаскированы и совсем не обращая внимания на “missing digest”, однако, в итоге прозрел и нашел вот это:

One reason you may be getting the error (as of 2016 in Gentoo, don’t know if this was true in 2013) is that you’re using the portage tree from git (thus, with thin manifests which don’t contain digests for the ebuilds themselves) while the overlay used for crossdev does not allow that. If that’s the case, adding thin-manifests = true to $overlay/metadata/layout.conf should be enough to fix the problem.

Добавил в /usr/local/portage-crossdev/metadata/layout.conf “thin-manifests = true”
и все начало собираться.

Как не ставился тулчейн нормально, так и не ставится. Похоже, что и не будет нормально ставиться. Жаль :frowning:

Похоже, что решение почти прежнее.
/var/calculate/custom-overlay/metadata/layout.conf
thin-manifests = true

Пока собирается.

но почему custom overlay? разве оно не ставится как sys-devel/binutils с нужной архитектурой?

Насколько я понимаю, это организует crossdev. Без него у меня ранее не получалось поставить и, похоже, ни у кого не получается, хотя явно лишняя сущность и костыль. В этот раз я и не пробовал без crossdev. Если у кого получается просто поставить binutils, GCC, glibc - буду рад почитать историю успеха :slight_smile:

Костыль или не костыль, но на данный момент это штатный способ установки со всеми плюшками типа распределённой сборки например.

Уже который день бьюсь с проблемой работы Arduino IDE и никак не могу найти ответа :hot_face:
на форумы сайты gentoo.ru и gentoo.org не могу зайти, чета с паролем никак не вводится
остается одна надежда что хоть тут что ни будь подскажут !
вроде все сделал по указаниям отсюда Arduino - Gentoo Wiki
но при компиляции скетча вылазит ошибка

Parameter ‘tools’ is mandatory
Usage of /usr/share/arduino/arduino-builder:
-build-cache string
builds of ‘core.a’ are saved into this folder to be cached and reused
-build-options-file string
Instead of specifying --hardware, --tools etc every time, you can load all such options from a file
-build-path string
build path
-built-in-libraries value
Specify a built-in ‘libraries’ folder. These are low priority libraries. Can be added multiple times for specifying multiple built-in ‘libraries’ folders
-code-complete-at string
output code completions for sketch at a specific location. Location format is “file:line:col”
-compile
compiles the given sketch
-core-api-version string
version of core APIs (used to populate ARDUINO #define) (default “10600”)
-daemon
daemonizes and serves its functions via rpc
-debug-level int
Turns on debugging messages. The higher, the chattier (default 5)
-dump-prefs
dumps build properties used when compiling
-experimental
enables experimental features
-fqbn string
fully qualified board name
-hardware value
Specify a ‘hardware’ folder. Can be added multiple times for specifying multiple ‘hardware’ folders
-ide-version string
[deprecated] use ‘core-api-version’ instead (default “10600”)
-jobs int
specify how many concurrent gcc processes should run at the same time. Defaults to the number of available cores on the running machine
-libraries value
Specify a ‘libraries’ folder. Can be added multiple times for specifying multiple ‘libraries’ folders
-logger string
Sets type of logger. Available values are ‘human’, ‘humantags’, ‘machine’ (default “human”)
-prefs value
Specify a custom preference. Can be added multiple times for specifying multiple custom preferences
-preprocess
preprocess the given sketch
-quiet
if ‘true’ doesn’t print any warnings or progress or whatever
-tools value
Specify a ‘tools’ folder. Can be added multiple times for specifying multiple ‘tools’ folders
-trace
traces the whole process lifecycle
-verbose
if ‘true’ prints lots of stuff
-version
prints version and exits
-vid-pid string
specify to use vid/pid specific build properties, as defined in boards.txt
-warnings string
Sets warnings level. Available values are ‘none’, ‘default’, ‘more’ and ‘all’

Ошибка компиляции для платы Arduino Nano.

И что делать не понимаю