Написал инструкцию, как установить и настроить софт для работы с микроконтроллерами ARM
Я работаю с JTAG-адаптером wiggler на LPT и микроконтроллером at91sam7s256.
Для других устройств настройка будет отличаться в деталях.
1. Устанавливаем Java Runtime Environment (JRE) . Я подключил файл jre-1.6.0.11_301.sfs
Проверяем: java -version. Должны увидеть версию.
2. Устанавливаем GNU ARM toolchain.
Я брал здесь:
http://embdev.net/articles/ARM_GCC_toolchain_for_Linux_and_Mac_OS_X Распаковываем, каталог arm переносим в /usr/local/, добавляем путь /usr/local/arm/bin в PATH
Проверяем: arm-elf-gcc --version. Должны увидеть версию.
3. Устанавливаем OpenOCD.
Качаем openocd-0.1.0.tar.bz2. Распаковываем, компилируем при подключенном devx-lks-cmake_301.sfs.
./configure --enable-parport ( для wiggler-а )
make
make install
Создать работающий pet у меня пока не получается, поэтому пока так.
4. Устанавливаем Eclipse ( Gallileo ).
На сайте eclipse.org выбираем Eclipse IDE for C/C++ Developers и качаем 32-битный билд.
Распаковываем в произвольный каталог ( у меня - /opt ). Запускаем. Радуемся.
( С EasyEclipse связываться не советую, версии старые, одни неприятности. )
5. Настраиваем Eclipse.
5.1 Устанавливаем Zylin CDT plugin.
Идем в Help-->Install New Software, жмем Add,
набираем Name: zylincdt и Location:
http://opensource.zylin.com/zylincdt Жмем Ok, Next, Finish. Это понятно.
5.2 Создаем новый проект, импортируем пример.
Создаем новый C-проект,
выбираем Project type: Makefile project/Empty Project, Toolchains: Other Toolchain
Снимаем галку с Project-->Build Automatically
Идем в Project-->Properties:
В Builders снимаем галку с Scanner Configuration Builder
В Settings выбираем GNU Elf Parser
Идем в File / Import... и выбираем File System и указываем ему на распакованый в стороне пример.
Отмечаем галками все или не все файлы. Жмем Finish.
Чистим проект: Project-->Clean. Галку Start a build immediately снимаем.
Компилируем проект Project-->Build Project
Получаем или не получаем .hex, .bin, .elf, или .out файлы, в зависимости от содержимого makefile.
.bin нам нужен для заливки в контроллер, .elf нужен для отладки.
( Наличие .elf-файла еще не гарантирует нормальную отладку, на примере с YAGARTO отладка работает,
на другом - ошибка. Видимо дело в опциях makefile. )
5.3 Настраиваем дебаг.
Переключаем оболочку на режим дебага.
Тыкаем в черный треугольник на кнопке с зеленым жуком. Выбираем Debug Configurations
Делаем новую конфигурацию для Zylin Embedded debug ( Native ). Настраиваем ее:
Project - текущий, C/C++ Application - xxxx.elf С другими файлами дебаг похоже не работает.
GDB debugger: /usr/local/arm/bin/arm-elf-gdb, GDB command line: пусто. Никакой .gdbinit я не гружу.
На вкладке Commands в поле Initialize commands у меня прописано:
target remote localhost:4444
load
break main
continue
Жмем Apply, потом Debug.
Шаги 5.2 и 5.3 нужно повторять для каждого нового проекта.
Перед пунктом 6 лучше сбросить микроконтроллер.
6. Запускаем OpenOCD: openocd -f конфигфайл
Засада в том, что в openocd минимум дважды менялся "язык" этих конфигфайлов и чужие конфиги
из интернета обычно не работают. Лучший путь - брать родные конфиги из каталогов interface
и target и из них лепить один и правильно прописать порты. Мой конфиг в аттаче.
Модуль параллельного порта я НЕ запускаю ( modprobe parport_pc ), поскольку в конфиге
openocd прописываю адрес 0x378. Инструкции рекомендуют переключить параллельный порт в EPP
режим. Я не делал, у меня и на ECP работает нормально.
Для удобства можно запуск openOCD прописать прямо в Eclipse - в External Tools
После пункта 6 начинает работать внутричиповая отладка.
7. Прошивка флеш-памяти микроконтроллера.
Открываем новое окно консоли ( первое осталось занятым openocd ) и набираем:
telnet 127.0.0.1 3333
halt
flash probe 0
Здесь я получил такую строчку : flash ‘at91sam7’ found at 0x00100000.
Работает.
Еще команды:
flash info 0 - информация о чипе
flash protect 0 0 15 off - снятие защиты на запись
at91sam7 gpnvm 0 1 set - разрешение загрузки из flash/sram
flash erase_sector 0 0 15 - стирание flash
help - хелп
flash erase_check 0 - проверка чистоты флеша
flash write_bank 0 test.bin 0x0 - запись файла
Чтобы каждый раз не набивать команды я выполняю скрипт upload.scr:
script upload.scr
Содержимое скрипта:
halt
wait_halt
flash probe 0
flash erase_sector 0 0 15
flash write_bank 0 /opt/main.bin 0x0
Теперь моя платка весело моргает светодиодами
Версии используемого софта:
PuppyRus Jeans 1.3.0
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
arm-elf-gcc (GCC) 4.1.0
GNU gdb 6.4
Eclipse IDE for C/C++ Developers. Build id: 20090619-0625
Open On-Chip Debugger 0.1.0 (2009-08-14-13:38) Release
Полезные страницы:
http://www.yagarto.de/howto/yagarto2/index.html http://www.yagarto.de/howto/yagarto1/index.html http://www.yagarto.de/howto/openocd/index.html http://www2.pt.tu-clausthal.de/~alexp/arm/index.html