Silicon labs EC2/EC3 debugger linux driver

Поддержка оригинальных Silabs-овских дебаггеров EC2 и EC3 обеспечивается с помощью пакета http://ec2drv.sourceforge.net/|ec2drv

Установка 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

Дополнительно

 
comments powered by Disqus