Продолжаем строить Систему-на-Кристалле Amber для платы Марсоход2.
Для любого процессора нужна программа. Писать программу теоретически можно на ассемблере или C/C++. Чтобы запустить проект Amber в нашей плате Марсоход2 нам, конечно придется писать и компилировать программы. Как это делать?
ВНИМАНИЕ! Почти все написанное ниже довольно устарело, а именно, содержит устаревшую ссылку для скачивания компилятора Sourcery Codebench.
Вместо этого лучше самому сгенерировать тулчейн по вот этой инструкции.
Как видим, в папке sw/ проекта Amber лежат всякие разные программы. Обычно начинающие программисты пишут программы типа “hello world”. Ну вот и тут мы видим папку sw/hello-world с несколькими файлами: hello-world.c, start.S, Makefile, sections.lds.
Hellow-world.c содержит по сути очень простую программу на языке C:
#include "stdio.h"
main ()
{
printf ("Hello, World!\n");
/* Flush out UART FIFO */
printf (" ");
_testpass();
}
Функция printf печатает форматированную текстовую строку на консоль, а консоль у нас - это видимо последовательный порт.
Походим по другим папкам проекта Amber – ничего похожего на компилятор не видно. Зато в папке doc есть описание проекта на английском языке amber-spec.pdf.
Вот там-то, в главе 10.2 Installing compiler все что нам нужно и написано.
Попробуем выполнить изложенную там инструкцию.
1) переходим по первой указанной в документации ссылке https://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ и попадаем на сайт mentor.com!
2) В документации приведен скриншот нужной нам страницы, но то что я вижу сильно отличается от документации. Тем не менее, читаем внимательно, наверное здесь все же есть нужная нам ссылка для скачивания? Возможно и эта моя инструкция когда-то устареет, когда mentor.com опять поменяет страници своего сайта..
3) Ниже вижу, что можно выкачать свободный (бесплатный) компилятор Sourcery Codebench Lite Edition для нескольких платформ. Конечно, выбираем ARM, ссылка “Download GNU/Linux Release” http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/arm-gnu-linux Хм... время прошло и почему-то они больше не дают компилятор для ARM.. Что же делать? Пишут, что "Sourcery CodeBench Lite releases for ARM EABI, ARM GNU/Linux, ARM AARCH64-Linux, IA32/IA64 GNU/Linux and ELF are no longer available."
4) Появляется вот такая страница – придется заполнить форму со своим фамилией именем и email, прежде чем нам дадут скачать файл. Запоняю форму и нажимаю кнопку Get It.
На очередной странице мне сказали, что по почте выслали ссылку на скачивание Sourcery Codebench.
5) Так и есть. Я получил от них письмо. Перехожу по ссылке.
Наконец-то страница, откуда можно скачать! Кстати похоже можно выбрать компилятор работающий под Linux или работающий под Windows. Я все же выбираю для Linux.
На самом деле я пробовал выкачивать компилятор и для Windows. Такая красивая инсталяшка к нему. Ставится без проблем, вот только пользоваться для наших целей сразу не получится. Есть две проблемы:
- Исходники для Amber имеют Makefile, которые описывают что и как компилировать. Чтобы использовать Makefile нужно иметь установленную программу make - это такая специальная утилита. В принципе вроде бы есть make для Windows, но честно говоря было лень искать. В моем Linux программа make кажется стояла по умолчанию с самого начала.
- Некоторые папки проекта Amber, например, sw/tools имеют исполняемые скрипты *.sh. Наверное их так же можно было бы запустить в Windows, но не стал возиться с этим.
У меня есть виртуальная машина с Ubuntu - ее и использовал, поставил все там.
Я получил с сайта Mentor файл arm-2012.03-57-arm-none-linux-gnueabi.bin
Его нужно сделать исполняемым командами Linux:
chmod a+x arm-2012.03-57-arm-none-linux-gnueabi.bin
потом запустить
./arm-2012.03-57-arm-none-linux-gnueabi.bin
и на все вопросы отвечать нажатием клавиши Enter. После этого в домашней папке появляется папка CodeSourcery и в ней все и установлено.
Таким образом, компилятор становится установленным.
Чтобы компилировать наши исходники для Amber нужно установить переменную окружения
export AMBER_CROSSTOOL=arm-none-linux-gnueabi
и добавить к переменной PATH путь к компилятору
export PATH=$PATH:/home/nick/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin
Я написал такой инициализационный файл sw/init который задает эти переменные. Теперь после запуска терминала в Linux можно просто набрать в корне проекта
source sw/init
и все - среда разработки практически готова.
Что еще?
Да вот еще скрипты в папке sw/tools не запускаются. Чтобы это исправить им нужно задать права разрешения исполнения
chmod a+x sw/tools/*.sh
Теперь если зайти, например, в папку sw/hello-world и набрать
make
то происходит компиляция программы и появляются разные объектные и текстовые файлы - собственно результат компиляции.
Подробнее...