Еще один пример установки тулчейна для ARM-ов

Мне в очередной раз потребовалось произвести установку тулчейна для Cortex-ов.

В блоге есть несколько записей об этом процессе. И я, естественно, решил ими воспользоваться. (А для чего я тогда их написал?!). В двух словах — не получилось, ибо с тех пор мир Линукса опять изменился. К счастью, изменился в лучшую сторону.

Результаты установки для Ubuntu и для Debian отличаются. Сюрприз!

Нет-нет, не подумайте на кошмары, всё намного проще. Из-за того, что пространство на Launchpad ограничено, и ребята решили создать репозиторий только для двух LTS-версий Ubunt-ы:

https://launchpad.net/~terry.guo/+archive/gcc-arm-embedded

Всё, что вам нужно сделать в Ubunt-е — это выполнить три шага:

1. Добавить частный репозиторий в свой список репозиториев:

$ sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded

2. После чего нужно произвести подновление системы, чтобы она знала, какие пакеты находятся в новом репозитории:

$ sudo apt-get update

3. И как итог всех трудов — произвести установку тулчейна на комп

$ sudo apt-get install gcc-arm-none-eabi

Это всё!!! В принципе, уже можно пользоваться — компилировать свои проги. Но, по большому счету, для полноценного юзания STM32 нужно сделать еще кое-какие действия. Но об этом после короткого рассказа от том, тулчейн ставится в Debian.

Хочу заострить внимание вот на каком моменте. Поскольку тулчейн находится в списке отслеживаемых репозиториев, то каждый раз выполняя команды

$ sudo apt-get update
$ sudo apt-get upgrade

Вы подновляете систему с учетом и этого репозитория.

Авторы тулчейна напоминают, что если по каким-то причинам вы захотите отказаться от этого тулчена, то вам нужно выполнить команду:

$ sudo apt-get remove gcc-arm-none-eabi

В прочем, это и так очевидно. Ну, вот, пожалуй, это всё, что касается Ubuntu.

Установка тулчейна в Debian происходит иначе. В Debian-е нужно зайти на страницу

https://launchpad.net/gcc-arm-embedded

и найти с правой стороны сжатый файл архива для Linux:

https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2

Это четвертая кнопка сверху. В прочем, при задержке курсора на кнопке выскакивает подсказка — не ошибётесь!

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

$ wget -c https://launchpad.net/gcc-arm-embedded/4.7/4.7-2013-q3-update/+download/gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2

После того как файл так или иначе оказался у вас, нужно его разжать и разархивировать. Сделаем это одной командой:

$ tar jxf gcc-arm-none-eabi-4_7-2013q3-20130916-linux.tar.bz2

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

Не особо утруждаясь в обдумывании, куда бы его пристроить, я скопировал его в директорий /opt/arm/.

# cp -r gcc-arm-none-eabi-4_7-2013q3 /opt/arm/

В принципе, вместо копирования (команда cp) лучше использовать команду переименования/переноса (команда mv).

# mv gcc-arm-none-eabi-4_7-2013q3 /opt/arm/

Ну вот, нам осталось только прописать пути к его исполняемым файлам. Разумеется, делать это надо не в учетной записи root-а, а в домашнем директории пользователя. Вы ведь не собираетесь писать программы и компилировать их из-под root-а?! В общем, переходим в свою учетную запись и там продолжаем. Находясь в своем домашнем директории я добавил в файл ~/.profile следующую сторку:

PATH="/opt/arm/gcc-arm-none-eabi-4_7-2013q3/bin:$PATH"

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

$ source ~/.profile

На данный момент нити установки тулчейна для Ubutntu и для Debian сошлись, и дальнейшие действия относятся и к тому, и к другому дистрибутиву.

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

Команда

$ arm-none-eabi-gcc --target-help

помимо прочей информации выведет список процессоров (ядер), которые известны компилятору. Эти наименования можно использовать при компиляции в опциях -mcpu и -mtune.

Следующая команда

$ arm-none-eabi-gcc --print-multi-lib

покажет какие библиотеки (модули) используются для расчетов с плавающей арифметикой.

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

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

Поэтому я создал поддиректорий

/opt/arm/gcc-arm-none-eabi-4_7-2013q3/arm-none-eabi/include/stm32

и тупо в него скопировал два файла core_cm3.h и core_cm3.c из поддиректория cmsis, а так же все содержимое поддиректория stm32_lib.

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

Следующий вопрос, который мне пришлось так же рассмотреть, — установка программного обеспечения для программатора. Я его вынес в отдельную тему. Там тоже произошли изменения.

Реклама

5 responses to “Еще один пример установки тулчейна для ARM-ов

  1. Ошибка в статье! tar jxf не работает. Просто в простое висит и ничего не делает. Правильно будет вот так: tar xvf

    • Давайте не спеша разберёмся.

      Во первых, нужно чётко понимать различие понятий архивации и сжатия, которые приняты в Линуксе и в Виндовсе.

      Виндовс под архивацией подразумевает объединение в единый файл указанных файлов и директориев с одновременным уменьшением общего объема.

      Исторически так сложилось, что Линукс изначально разделял процесс архивации и процесс компрессии. В Линуксе под процессом архивации подразумевается объединение в единый файл указанных файлов и директориев. В отличие от Виндовса уменьшение объёма не производится. А вот понятие «сжатие» в Линуксе подразумевает как раз уменьшение занимаемого объема.

      Условно можно сказать, что Виндовс смотрит на процесс архивации как на процесс в одно действие, в то время как Линукс процесс архивации раскладывает на два: сначала объединение указанных файлов/директориев, а потом сжатие.

      Таким образом, понятие «архивация» в Виндовсе и в Линуксе различаются.

      Обратный процесс — разархивация», условно говоря, в Линуксе также подразумевает два действия: сначала восстановление объема, а потом «вынимание» из общей кучи файлов и директориев.

      Я ещё раз подчеркну — это всё условно! Архиваторы в Виндовсе и в Линуксе внешне работают одинаково (похоже друг на друга). Все дествия по архивации и там, и там производятся за один раз. При желании и там, и там можно действия сжатия и действия объединения выполнять по отдельности.

      Далее рассмотрим, что даёт тот или иной символ (буква), указанные в ключе при вызове архиватора.

      x — символ говорит архиватору о том, что указанный далее файл нужно разжать (декомпрессировать). Противоположность этому действию — является действие сжатия указанных файлов и директориев. Действие сжатия выполняется по команде, символ которой «с». Поскольку команды сжатия и декомпрессии противоположны, то использовать символы «x» и «c» в одной команде нельзя.

      j — этот символ указывает на то, что в работе используется архиватор (точнее — метод сжатия) bzip2, а не zip, gzip и так далее.

      v — этот символ заставляет архиватор «болтать». В основе философии (поведения) Линукса лежит принцип — если ты дал команду, то она должна быть выполнена. Если команда выполняется успешно, что какой смысл об этом сообщать, тем самым «зашумлять» экран? Конечно, когда при выполнении возникают проблемы, тогда — естественно — необходимо сообщать об этом пользователю. А если всё успешно — то зачем???

      Но иногда в жизни возникают ситуации, особенно когда «мёртвый» безсловестный экран воспринимается как ничего не делающая программа. Это как раз тот самый случай, с которым Вы, уважаемый Петя, столкнулись. Разархивация 60-мегабайтного файла довольно-таки длительный процесс. На моём стареньком компе она выполняется примерно полминуты. В течении этого времени на экране ничего не происходит, и создаётся впечатление, что архиватор ничего не делает.

      Чтобы изменить такой режим работы архиватора и сделать его «болтливым», используется ключ «v». За болтливость нужно платить, время работы «болтливого» разархиватора примерно на 10% больше, чем время работы «молчаливого» разархиватора.

      f — этот ключ говорит о том, что следующей конструкцией в командной строке будет имя архивного файла. Этот ключ должен быть последним в «связке» ключиков.

      Следует заметить, что указание ключа «j» не столь обязательно при разархивации. Если его не указать, то архиватор и сам догадается, что используется архивный файл, сжатый по алгоритму bzip2. А вот для процесса архивации ключик «j» принципиален. Если его не указать, то процесс сжатия будет иной.

      Подводя итог можно сказать, что оба набора ключей и «jxf», и «xvf» в нашем случае извлечения файлов из архива — принципиально работают. Причём работают с одинаковым результатом, хотя внешнее поведение архиватора несколько различается.

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

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

  2. Команда arm-none-eabi-gcc —print-multy-lib не работает.
    Вот что выводится:
    [ admin$: ~] arm-none-eabi-gcc —print-multy-lib
    arm-none-eabi-gcc: error: unrecognized command line option ‘—print-multy-lib’
    arm-none-eabi-gcc: fatal error: no input files
    compilation terminated.

    • Спасибо за обратную связь!

      Я неправильно написал слово «multi» и не заметил.

      Складывая наши усилия мы делаем мир лучше. Но если мы направляем свои усилия друг против друга, мы только разрушаем наш общий мир.

  3. Правильно будет arm-none-eabi-gcc -print-multi-lib. Эх, ну исправьте уже ошибки в статье!

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s