Программирование для arm linux

Программирование контроллеров ARM7 в Eclipse: как это делается. v2.0

Когда-то я уже писал статью о программировании контроллеров в Eclipse, но это было сделано под Ubuntu и без помощи тулчейна. Теперь я расскажу, как сделать это с помощью тулчейна и под Windows.
Итак, у меня имелись: установленная Eclipse для Java, плата с контроллером AT91SAM7X512, модуль SAM-ICE от Atmel и злое начальство в качестве мотивации.

Устанавливаем/доустанавливаем Eclipse IDE

Первое что мы делаем — устанавливаем Eclipse и всё нужное в неё. Последняя на данный момент версия это Eclipse Kepler. Если она не установлена идём сюда и скачиваем Eclipse IDE for C/C++ Developers, затем распаковываем её в удобное место.

Если Eclipse уже установлен(в моём случае Eclipse IDE for Java Developers), то запускаем её, выбираем удобное для нас место для workspace, где будут лежать все проекты, идём в меню Help ⇒ Install New Software и в поле «Work with. » выбираем «Kepler — download.eclipse.org/releases/kepler». Нам откроется список того, что есть на этом источнике. Разворачиваем узел «Programming language«, ставим галочку на «C/C++ Development Tools«, затем разворачиваем узел “Mobile and Device Development“, ставим галочку на “C/C++ GDB Hardware Debugging”, нажимаем «Next» и «Finish«. После установки Eclipse перезапустится.

В случае, если вы скачивали Eclipse IDE for C/C++ Developers, доустановите плагин C/C++ GDB Hardware Debugging. Он нам понадобится при отладке, а пока поставим ещё один плагин, для поддержки тулчейна.

Снова идём в меню Help ⇒ Install New Software, нажимаем кнопку «Add«. В появившемся окне указываем любое имя в строке «Name«, а в строке «Location» указываем следующее:
gnuarmeclipse.sourceforge.net/updates
Нажимаем «OK«. Нам покажут огромный список того, что есть в этом источнике из целого одного компонента — «CDT GNU Cross Development Tools«. Ставим на нём галочку, жмём «Next» и «Finish«. Во время установки не обращаем внимание на Warning и смело жмём на ОК. После установки Eclipse перезапустится.
Вуаля, здесь всё. Идём дальше.

Устанавливаем компилятор

Идём сюда и скачиваем установочник Sourcery CodeBench Lite Edition. На данный момент последняя версия 2013.11-24. Установка проста, единственное на чём нужно заострить внимание — обязательно нужно поставить галочку «Изменить переменную PATH«. После установки перезагружаем машину.
Для проверки правильности установки в командной строке выполняем команду:
arm-none-eabi-gcc -v .
Она должна показать нам подробное описание всего инструментария и версию компилятора. На этом с компилятором всё.

Читайте также:  Ftp клиент astra linux
Создаём скелетный проект

Запускаем Eclipse, идем в меню «File->New->C Project«. Появится окно создания проекта. Даём ему имя, в дереве “Project type” выбираем тип проекта “ARM Cross Target Application -> Empty Project”, а из тулчейнов выбираем Sourcery. Нажимаем Finish.

Проект есть, теперь нам нужен файл Startup и скрипты линкера для отладочной конфигурации и для прошивки в контроллер.
Идём сюда и скачиваем архив «AT91SAM7X-EK Software Package for IAR 5.2, Keil and GNU». В нём идём по пути /at91sam7x-ek/packages/ и выбираем любой проект, имя которого оканчивается на gnu. В нём идём по такому пути /имя_проекта/at91lib/boards/at91sam7x-ek, забираем отсюда файл board_cstartup.S, а из лежащей там же папки at91sam7x512 забираем файлы AT91SAM7X512.h, sram.lds, flash.lds и копируем всё это добро куда-нибудь в одну папку.

Снова идём в Eclipse. Там правой кнопкой мыши тыкаем на наш проект и выбираем «Import«, в появившемся окне выбираем General->File System, жмём Next. Выбираем папку, куда скопировали файлы board_cstartup, sram и flash, ставим галочки на этих файлах и нажимаем Finish. Вуаля, файлы появились у нас в проекте.

Теперь нужно немного поправить файлы .lds. Приведите их к такому виду:

OUTPUT_FORMAT(«elf32-littlearm», «elf32-littlearm», «elf32-littlearm»)
OUTPUT_ARCH(arm)
ENTRY(entry)

MEMORY
sram (W!RX): ORIGIN = 0x200000, LENGTH = 0x20000
flash (RX): ORIGIN = 0x000000, LENGTH = 0x80000
>

.relocate: AT (_efixed)
. = ALIGN(4);
_srelocate = .;
. = ALIGN(4);
_erelocate = .;
>

OUTPUT_FORMAT(«elf32-littlearm», «elf32-littlearm», «elf32-littlearm»)
OUTPUT_ARCH(arm)
ENTRY(entry)

MEMORY
sram (RWX): ORIGIN = 0x200000, LENGTH = 0x20000
flash (RX): ORIGIN = 0x100000, LENGTH = 0x80000
>

SECTIONS
<
.fixed:
. = ALIGN(4);
_sfixed = .;
*(.vectors)
*(.text*);
*(.rodata*)
_efixed = .;
> >flash

.relocate: AT (_efixed)
_srelocate = .;
*(.data)
*(.data*)
. = ALIGN(4);
_erelocate = .;
> >sram

Скелетный проект готов.
Теперь можно писать код, добавляя новые файлы через File->New-> C/C++ Source File. У меня проект был и я его просто импортировал.

Настройка проекта

Теперь нужно настроить проект, для чего идём в меню Project->Properties или делаем правый клик по нашему проекту и выбираем там Properties.
В появившемся окне выбираем пункт “C/C++ Build->Setting”. Выбираем в поле Configuration пункт All configuration. Теперь пройдёмся по всем пунктам настроек.

Читайте также:  List all listening ports in linux
Target processor
  1. Processor — arm7tdmi
  2. Architecture — armv4t
  3. Thumb — disabled
  4. Thumb interwork — enabled
  5. Endianness — Little Endian
  6. Float ABI — Library
  7. Other target flags: -marm — mlong-calls
ARM Windows GCC C Compiler — Optimization
  1. Pack structure — disabled
  2. Short enumeration — disabled
  3. Function sections — enabled
  4. Data sections — disabled
ARM Windows GCC C Compiler — Miscellaneous
ARM Windows GCC C Linker
  1. Script File — пока не трогаем
  2. Do not use standart start files — enabled
  3. Do not use default libraries — enabled
  4. Remove unused section — enabled

В пункте Miscellaneous: ставим галочку на Cross Refereinse.

ARM Windows GNU Create Flash Image — Output

Идем обратно на вкладку Debugging, а в поле Configuration выбираем Debug. Выставляем Debug level — Maximum, а Debug format — gdb, жмем Apply. Теперь переключаем конфигурацию на Release, выставляем Debug level — None и жмём Apply.

Теперь возвращаемся на ARM Windows GCC C Linker — General, в поле Configuration выбираем Debug, а в качестве Script file указываем наш файл sram.lds. Нажимаем Apply. Теперь переключаем конфигурацию на Release, а в качестве Script file указываем файл flash.lds и снова жмём Apply. Всё, настройка проекта закончена. Теперь можем включить нужную конфигурацию билда и собирать прошивку.

Прикручиваем отладку

Идем сюда, вводим серийный номер нашего SAM-ICE, скачиваем и устанавливаем пакет программ для J-Link. Здесь есть очень важная штука — GDB Server, который очень пригодится нам для отладки. Ещё одна важная штука — JFlash, который позволяет без проблем прошить наш контроллер.

Создаём конфигурацию для запуска отладочного сервера, для чего в Eclipse идём в меню Run->External Tools->External Tools Configurations и делаем двойной клик на пункте Program. Настраиваем, свежесозданную конфигурацию.

  1. Name — назовем как-нибудь, например GDB Server
  2. Location — указываем путь к установленному недавно JLink GDB Server, в моём случае это C:\Program Files (x86)\SEGGER\JLinkARM_V412\JLinkGDBServerCL.exe
  3. Working Directory — указываем путь к папке нашего проекта
  4. Arguments — никаких аргументов нам и не надо, интерфейс JTAG используется по умолчанию
  1. C/C++ Application — указываем наше приложение из папки Debug с расширением .elf
  2. Project — указываем наш проект.
  3. В нижней части окна, на уровне кнопок Apply и Revert притаилась ещё одна скрытая настройка, нужно её обязательно открыть до перехода на следующую вкладку и выбрать «Legacy GDB Hardware Debugging Launcher«
  1. GDB Command — указываем наш отладчик arm-none-eabi-gdb.exe
  2. Command Set — Standart Windows
  3. Protocol Version — mi
  4. Use remote target — enabled
  5. JTAG Device — Generic TCP/IP
  6. Host name or IP adress — localhost
  7. Port number — 2331
  1. Reset and Delay — disabled
  2. Halt — disabled
  3. Далее следует окошко, в котором указываем следующий скрипт инициализации:
    # connect to the J-Link gdb server
    target remote localhost:2331
    # Set JTAG speed to 30 kHz
    monitor endian little
    monitor speed 30
    # Reset the target
    monitor reset 8
    monitor sleep 10
    # Change mapping, putting RAM at addr. 0
    monitor long 0xFFFFFF00 = 0x00000001
    # Setup GDB for faster downloads
    set remote memory-write-packet-size 1024
    set remote memory-write-packet-size fixed
    monitor speed 12000
    break main
    load
  4. Load image — enabled, use project binary
  5. Load symbols — enabled, use project binary
  6. Symbol offset — не ставим
  7. Set program counter at — disabled
  8. Set breakpoint at — disabled
  9. Resume — disabled
  10. Run command — пусто
Читайте также:  Can linux use windows drivers

Всё готово. Теперь для отладки подключаем SAM-ICE к USB порту нашей машины и к плате с контроллером, собираем наш проект, запускаем сервер GDB, а потом запускаем собственно конфигурацию отладки.

В итоге мы получили бесплатную IDE для программирования и отладки приложений для ARM-контроллеров, на замену, скажем, тому же IAR. Наша Eclipse, конечно, несколько уступает по части отладки — нельзя с ходу просмотреть значения регистров периферийных устройств, таких как SPI или таймеры-счётчики.

На сайте SEGGER можно заметить, что есть версия GDB сервера и для Linux. Подозреваю, что таким же нехитрым способом с некоторыми изменениями можно организовать и отладку, например, под Ubuntu.
Всем удачи в программистских делах!
P.S. Если вы заметили неточность или знаете способ, как можно улучшить сию методику — пишите в комментарии, буду рад советам и конструктивной критике.

Источник

Оцените статью
Adblock
detector