Ubuntu + Eclipse + Code Sourcery + OpenOCD + j-link + ARM, или "Быстрый старт для сомневающихся"
Цель этой статьи — показать, что установка, наладка и «запуск в эксплуатацию» тулчейна для работы с ARM'ами довольно проста и занимает вместе с перекурами около получаса. Ключевое слово в названии — Ubuntu, или, вообще говоря, Linux. Большинство материала в сети рассчитано на аудиторию пользователей MS Windows, и перейти на Linux мешает, или пугает, отсутствие руководства, в котором был бы более-менее популярно описан процесс. Да, это немного сложнее, чем установка Keil+SEGGER, но зато потом, надеюсь, вы оцените преимущества работы в Linux.
Эта процедура проверена для Ubuntu 11.04 и Linux Mint 12.
Имеем:
с одной стороны — Linux,
с другой стороны — пациент с ARM мозгом + j-link brain surgery helper.
План действий:
1. Установка Code Sourcery G++ Lite for ARM EABI
2. Установка Eclipse и GNU ARM плагина
3. Настройка GNU ARM плагина
4. Установка OpenOCD
5. Заставить всё это работать
6. Прибраться
1. Установка Code Sourcery G++ Lite for ARM EABI
Можно браузером скачать инсталятор вот по этой ссылке, но мы выберем путь попроще. Поэтому откроем консоль…
$ cd ~
$ mkdir temp
$ cd temp
$ wget https://sourcery.mentor.com/sgpp/lite/arm/portal/package8734/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
После окончания загрузки распакуем полученный архив
$ tar xvf arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
Теперь
$ sudo mkdir /opt/codesourcery
$ sudo mv arm-2011.03 /opt/codesourcery
Добавитм путь к бинарникам Code Sorcery в переменную PATH
$ gedit ~/.profile
Добавим туда строчку
PATH=/opt/codesourcery/arm-2011.03/bin:$PATH
Чтобы изменения вступили в силу, нужно перелогиниться.
2. Установка Eclipse IDE for C/C++ Developers
Скачать можно браузером отсюда, но мы…
$ cd ~/temp
$ wget http://mirror.tspu.ru/eclipse/technology/epp/downloads/release/indigo/SR1/eclipse-cpp-indigo-SR1-incubation-linux-gtk.tar.gz
После окончания загрузки
$ tar xzvf eclipse-cpp-indigo-SR1-incubation-linux-gtk.tar.gz
$ sudo mv eclipse /opt
Теперь нужно в Eclipse добавить поддержку для GDB Hardware Debugging
$ /opt/eclipse/eclipse &
Меню Help->Install New Software…
В поле Work With добавляем
http://download.eclipse.org/tools/cdt/releases/indigo
жмём Enter и ставим вот эту галочку
Далее продолжаем пока не закончится установка, после чего выбираем Restart Now.
Тепер установим GNU ARM плагин.
Снова Меню Help->Install New Software…
В поле Work With добавляем
http://gnuarmeclipse.sourceforge.net/updates
и жмём Enter
Далее продолжаем пока не закончится установка, после чего выбираем Restart Now.
3. Настройка GNU ARM плагина
Cоздаём новый проект:
Меню File->New->C Project…
Выглядит это вот так
Сразу жмём Finish и получаем пустой проект для ARM'ов. Дальнейший путь зависит от того, с каким МК вы будете работать. Рассмотрим на примере горячо любимого народными массами, легендарного STM32, ибо я других не знаю. Итак, вы уже скачали последнюю версию библиотеки стандартной периферии с сайта STMicroelectronics. Нет? Тогда
$ cd ~/temp
$ wget http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f10x_stdperiph_lib.zip
$ unzip stm32f10x_stdperiph_lib.zip
Из всего этого нам нужны исходники для ядра и для периферии. Положим их в нужное место, например вот так:
$ mkdir ~/stm32
$ cp -R STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/* ~/stm32
Для решения минимальной задачи необходим скрипт для линкера. Его можно взять из какого-нибудь шаблона для Atollic TrueSTUDIO. Скопируем нужный файл в корень проекта:
$ cp STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Template/TrueSTUDIO/STM3210E-EVAL/stm32_flash.ld ~/workspace/Test
и сообщим об этом линкеру
Меню Project->Properties->C/C++ Build->Settings->вкладка Tool Settings->ARM Sourcery Linux GCC C Linker->General
В поле Script File укажем путь к файлу
Теперь средствами Eclipse добавим в проект файл со startup-кодом. Возьмём нужный файл из какого-то примера для TrueSTUDIO
Меню File->Import…
Комментарий по поводу файла startup-кода. Во-первых, изза глюка в CDT плагине, нужно изменить расширение файла с .s на .S. Во вторых, в самом файле закомментируйте пару строчек.
/* Call the clock system intitialization function.*/
/* bl SystemInit <-- */
/* Call static constructors */
/* bl __libc_init_array <--*/
/* Call the application's entry point.*/
bl main
bx lr
.size Reset_Handler, .-Reset_Handler
Подробнее говорить не буду, т.к. это не входит в рамки нашей задачи.
Теперь добавим main.c
Меню File->New->Source File…
и наполним его минимальным смыслом
Теперь можно собрать проект. Жмём Ctrl-B и на этом пункт №3 будем считать завершённым.
4. Установка OpenOCD
Cоберём OpenOCD из исходников, добавив поддержку j-link, с которым и будем в дальнейшем сотрудничать.
$ cd ~/temp
$ sudo apt-get install libusb-dev
$ wget http://downloads.sourceforge.net/project/openocd/openocd/0.5.0/openocd-0.5.0.tar.bz2
$ tar xvf openocd-0.5.0.tar.bz2
$ cd openocd-0.5.0
$ ./configure --enable-jlink
$ make
$ sudo make install
Теперь j-link. Подключаем его к компу, и
$ lsusb
Надо разрешить системе работать с j-link'ом. Для этого создаём файлик .rules
$ sudo gedit /etc/udev/rules.d/45-jlink.rules
с содержимым
# SEGGER JLINK USB DEVICE 1366:0101
BUS!="usb", ACTION!="add", SUBSYSTEM!=="usb_device", GOTO="kcontrol_rules_end"
SYSFS{idProduct}=="0101", SYSFS{idVendor}=="1366", MODE="664", GROUP="plugdev"
LABEL="kcontrol_rules_end"
добавляем текущего пользователя в группу plugdev, хотя он уже там должен быть
$ sudo adduser user plugdev
и перезагрузим систему
$ sudo reboot
Теперь создаём минимальный скрипт для OpenOCD
$ gedit ~/workspace/Test/openocd.cfg
с содержимым
telnet_port 4444
gdb_port 3333
source [find interface/jlink.cfg]
source [find target/stm32f1x.cfg]
Подключаем j-link к пациенту, подаем на пациента питание. Затем
$ cd ~/workspace/Test
$ openocd
Получаем такую картину
Подключаемся к OpenOCD по telnet, через порт 4444. Я использую PuTTY.
Можно что-нибудь поделать с пациентом, например, посмотреть регистры ядра. (я уже ранее зашил в пациента кое-что)
Тут мы плавно переходим к выполнению 5-го пункта нашего плана.
Откроем Eclipse. Вы уже добавили ярлычок на панель? Нет? Ну тогда…
$ /opt/eclipse/eclipse &
1) Запуск OpenOCD из Eclipse.
В сети можно найти немало рекоммендаций по этому поводу.
Я для себя сделал запуск OpenOCD через скрипт, в отдельном окне, т.к. выяснилось, что Eclipse почему-то не завершет процесс OpenOCD, который оно выполняет в своей консоли, а OpenOCD иногда нужно перезапускать.
$ gedit ~/workspace/Test/openocd.sh
Содержимое скрипта
#!/bin/bash
CFGNAME=`basename $1`
RUNCMD="openocd -f $CFGNAME"
cd `dirname $1`
xterm -fg green -bg black -geometry 100x24-0-0 -e $RUNCMD &
Права на запуск
$ sudo chmod 755 ~/workspace/Test/openocd.sh
Создадим конфигурацию для запуска OpenOCD сервера.
Меню Run->External Tools->External Tools Configurations…
2) Отладчик.
Создадим конфигурацию для запуска GDB.
Меню Run->Debug Configurations…
Теперь компилируем и запускаем…
Создадим ещё одну конфигурацию для отладчика, но без команды заливки прошивки в контроллер, чтобы не терзать флэш когда нужно ещё раз запустить и поотлаживать. Конечно, исходный код при этом меняться не должен.
6. Прибираемся
$ cd ~
$ rm -rf temp
Вот и всё. Надеюсь, статейка будет для кого-то полезной.
Спасибо организаторам этого ресурса за возможность поучиться и поучить.
Спасибо всем кто занимается разработкой замечательного ПО, которое позволяет нам нескучно жить.
Ссылочки:
http://www.ubuntu.com/
http://www.eclipse.org/
http://sourceforge.net/projects/gnuarmeclipse/
http://openocd.sourceforge.net/
Обратная связь
Интересуют вопросы реализации алгоритмов, программирования, выбора электроники и прочая информация, постараюсь осветить в отдельных статьях
пишите мне на netdm@mail.ru
Добавить комментарий