Поддержка оригинальных Silabs-овских дебаггеров EC2 и EC3 обеспечивается с помощью пакета ec2drv
В первую очередь, нам надо инсталлировать все необходимые утилиты и бибилиотеки. На Debian-based системах это можно сделать командой:
apt-get install autoconf libtool libboost-dev libusb-dev libreadline5-dev subversion libboost-regex-dev
Получаем исходный код:
svn co https://ec2drv.svn.sourceforge.net/svnroot/ec2drv/ec2drv/trunk ec2drv
Переходим в каталог проекта и инициируем automake:
cd ec2drv make -f Makefile.cvs ./configure
Поскольку пакет ec2drv не обновлялся с 2006 года, для установки на современные системы потребуется побить в бубен.
Теперь следует отредактировать файл libtool полученный после выполнения ./configure. Открываем libtool в редакторе и ищем строку
# An echo program that does not interpret backslashes. ECHO="echo"
заменяем её на
# An echo program that does not interpret backslashes. echo="echo"
Выполняем команду make. И получаем во множестве ошибки типа:
... ... g++ -DHAVE_CONFIG_H -I. -I../.. -I../../src/ec2drv -g -O2 -MT symbol.lo -MD -MP -MF .deps/symbol.Tpo -c symbol.cpp -fPIC -DPIC -o .libs/symbol.o symbol.cpp: In member function 'FLAT_ADDR Symbol::flat_start_addr()': symbol.cpp:104: error: 'printf' was not declared in this scope symbol.cpp: In member function 'void Symbol::dump()': symbol.cpp:142: error: 'snprintf' was not declared in this scope symbol.cpp:154: error: 'printf' was not declared in this scope make[3]: *** [symbol.lo] Error 1 make[3]: Leaving directory `/home/murat/Desktop/deneme/ec2drv/src/debug-core' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/murat/Desktop/deneme/ec2drv/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/murat/Desktop/deneme/ec2drv' make: *** [all] Error 2
Это связано с тем, что в новых версиях GCC не подключается автоматически заголовок <cstdio> (см. http://gcc.gnu.org/gcc-4.3/porting_to.html). Придётся добавлять ко всем исходникам дающим ошибку директиву подключения заголовка:
#include <cstdio>
Список файлов, которые потребуется изменить:
src/newcdb/cmdcommon.cpp src/newcdb/cmddisassemble.cpp src/ec2tools/ec2test-any.cpp src/debug-core/breakpointmgr.cpp src/debug-core/target.cpp src/debug-core/contextmgr.cpp src/debug-core/symtab.cpp src/debug-core/symbol.cpp src/debug-core/targets51.cpp src/debug-core/targetsilabs.cpp src/debug-core/symtypetree.cpp
После успешной сборки можно инсталлировать пакет в систему:
sudo make install
Выполним команду sudo ldconfig, что бы проиндексировать новые динамические библиотеки.
Подключим дебаггер к usb и проверим, что он у нас определяется:
sudo ec3adapters
List of Silicon Labs USB debug adapters found: port Device Manufacturer Friendly Name ec2_GetDbgInfo(0x10c4,0x8044) 1 USB:EC30000F505 USB Debug Adapter Silicon Laboratories EC3 debugger
Подключаем к дебаггеру микроконтроллер или отладочную плату и проверяем, что он у нас определяется:
sudo ec2device --port=USB
********************************************************************* * WARNING: Auto detection of mode may cause initialisation sequence * * to differ significantly from the SiLabs IDE. * * In the case of problems specify --mode=C2 or --mode=JTAG * ********************************************************************* 0x1d6b, 0x0001 0x1d6b, 0x0001 0x046d, 0xc52e 0x1d6b, 0x0001 0x1d6b, 0x0001 ec2_GetDbgInfo(0x10c4,0x8044) 1 Found EC3 debugger ec2_reset C2 EC3 debugger firmware version = 0x0c FOUND: device : C8051F326 mode : C2 Flash size = 16384 bytes Internal xram size = 1024 bytes External bus = No Single lock addr = 0x3dff Flash sector size = 512 bytes Flash reserved top = 0xffffffff Flash reserved bottom = 0x3e00 Has Scratchpad = No Has paged SFR = No USB FIFO size = 256 bytes Tested = No Support for this device has not been fully tested or may not be complete You can be of assistance, please visit: http://sourceforge.net/tracker/?atid=775284&group_id=149627&func=browse Please feel free to report your succcess / failure. If there are any issues we can probably resolve them with your help since we don't have boards for every supported processor. exiting now disconnect done
Видим, что контроллер успешно определился, это C8051F326. Но нас предупреждают, что работа с ним непровена.
Может статься, что версия прошивки дебаггера не подходит для работы с ec2drv. Об этом любезно сообщит ec2device.
Обновить прошивку до нужной, не просто, а очень просто http://ec2drv.sourceforge.net/firmware.html
Я обновил прошивку с версии 0x02 до версии 0x0C
sudo ec2-update-fw --port=USB --image=ec3-fw-0x0c.raw --xor
Вы уже заметили, что нам постоянно приходится использовать команду sudo для работы с дебаггером. Что бы можно было нужно прописать правила для udev.
С исходными текстами ec2drv идут файлый ubantu-usb.txt(sic) и 60-silabs.rules(redhat version) расположенные в директории doc.
Что бы добавить правила в вашу систему, создайте новый файл /etc/udev/rules.d/z99-silabs.rules со следующим содержимим:
BUS=="usb", SYSFS{idVendor}=="10c4", SYSFS{idProduct}=="8044", GROUP="silabs"
Это правило позволит пользователям из группы silabs получить доступ к дебаггеру. Создайте группу silabs, добавьте в неё нужного пользователя и перезагрузите правила udev. Все команды должны выполняться от root-а:
groupadd silabs adduser [user] silabs udevadm control --reload_rules