Установка тулчейна для работы с ARM7/Cortex. Установка

Предустановка

Как это ни звучит забавно, но тем не менее прежде чем начать установку тулчейна, нам нужно выполнить кое-какие действия по предварительной подготовке компа (точнее — операционной системы). Иначе говоря, мы должны установить все необходимые компоненты ОСи чтобы можно было установить тулчейн.

0. Нам нужно установить на комп сам Debian. Разумеется, если у вас он уже установлен, то ничего делать не надо. Вообще, последний стабильный дистрибутив DebianSqueeze 6.0.6 распространяется на 8-ми DVD дисках. Также имеются аж 53 CD диска. Кому что нравится. Меня не устраивает ни тот, ни другой вариант. Поэтому я скачиваю первый CD диск:

$ wget -c http://cdimage.debian.org/debian-cd/6.0.6/i386/iso-cd/debian-6.0.6-i386-CD-1.iso

Обратите внимание на ключ «-с». Если у вас по каким-либо причинам оборвется закачка, то подав еще раз эту же команду (разумеется — в том же директории!), закачка продолжится с оборванного места, а не начнется с начала.

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

1. Штатная установка дистрибутива не рассчитана на общий случай, и если мы собираемся работать с микроконтроллерами, то это наша проблема — доустановить необходимые пакеты.

Их немного, и ставятся они одной командой:

# apt-get install flex bison libgmp3-dev libmpfr-dev libncurses5-dev libmpc-dev autoconf texinfo build-essential libftdi-dev libusb-1.0-0-dev libz-dev libtool git git-core

Возможно вы захотите установить пакет:

# apt-get install zlib1g-dev

Так же имеет смысл выполнить еще такую команду, чтобы обеспечить зависимости:

# apt-get build-dep gcc-4.5 git zlib1g-dev python-yaml

Если хотите чтобы отладчик gdb имел поддержку XML, вам нужно будет установить еще пару пакетов:

# apt-get install libexpat1 libexpat1-dev

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

# mkdir build-arm
# cd !$

(Название поддиректория не важно, можете назвать как хотите.)

Находясь в нашем только-что созданном директории даем команду на клонирование проекта:

# git clone https://github.com/esden/summon-arm-toolchain.git

Через довольно-таки продолжительное время в нашем директории появится поддиректорий summon-arm-toolchain. Заходим в него. Многие, заметят, что нам можно было не создавать свой директорий (build-arm). В общем-то они правы, но я предполагаю, что в build-arm будут развернуты еще кое-какие поддиректории кроме summon-arm-toolchain. Поэтому, чтобы не раскидывать поддиректории по диску, я их сосредоточил в одном месте.

Если вы не очень разбираетесь в git-е, то можете скачать исходники тулчейна также командой:

# wget https://github.com/esden/summon-arm-toolchain/zipball/master; unzip master

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

# cd summon-arm-toolchain

А вот дальше Вольфганг Визер (Wolfgang Wieser) предлагает выполнить еще одну git-овскую команду:

# git checkout remotes/origin/dev

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

Установка

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

Итак, разработчики summon говорят, что можно вообще не замарачиваться, а задать пустую команду (вообще без параметров):

# ./summon-arm-toolchain

В то же время, Вольфганг предлагает вот такое:

# ./summon-arm-toolchain PREFIX=/opt/ARM/arm-linaro-eabi-4.6/ OOCD_EN=1 TARGET=arm-none-eabi LIBSTM32_EN=1 USE_LINARO=1 CPUS=2

В принципе, все заданные параметры меня устраивают, и можно смело выполнять эту команду. Единственное, что я считаю нужным — это прокомментировать эти и другие параметры.

PREFIX — задает место, куда будет установлен тулчейн. Разработчики (и я в том числе!) часто устанавливаю программы в:

1. Домашний директорий в поддиректорий bin (/home/vasja_pupkin/bin/). Это удобно, поскольку это твои проги и ты волен делать с ними что угодно. Хоть вирусами заражай! Защиты, естественно, — никакой! Зато и доступ к ним на изменений — без проблем. Если параметр PREFIX не задавать, то по умолчанию установка осуществится в директорий $(HOME)/sat.

2. Системный директорий /usr/local/bin. Сюда в основном попадают все проверенные временем программы. Это долговременное хранилище. Проги сюда попадают, а потом пользователи про них обычно забывают. Вот так и работают проги из этого места — надежно и бесконечно длительное время. Кроме того, здесь таких программ собирается достаточно много. И если во время установки что-то пойдет не так, то вы подпортите жизнь и себе и другим. Поэтому нам лучше на это место пока не зариться. Можно также производить установку в директорий /usr/bin. Практически они ничем друг от друга не отличаются.

Чтобы «нацелить» инсталляцию сюда, задайте параметру PREFIX значение /usr/local или просто /usr. Поддиректорий bin будет автоматически добавлен инсталлятором.

3. Директорий /opt. В него как раз лучше всего записывать такие программы. Этот директорий изначально пустой, поэтому никому мы особо не навредим, если случайно накосячим. Директорий принадлежит root-у, а не нам. Поэтому в процессе работы из под своего пользовательского аккаунты мы ничего не сломаем. А инсталляция — это одноразовый процесс, тут мы очень внимательно всё делаем. Поэтому будем ставить тулчейн сюда. Но чтобы не создавать в директории винегрет из программ, давайте зададим еще один поддиректорий — arm-linaro-eabi.

SUDO — задает наличие или отсутствие признака для выхода на уровень root-а.

Если вы работаете в операционке Debian, то вы должны производить все описанные здесь действия из-под root-а. Иначе говоря, вы уже и так под root-ом. В этом случае просто опустите этот параметр. Если вы находитесь в Ubuntu, то загрузку и компиляцию вы еще можете сделать из-под своего аккаунта, а вот проинсталлировать (читай — изменить систему) — у вас таких прав нет. Вам нужно временно подняться до уровня root-а, что и делается с помощью указания параметра SUDO=sudo.

TARGET — это префикс в названии команд, которые в совокупности представляют собой тулчейн. Обычные комповые компиляторы, линковщики и прочие утилиты имеют такие названия — gcc, ld, objcopy, objdump, nm, size, strip и так далее. Чтобы не перепутать кросс средства, которые имеют те же самые имена, принято обычно дописывать в начало команд префиксы. Таким образом, наши команды для микроконтроллеров ARM/Cortex будут называться несколько иначе: arm-none-eabi-gcc, arm-none-eabi-ld, arm-none-eabi-objcopy и т.д.

Если у вас на компе до кучи будет установлены тулчены еще и для AVR и для MSP430, то они будут иметь соответствующие свои префиксы: avr-gcc, avr-ld, arv-objcopy, msp430-gcc, mcp430-ld, msp430-objcopy … Думаю, что идея вам понятна.

Беспокоиться о том, что сейчас вам придется каждый раз набирать в шесть раз более длинное название утилиты или компилятора — не стоит. Дело в том, что это (извините!) не Шindows, и линуксовая консоль — это не Виндовая командная строка. Практически, вам никогда не понадобится набирать длинное название (такое как arm-none-eabi-objdump или другое). Один раз, конечно придется, когда будете конфигурировать среду разработки или создавать специальный управляющий компилцией Makefile, но и то — скорее всего вы это закопипастите откуда-нибудь (например, с этого блога), чем будете сами набирать на клавиатуре. Так что все надумано. Практика покажет, что все совершенно иначе и нет повода для беспокойства.

OOCD_EN — разрешение на установку пакета OpenOCD.

Этот пакет (OpenOCD)является толстой прослойкой между микроконтроллером и отладчиком gdb. Если хотите, то OpenOCD — это могучий драйвер, который умеет работать с огромным количеством микроконтроллеров, программаторов, отладочных плат и интерфейсов. Находясь в отладчике, вы задаете ему разные команды. Отладчик транслирует их (в) OpenOCD. OpenOCD переваривает их в управляющие команды аппаратных программаторов. Объяснять дольше и не понятнее, чем это вы увидите на практике. На самом деле, сложного ничего тут нет.

Чтобы установить OpenOCD, напишите OOCD_EN=1.

Забавно отметить, что Вольфганг говорит, что он не устанавливает OpenOCD (OOCD_EN=0). Он объясняет отказ от установки тем, что в текущей версии (которая будет таким образом установлена) отсутствует поддержка STM32F4. Но чтобы иметь поддержку этих камней OpenOCD нужно устанавливать иначе. У него там целая тема развернута по этому вопросу.

Но мне сейчас не нужно работать с STM32F4 и, кроме того, программное обеспечение в Линуксе прогрессирует очень быстро. Не исключено, что к тому времени, когда вы будет выполнять установку, поддержка STM32F4 в OpenOCD уже будет реализована. Так что решайте сами — нужно вам это или нет.

Если не нужно, делайте так как здесь. Если нужно, то напомните мне и я опишу установку OpenOCD в отдельной статье.

LIBSTM32_EN — этот параметр разрешает компиляцию несвободной библиотеки libstm3. Если вам нужна эта библиотека, то напишите LIBSTM32_EN=1. По умолчанию LIBSTM32_EN=0.

LIBOPENCM3_EN — еще одна библиотека для работы с ядром Cortex-M3, на этот раз — свободная. По умолчанию LIBOPENCM3_EN=1.

QUIET — опция, которая затыкает фонтан сообщений. Если вы не успеваете читать сообщения со скоростью пулемета, то напишите QUIET=1. К тому же время сборки и установки немного сократиться. А в целом, для новичков опция не существенная.

USE_LINARO — если вы не доверяете команде разработчиков, которые адаптировали gcc, и хотите работать с «ванильным» gcc, то укажите USE_LINARO=0. По умолчанию USE_LINARO=1.

DEFAULT_TO_CORTEX_M3 — разрешает собрать утилиты (binutils) и компилятор gcc для генерации кода для архитектуры Cortex-M3. Ссылаясь на то, что тесты показали, что это решение не очень надежно, разработчики не рекомендуют это делать. Вместо этого, говорят они, лучше добавить опции для сборки в ваше программное окружение (environment). По умолчанию DEFAULT_TO_CORTEX_M3=0.

CPUS — количество ядер на компе. Если у вас прокачанная тачка, то вы можете сократить время сборки тулчена заставив работать все ядра. В прочем, по умолчанию в данном проекте (я подчеркиваю — в данном проекте, в других проектах это не обязательно будет так!) количество ядер определяется автоматически и все они будут задействованы при сборке. Но если во время сборки еще задумаете поиграть в крутую игрушку, которая жрет ресурсы процессора, то тормоза и залипания вам будут обеспечены. Чтобы такого не произошло, укажите в этой опции количество «цилиндров».

Ну вот, вроде бы просветились. Теперь можно дать команду на сборку: ./summon-arm-toolchain с необходимыми параметрами.

Замечания по использованию

Благодаря хорошей работе Эрика Парсонджа и Бернарда Дэйвисона сейчас тулчейн поддерживает работу с несколькими библиотеками. Вы можете пожелать использовать следующие комбинации GCC-флагов чтобы обеспечить в своем проекте уже проверенную (в оригинале — fledged, оперившуюся, вставшую на крыло) поддержку кода для вычислений с плавающей точкой для следующих архитектур:

для ARM7TDMI-S укажите флаги: -mthumb -mcpu=arm7tdmi-s
для Cortex-M0 укажите флаги: -mthumb -mcpu=cortex-m0
для Cortex-M3 укажите флаги: -mthumb -mcpu=cortex-m3
для Cortex-M4 укажите флаги: -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16

Причем, по умолчанию используется программная (soft) реализация кода для работы с плавающей точкой, но для Cortex-M4 вы можете задать аппаратную (hard) реализацию.

Чтобы посмотреть список доступных комбинаций выполните команду:

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

Ну вот! Теперь, кажись, всё?

Далее будем разбираться в вопросах как создаются проги для ARM/Cortex и чем (и почему) это создание отличается от создания прог для AVR и MSP430.

Фух!

UPDATE 30.10.2012

При очередной инсталляции на супер-пупер-компьютер-ноутбук RoverBook Parthner RT6 (Celeron-1200, RAM 64 MB минус 4 MB для встроенной видяхи, винт 15 GB) закачка newlib зациклилась:

...
(попытка: 147) => «newlib-1.19.0.tar.gz»
Устанавливается соединение с sources.redhat.com|209.132.183.64|:21... соединились.
Регистрация под именем anonymous ... Регистрация прошла успешно!
==> SYST ... сделано.    ==> PWD ... сделано.
==> TYPE I ... готово.  ==> CWD (1) /pub/newlib ... сделано.
==> SIZE newlib-1.19.0.tar.gz ... 14323667
==> PORT ...
Недопустимый PORT.
Продолжение попыток.
...

Как выяснилось, ftp-сервер RedHat не смог переварить команду закачки:

$ wget -c --no-passive-ftp --no-check-certificate ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz

Ему не понравился флаг —no-passive-ftp. Пришлось редактировать скрипт summon-arm-toolchain.

Найдите в скрипте функцию fetch и удалите из команды wget этот флаг.

Advertisements

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s