Skip to content
 

Stellaris LaunchPad a OpenOCD

Už dlhšie som uvažoval o tom, že by som sa pozrel na procesory ARM. Keď sa objavila ponuka Stellaris LaunchPad LM4F120XL za nejakých 5 dolárov, neodolal som. Sklamanie nastalo, keď som zistil, že okrem nástrojov od TI (ktorým sa snažím vyhýbať ako sa len dá) nemám možnosť priamo využiť programovacie a ladiace ICDI rozhranie implementované na LaunchPade. Našťastie sa čoskoro objavilo riešenie v podobe modifikovaného OpenOCD.

Poznámka: tento článok obsahuje aj informácie, ktoré sa pravdepodobne rýchlo stanú neaktuálnymi. Podpora TI ICDI sa určite čoskoro stane súčasťou OpenOCD a nebude potrebné OpenOCD svojpomocne kompilovať. Avšak nutnosť skompilovať poslednú vývojovú verziu sa môže vyskytnúť aj inokedy – či už pôjde o podporu nových zariadení alebo opravu chýb. Stačí vynechať aplikáciu záplat a zvyšok postupu ostáva v platnosti.

Takže nazad k téme. Stellaris LaunchPad LM4F120XL a verzia ICDI, ktorú používa. nie je priamo v OpenOCD podporovaná. Našťastie existuje na zylin.com záplata, ktorá podporu nového ICDI implementuje. Aplikácia záplaty vyžaduje kompiláciu OpenOCD zo zdrojových textov. Keďže kompilácia zo zdrojových textov nemusí byť pre menej skúseného užívateľa triviálna, uvedieme postup – krok za krokom – ako OpenOCD skompilovať na najbežnejších platformách – na Linuxe (districúcie CentOS a Ubuntu) a na Windows.

Linux – príprava

Pre úspešnú kompiláciu potrebujeme nainštalovať niekoľko balíkov. Je ťažké odhadnúť, ktoré balíky sú predinštalované, preto v našom postupe budeme vychádzať z čistej inštalácie. Všetky uvedené postupy sú uvedené tak, aby ich mohol vykonávať neprivilegovaný užívateľ. Pokiaľ pracujete ako root, jednoducho vynechajte príkaz sudo.

CentOS 6

Ak máme nainštalovanú prakticky akúkoľvek preddefinovanú konfiguráciu okrem minimálnej, tak by sme mali mať všetky potrebné vývojové prostriedky nainštalované. Dobrou voľbou môže byť konfigurácia Software Development Workstation – síce obsahuje mnoho vecí, ktoré nebudeme nikdy potrebovať, ale zato nám prakticky nič nebude chýbať. Pokiaľ vývojové prostriedky nainštalované nemáme, problém najjednoduchšie vyriešime doinštalovaním celej skupiny Development tools:

sudo yum -y groupinstall "Development tools"

Chýbajúce balíky potrebné pre kompiláciu OpenOCD potom doinštalujeme príkazom:

sudo yum -y install libusb1 libusb1-devel texinfo telnet 

Ubuntu 12.10

V prípade Ubuntu vyjdeme z distribúcie Ubuntu Desktop 12.10. Základné balíky pre vývoj software sú nainštalované automaticky, takže potrebujeme doinštalovať len niekoľko doplňujúcich balíčkov a knižníc, potrebných pre kompiláciu OpenOCD:

sudo apt-get install git libtool autotools-dev automake libusb-1.0-0-dev libusb-1.0-0 texinfo

Linux – kompilácia OpenOCD

Najprv si naklonujeme vývojovú verziu OpenOCD z GIT repozitára. Repozitár sa nedávno zmenil pomerne nešťastným spôsobom – naklonuje sa nám do adresára s ničehovoriacim menom code. Preto ho premenujeme na openocd. Meno repozitára je vhodné skontrolovať priamo na stránke http://openocd.sourceforge.net/. Po premenovaní adresára priamo v ňom aplikujeme záplaty zo stránky http://openocd.zylin.com/#/c/922/:

git clone git://git.code.sf.net/p/openocd/code
mv code openocd ; cd openocd
git fetch http://openocd.zylin.com/openocd refs/changes/22/922/14 && git checkout FETCH_HEAD

Identifikátor refs/changes/22/922/14 identifikuje sadu záplat. Odporúčam overiť na stránke http://openocd.zylin.com/#/c/922/, či nie je k dispozícii novšia verzia.

Ak stiahnutie zdrojových textov a aplikácia záplat prebehli v poriadku, môžeme sa pustiť do automatickej konfigurácie, kompilácie a inštalácie. Ovládač pre Stellaris LaunchPad s TI ICDI má názov ti-icdi. Ja som pridal navyše ešte driver pre J-Link, ktorý mám k dispozícii a driver pre STLink, používaný na populárnych Discovery kitoch od STM. Takže môžeme spustiť kompiláciu a inštaláciu:

./bootstrap
./configure --prefix=/usr/local --enable-maintainer-mode --enable-jlink --enable-stlink --enable-ti-icdi
make
sudo make install

Príkazom bootstrap sa vygenerujú súbory pre autokonfiguráciu. Parameter –enable-maintainer-mode je potrebný pre prípravu dokumentácie, bez neho kompilácia zlyhá.

Po úspešnej kompilácii a inštalácii sa samotná aplikácia bude nachádzať v adresári /usr/local/bin (adresár by sa mal nachádzat v ceste – premenná PATH) a skripty v adresári /usr/local/share/openocd. Popis našej dosky je už súčasťou modifikovaného OpenOCD – nachádza sa v adresári board pod názvom ek-lm4f120xl.cfg.

Posledným problémom je, že k pripojenému Stellaris LaunchPadu nemá radový užívateľ prístup. Takže openocd musíme spúšťať ako root alebo – a to je lepšie riešenie – musíme nastaviť prístupové práva pre USB zariadenie. To dosiahneme tak, že vytvoríme nový súbor pravidiel pre udev (proces, zabezpečujúci automatickú správu zariadení). V adresári /etc/udev/rules.d vytvoríme súbor s názvom 75-launchpad.rules a doňho zapíšeme jeden riadok:

SUBSYSTEM=="usb", ATTRS{idVendor}=="1cbe" , ATTRS{idProduct}=="00fd", MODE="0666"

Nové pravidlo je potrebné aktivovať. Aj keď existuje možnosť, ako to spraviť za chodu systému, najjednoduchším a najspoľahlivejším riešením je reboot.

Po reboote a pripojení Stellaris LaunchPadu môžeme skúsiť openocd spustiť:

openocd -f board/ek-lm4f120xl.cfg 

Pokiaľ obdržíme výpis podobný tomuto:

Open On-Chip Debugger 0.7.0-dev-00062-gb9b4bd1 (2012-11-22-13:27)
Licensed under GNU GPL v2
For bug reports, read

http://openocd.sourceforge.net/doc/doxygen/bugs.html

adapter speed: 1000 kHz
Info : clock speed 1000 kHz
Info : ICDI Firmware version: 9270
Info : lm4f120h5qr.cpu: hardware has 6 breakpoints, 4 watchpoints

tak nami skompilovaný openocd funguje. Teraz sa môžeme pokúsiť pripojiť sa telnetom na port 4444 a vyskúšať základné príkazy ako halt, resume a reset.

Windows – príprava

Inštalácia toolchainu


Windows po inštalácii neobsahuje nič užitočné, preto potrebujeme nainštalovať celú sadu vývojových nástrojov. V prvom rade potrebujeme nainštalovať GCC toolchain. Použijeme MinGW, ktorý vytvára natívne Windows aplikácie (bez emulačných knižnic). Pre jednoduchosť ostaneme u 32-bitovej verzie, výsledné aplikácie pracujú bez problémov aj pod 64-bitovými Windows.

Grafický inštalátor pre MinGW sa volá mingw-get-inst a dá sa stiahnuť zo stránky http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/. Po spustení inštalátora odporúčam zvoliť možnosť “Download latest repository catalogues“. Čo je ale dôležitejšie – pri výbere komponentov, ktoré sa majú inštalovať, musíme zaškrtnúť voľbu MSYS.

Čo je vlastne MSYS? MSYS je takzvaný minimálny systém. Ide o implementáciu POSIX prostredia pod Windows – inými slovami, je to taký malý UNIX pod Windows. MSYS potrebujeme, ak chceme napríklad kompilovať produkty pomocou autotools – známa trojica configuremakemake install, tak ako sme ich kompilovali na Linuxe.

Po nainštalovaní MinGW vrátane MSYS potrebujeme urobiť niekoľko malých zmien. Prvou je skontrolovanie a nastavenie cesty k programom z MinGW, ktoré sa nachádzajú v adresári C:\MinGW\bin – cestu nastavíme v premennej prostredia PATH; odporúčam, aby táto cesta bola (aspoň počas kompilovania OpenOCD) na prvom mieste, resp. ihneď za systémovými cestami (začínajúcimi %SystemRoot%), čím zabránime spúšťaniu nesprávnych programov v prípade, že už máme nainštalovaný iný GCC toolchain. Druhou je vytvorenie “domovského adresára” pre užívateľa, pod ktorým sme prihlásení do Windows. To urobíme jednoduchým spustením “MinGW Shell” z hlavného menu alebo priamo spustením C:\MinGW\msys\1.0\msys.bat – domovský adresár sa vytvorí automaticky. Domovský adresár sa nachádza v adresári C:\MinGW\msys\1.0\home\meno_uzivatela – v tomto adresári sa budeme nachádzať po spustení MinGW Shell-u, v ňom budeme OpenOCD kompilovať a z neho budeme kopírovať výsledný program.

Posledným krokom je inštalácia autotools. Z príkazového riadku spustíme:

mingw-get install mingw32-autotools

Inštalácia Git


Aby sme mohli stiahnuť poslednú verziu OpenOCD a záplat potrebujeme nainštalovať Git for Windows. Stiahnuť ho môžeme z http://msysgit.github.com/. Pri inštalácii nastavíme voľby “Run Git from the Windows Command Prompt” a “Checkout as-is, commit Unix-style endings“. Po inštalácii skontrolujeme systémovú premennú PATH, či obsahuje cestu k programu Git – mala by byť C:\Program Files\Git\cmd alebo C:\Program Files (x86)\Git\cmd.

Inštalácia libusb 1.0

Existuje niekoľko spôsobov ako získať knižnicu libusb-1.0. Je možné ju skompilovať si ju (všetko potrebné už máme nainštalované) alebo si môžeme skompilovať niektorú z odnoží projektu (napríklad libusbx). Avšak najjednoduchší spôsob je použiť predkompilované knižnice z projektu libusbx:

  • Knižnice stiaheme zo stránky http://libusbx.org/ a rozbalíme ich
  • obsah podadresára include skopírujeme do adresára C:\MinGW\include a adresár libusbx-1.0 v ňom obsiahnutý premenujeme na libusb-1.0
  • obsah podadresára MinGW32\static skopírujeme do adresára C:\MinGW\lib

Windows – kompilácia OpenOCD

Celá kompilácia prebehne v prostredí MSYS. Postup a priebeh kompilácie je prakticky zhodný ako v prípade Linuxu, s malými odchýlkami, preto nebudeme detailne popisovať každý krok.

Najprv spustíme MinGW shell a v ňom naklonujeme a zaplátame OpenOCD:

git clone git://git.code.sf.net/p/openocd/code
mv code openocd ; cd openocd
git fetch http://openocd.zylin.com/openocd refs/changes/22/922/14 && git checkout FETCH_HEAD

Potom spustíme kompiláciu. Prefix nezadávame, keďže výsledný program budeme inštalovať ručne. Parameter --disable-werror je nutný, aby kompilácia nezlyhala na niekoľkých nepodstatných varovaniach.

./bootstrap
./configure --enable-maintainer-mode --enable-jlink --enable-stlink --enable-ti-icdi --disable-werror
make

Výsledný program a skripty nainštalujeme ručne: do adresára podľa vlastného výberu skopírujeme:

  • súbor openocd\src\openocd.exe
  • celý obsah adresára openocd\tcl, vrátane všetkých podadresárov

Cesty sú relatívne k MSYS domovskému adresáru C:\MinGW\msys\1.0\home\meno_uzivatela.

Windows – inštalácia ovládačov

Predtým, ako spustíme OpenOCD potrebujeme nainštalovať ovládače kompatibilné s libusb 1.0 – ovládače WinUSB. Najjednoduchším riešením je použiť nástroj Zadig, ktorý je súčasťou projektu libwdi. Zadig môžeme stiahnuť zo stránok SourceForge.

Po pripojení Stellaris LaunchPadu a spustení programu by sa nám mali v zozname zariadení objaviť tri položky “In-Circuit Debug Interface…“. Ak ich tam nenájdeme, je pravdepodobné, že nejaké ovládače už sú nainštalované. V tom prípade v menu Options aktivujeme položku List all devices a ovládače preinštalujeme. Ovládače nainštalujeme tak, že pre každú položku “In-Circuit Debug Interface…” zvolíme ovládač WinUSB a stlačíme tlačítko “Install Driver” alebo “Reinstall driver“.

Po úspešnom nainštalovaní ovládačov by sa mali v správcovi zariadení objaviť tri položky, ako na obrázku vpravo.

Teraz môžeme OpenOCD spustiť. Ak dostaneme výsledok podľa nasledovného obrázku, tak sa nám všetko podarilo.

A ak nám ICDI nevyhovuje …

…tak môžeme použiť svoj obľúbený adaptér. Na stránkach TI je popísaný postup, ako vyradiť zabudovaný ICDI a pripojiť iný adaptér. Asi takto:



Potom stačí vytvoriť konfiguráciu našej dosky bez ICDI s obsahom:

set WORKAREASIZE 0x8000
set CHIPNAME lm4f120h5qr
source [find target/stellaris.cfg]

a našu aplikáciu pre Stellaris LaunchPad môžeme začať ladiť.

1 856 zobrazení