Stellaris Launchpadin virittäminen Arch Linuxissa Eclipseen

Kuriiri toi tänään Stellariksen kotiin. Pakkohan sitä oli kokeilla ja lyödä kehitysympäristö tulille. Kokeilin ensin laiskassa winkkariläppärissä käynnistää Eclipseä ja tuntui liian hitaalta minun makuuni.

Tässä artikkelissa käydään läpi asennus puhtaalta juuri asennetulla virtuaalikoneella.

[b]

  • Käyttöjärjestelmän asentaminen ja ohjelmat siihen
  • Toolchain ja flashille ohjelmointi
  • OpenOCD eli debuggausyhteys
  • Eclipse
  • Muita ajatuksia
    [/b]

Jokunen ARM ohje on jo kerrottu, mutta kerrotaan nyt ohjeet Arch Linuxille ja Stellarikselle.

Lähteinä olen käyttänyt paljon hackaday.com sivustoa ja kernelhacks.blogspot.com erinomaista kolmiosaista ohjetta, sekä stellaristi.com sivustoa.

Käytössä on Xzibitmäisesti Arch Linux Ach Linuxissa, jotta voin käyttää Arch Linuxia kun käytän Arch Linuxia. Tässä on kuvattu myös pienen virtuaalikoneen rakentaminen, mutta monilta osin tämä kävisi puhtaallekin raudalle.

[size=150]Käyttöjärjestelmän asentaminen ja ohjelmat siihen[/size]

Yritin ensin saada graafisella QtEmulla virtuaalikonetta pystyyn, mutta epäonnistuin. Siksi minulla oli 6 gigatavun kovalevykuva valmiina. Käynnistin asennuksen komennolla

qemu-system-x86_64 -cdrom ../archlinux-2012.12.01-dual.iso Linux.img

Jos asennus olisi voinut mennä hakkaamalla enteriä olisi se tehty niin. Ainoa merkittävä asia oli, että asensin [code]

pacstrap /mnt base base-devel

[/code] myös base-develin. Asennusohje löytyy https://wiki.archlinux.org/index.php/Installation_Guide Aivan suorilta ei kannata rynnätä poistamaan olemassa olevaa järjestelmää vaan lukea wiki.archlinuxista löytyvä Beginner’s guide myös läpi.

Käyttäjäksi lisäsin käyttäjätunnuksen launchpad ja extraryhmiin laitoin uucp, koska stellariksen koneeseen kytkettäessä näkyy /dev/ttyACM0. Kuitenkaan sitä ei kaiketi käytetä.

Jotta OpenOCD:ta voisi ajaa tavallisena käyttäjänä, tulee luoda udeville sopiva sääntö.

/etc/udev/rules.d/99-stellaris-launchpad.rules

ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", GROUP="users", MODE="0660"

Tämä sääntö käskee laittaamaan ATTRS ehtojen täyttämän laitteen omistajaryhmäksi users ja oikeudet rw-rw----, eli omistaja (root) ja users ryhmään kuuluvat käyttäjät voivat lukea ja kirjoittaa siihen.

Kohta reboot asennusmanuaalissa on sitten shutdown -h now ja tämän jälkeen käynnistetään järjestelmä komennolla

qemu-system-x86_64 -m 2G -usbdevice host:1cbe:00fd Linux.img

Uudeleenkäynnistyksen jälkeen asennetaan hieman lisää softaa.

# pacman -S xorg-server xorg-xinit xorg-server-utils xf86-video-modesetting 
# pacman -S xterm lxde firefox epdfview
# systemctl enable lxdm

Ensin asennettiin grafiikka, sitten käyttöympäristö ja kaksi tärkeää ohjelmaa. Lopuksi asetettiin järjestelmä käynnistymään graaffiseen tilaan.

Ennen graaffiseen tilaan siirtymistä käyttäjän kannattaa tehdä pieni temppu jolla saa työpöydän hieman mukavammaksi. Pieni huomautus: $ rivin alussa vihjaa käyttäjän ajamaa komentoa ja # rootin. Esimerkiksi [launchpad@stellaris ~]$

$ mkdir -p ~/.config/openbox
$ cp /etc/xdg/openbox/menu.xml /etc/xdg/openbox/rc.xml /etc/xdg/openbox/autostart ~/.config/openbox

Tässä vaiheessa kannattaa käynnistää uudelleen. Pitäisi tulla graafinen logini eteen. shutdown -r now on se komento

Kehitysympäristön luontiin tarvitaan kaksi terminaalia. Ne saadaan käynnistettyä vasemmaisimman alakulman kuvakkeen kautta (juuri sieltä missä Windowsissa ennen oli Start!) apuohjelmat ja LXterminal.

Toisessa terminaalissa ollaan roottina toisessa käyttäjänä.

$ su
# pacman -S git wget unzip
# pacman -S libftdi tcl

Ensin su komennolla rootiksi. Tämän jälkeen asennetaan paketit lähdekoodien hakemiseen.
Toisella pacman komennolla asennetaan openocd:n riippuvuudet.

[size=150]Toolchain ja flashille ohjelmointi[/size]

Perustarpeet ovat toolchain jolla voi luoda konekielistä dataa mikrokontrollerille ja jokin tapa toimittaa ne perille. Ensimmäisen ratkaisee GCC ja toisen LM4Flash.

$ wget https://aur.archlinux.org/packages/lm/lm4flash-git/lm4flash-git.tar.gz
$ tar zxf lm4flash-git.tar.gz
$ cd lm4flash-git
$ makepkg
$ cd ..
$ wget https://aur.archlinux.org/packages/cr/cross-arm-none-eabi-gcc/cross-arm-none-eabi-gcc.tar.gz 
$ wget https://aur.archlinux.org/packages/cr/cross-arm-none-eabi-binutils/cross-arm-none-eabi-binutils.tar.gz 
$ wget https://aur.archlinux.org/packages/cr/cross-arm-none-eabi-gdb/cross-arm-none-eabi-gdb.tar.gz
$ tar zxf cross-arm-none-eabi-binutils.tar.gz 
$ cd cross-arm-none-eabi-binutils
$ makepkg
$ cd ..

Nyt on noudettu tarvittavat pakettien kääntöohjeet ja luotu binutilsit paketiksi. Seuraavaksi se asennetaan roottina olevassa terminaalissa, koska sitä tarvitaan seuraavan paketin luonnissa.

# pacman -U /home/launchpad/cross-arm-none-eabi-binutils/cross-arm-none-eabi-binutils-2.23.1-1-*.pkg.tar.xz

Tämän jälkeen käännetään GCC ARMille ja luodaan paketti. Hyvin samanlainen prosessi kuin binutilsi

$ tar zxf cross-arm-none-eabi-gcc.tar.gz 
$ cd cross-arm-none-eabi-gcc
$ makepkg
$ cd ..
$ tar zxf cross-arm-none-eabi-gdb.tar.gz 
$ cd cross-arm-none-eabi-gdb
$ makepkg
$ cd ..

GCC:n makepkg:n sanottuani menin nukkumaan. Aamulla vielä ATK raksutteli eteenpäin GCC:n käännöstä. 16 tuntia siinä meni reppanalla virtuaalikoneella. Viimeiseksi haetaan OpenOCD:n PKGBUILD tiedosto openocd hakemistoon. Valitsin paketiksi helpoiten löytyneen git paketin.

Ajan voisi tietenkin käyttää hyödyksi ja surffailla. Firefoxi, joka löytyy alapalkista, tulille ja kohti TI:n webbisaittia hakemaan stallarisware. Ja sitten voi nauraa Fingerporille ja lukea mailit ja ja ja.

Sitten kun GCC ja gdb on paketoitu niin asennetaan ne. Roottina komennetaan

# pacman -U /home/launchpad/cross-arm-none-eabi-gcc/cross-arm-none-eabi-gcc-4.7.2*.pkg.tar.xz
# pacman -U /home/launchpad/cross-arm-none-eabi-gdb/cross-arm-none-eabi-gdb-7.5*.pkg.tar.xz
# pacman -U /home/launchpad/lm4flash-git/lm4flash-git-*pkg.tar.xz

Nyt pitäisi olla valmiina kääntämiseen ja flashaamiseen vaaditut työkalut. GDB on vielä hieman orpo palikka, mutta se tulee muuttumaan.

[size=150]OpenOCD eli debuggausyhteys[/size]

Seuraaksi tehdäänkin jotain vähän hankalampaa. Jotta kehitysympäristö olisi näppärä, rakennetaan OpenOCD tukemaan TI:n ICDI protokollaa. Tämä on väliaikainen ratkaisu ja tuki ilmestyy OpenOCD:n natiiviksi. Toistaiseksi täytyy siis pätsäillä se itse. Ohjeet varastin:
http://scompoprojects.wordpress.com/2012/11/07/debugging-a-program-on-the-stellaris-launchpad-board/

Ensin tehdään pieni paikkaustiedosto icdi.patch itse paketin luomista varten. Lähdekoodeja haettaessa ne pätsätään automaattisesti.

--- PKGBUILD	2012-10-27 19:55:26.000000000 +0300
+++ PKGBUILD.2	2012-12-06 20:27:53.674619165 +0200
@@ -1,7 +1,7 @@
 # Maintainer: Nick Østergaard <oe.nick at gmail dot com>
 
 pkgname=openocd-git-libftdi
-pkgver=20121019
+pkgver=20121206
 pkgrel=1
 pkgdesc="Debugging, in-system programming and boundary-scan testing for embedded target devices -using libftdi instead of ftd2xx"
 arch=('i686' 'x86_64')
@@ -29,6 +29,9 @@
     cd $srcdir/$pkgname-$pkgver
   fi
 
+  msg "Pulling ICDI patches"
+  git fetch http://openocd.zylin.com/openocd refs/changes/22/922/10 && git checkout FETCH_HEAD || return 1
+
   msg "GIT checkout done or server timeout"
 
   #
@@ -57,7 +60,8 @@
 	--enable-arm-jtag-ew \
 	--enable-buspirate \
 	--enable-usb_blaster_libftdi \
-	--enable-osbdm
+	--enable-osbdm \
+	--enable-ti-icdi
 
   make
   make DESTDIR=${pkgdir}/ install 

Tämän jälkeen asennetaan äsken esitelty icdi.patch paikka tuohon ladattavaan PKGBUILD tiedostoon ja luodaan paketti. Jos kurkit PKGBUILD tiedostoon ja tiedät ettet tarvitse jotain tiettyä ominaisuutta, niin voit editoida sen pois.

$ mkdir openocd
$ cd openocd
$ wget https://aur.archlinux.org/packages/op/openocd-git-libftdi/PKGBUILD
$ patch <icdi.patch
$ makepkg
$ cd ..
$ wget http://pastebin.com/download.php?i=qXxeYsVx -O .launchpad-stellaris-openocd.cfg

Viimeinen wget oli openocd:n konfiguraatiotiedosto. Sen on kirjoittanut Rickta59 stellaristi.com foorumilla. Linkki löytyi kernelhackista.

[size=150]Eclipse[/size]

Tämän jälkeen asennetaan openocd järjestelmään ja heitetään vaikka Eclipse kaveriksi

# pacman -U /home/launchpad/openocd/openocd/openocd-git-libftdi*.pkg.tar.xz
# pacman -S eclipse eclipse-cdt

Kysyttäessä java ympäristöä niin heittää enteriä sille. Tärkeintä tuossa nyt on, että Eclipse pyörii.

Stellarisware

Jos surffailit ja latailit stellariswaren TI:n sivuilta niin nyt se voidaan purkaa käyttäjänä, rootin asennellessa Eclipseä. Rankaistaan ATK:ta oikein moniajolla.

$ mkdir stellarisware
$ cd stellarisware
$ unzip ../Downloads/SW-EK-LM4F120XL-9453.exe
$ make
$ cd ..
$ git clone https://github.com/scompo/stellaris-launchpad-template-gcc.git
$ cd stellaris-launchpad-template-gcc

Stellarisware on nyt käytössä. Stellariswaren koodi on ihan kauniilla BSD lisessillä, mutta osia siitä, kuten linkkeriskriptejä ja muita tärkeitä palasia on jollain kummallisella lisenssillä tarjolla. Lisenssin tärkein ehto lienee pitää lisenssoitu materiaali itsellään salasanan takana. Lisää tästä aiheesta, miksi tehtiin avoin versio löytyy http://scompoprojects.wordpress.com/2012/11/04/a-lot-of-stuff-learned/

Hätiin rientää Scompon GCC template, joka löytyy https://github.com/scompo/stellaris-launchpad-template-gcc ja joka haettiin kahdella edellisellä komennolla. Lisenssi on BSD ja tahtoo, että mainitaan sisältävän tuon, tee muuten mitä haluat. Ja äsköisestä suomennoksesta en ota mitään vastuuta. Jokainen lukekoon itse.

Jätä terminaali auki taustalle. Palataan tähän vielä.

Puolen gigatavun latauksen jälkeen ja hetken asennusrouskuttelun jälkeen voidaan käynnistää Eclipse alakulman häkkyrä - Ohjelmointi - Eclipse.

Seuraavaksi viritetään Eclipse toimimaan. Ohjeet löytyvät kuvineen osoitteesta:http://kernelhacks.blogspot.com/2012/11/the-complete-tutorial-for-stellaris_25.html

Workspace laitetaan minne halutaan (Kuva 1. kernelhacksin ohjeissa)

Aloitetaan luomalla uusi projekti File - New - Project (kuva 2.) ja uudessa ikkunassa C/C++ project ja nextiä alhaalta. (kuva 3.) Annetaan nimi projektille ja valitaan Executable Empty project ja toolchainiksi cross GCC. Jälleen lyödään Nextiä. (kuva 4.)

Seuraavassa ruudussa pitää olla debug ja release valittuna. Valitaan Advanced settings… (kuva 5.) ja C project wizard käynnistyy.

Vasemmasta sivupalkista valitaan C/C++ build auki ja sieltä settings. Ensimmäiseksi valitaan configuration All Configurations. Tool settings välilehdellä Cross settings osastossa kirjoitetaan arm-none-eabi- ja viimeinen on sitten viiva. Tällä kerrotaan millä nimellä tulee kutsua toolchainia, jolla käännetään ohjelmat. (kuva 6.)

Tästä siirrytään Cross GCC compilerin alla olevaan Symbols kohtaan ja lisätään kohtaan Defined symbols PART_LM4F120H5QR, ARM_MATH_CM4, TARGET_IS_BLIZZARD_RA1 joilla kerrotaan kääntäjälle prosessori ja sen ominaisuuksista. (kuva 7.) Lisääminen tapahtuu pienestä vihreästä plussasta ja ne tarvitsee yksitellen lisäillä.

Niitä käytetään siinä kohdassa, kun koodissa sanotaan #include <kaikki_mahdolliset_armi_jutut.h> ja sitten näppärät esikääntäjämakrot katselevat sieltä #ifdef ehdoilla käytetäänkö haluttua juttua. Hyvin samalla tavalla kuin jokainen otsikkotiedosto alkaa #ifndef OTSIKKO_H #define OTSIKKO_H ja loppuu #endif. Tuolla saadaan estettyä, että samaa otsikkotiedostoa ei sisällytetä kahteen kertaan.

Tämän jälkeen siirrytään kohtaan Includes ja lisätään Stellarisware siihen. Lisäämällä stellarisvare voidaan käyttää TI:n tekemää kirjastoa ohjelmissa ja kaikkea ei tarvitse itse tehdä uudelleen ja vääremmin. (kuva 8.)

GCC:n viimeisessä kohdassa Miscellaneous lisätään lippuja kääntäjälle. Niiden kahden perään lisäksi laitetaan (kuva 9.)

-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -ffunction-sections -fdata-sections

Ne voidaan vapaamielisesti kääntää suomeksi 1. Käytä thumb käskyjä 2. prosessori on Cortex-m4 3. ja 4. liukulukujen ominaisuuksia, jotka tehdään muuten sitten softalla. 5. ja 6. data ja funktiot erotetaan binäärissä, joka johtuu ihan vain ARMin arkkitehtuurista.

Seuraavaksi valitaan Cross GCC linker ja vaihdetaan gcc:n tilalle ld (kuva 10.)

Tämän jälkeen tulee antaa vähän linkkerille pureskeltavaa. Kohdassa Libraries tulee tässä ohjeessa libraries (-l) kohtaan driver-cm4f ja alempaan Library search path (-L) /home/launchpad/stellarisware/driverlib/gcc-cm4f/ Jälleen pienistä vihreistä plussista lisätään. (kuva 11.)

Vielä annetaan linkkerille ohjeita. Käsketään luoda staattinen binääri, eikä linkata dynaamisesti eli kaikki mukaan. gc-sections tiputtaa käyttämöttämät osat pois binääristä. Lopuksi tulee linkkausskripti. Lisää siis linker flagseihin --static --gc-sections -T…/LM4F.ld (kuva 12.)

Vaihdetaan välilehdelle build steps ja lisätään post-build steps komento arm-none-eabi-objcopy -O binary ${ProjName}.elf ${ProjName}.bin jolla luodaan raaka binääritiedosto elf muotoisesta tiedostosta. Raaka binääri voidaan tarjoilla lm4flashille esimerkiksi ja kirjoittaa muistiin. Description kohtaan tulee kuvaus. Siinä saa itse käyttää luovuutta. (kuva13.)

Vielä pieni muutos Build artifact välilehdellä. Lisätään .elf ${ProjName} perään, jotta siinä lukee ${ProjName}.elf. (kuva 14.) Sitten OK.

Itsellä ainakin tarvitsi painaa Next ja lisätä arm-none-eabi- Cross compiler prefix kohtaan ja vasta sitten sai painaa Finishiä. Sen jälkeen pomppasi kysely, C/C++ perspektiivistä ja sen avaamisesta. Siihen yes. Ilkeästi jätti vain javaperspektiivin näkyville, mutta sen sai myös oikeaa nappia tarjoamalla suljettua. Ja vielä möllöttelevä tervetuloa lätkä sulki Welcomen vieressä olevasta raksista.

Nyt voidaan viimeistellä GCC-template. Eli mennään käyttäjän terminaaliin, joka jäi taustalle aikaisemmin.

Käyttäjän pitäisi olla stellaris-launchpad-template-gcc hakemistossa ja sieltä löytyä tiedosto Makefile. Sitä editoidaan riviltä 46 STELLARISWARE_PATH=~/stellarisware ja seuraavaksi käännetään se ja kopioidaan tarvittavia tiedostoja Eclipselle.

$ make
$ cp LM4F.ld LM4F_startup.c main.c ../workspace/ledivilkku/

Eli kernelhacksin ohjeissa on template niminen projekti ja minulla ledivilkku. Oma workspace on ~/workspace hakemisto. Näin hakemistorakenteet siis eroavat. Kuvan 12 -T LM4F.ld sai selityksen, kun se lisättiin projektiin.

Loput http://kernelhacks.blogspot.fi/2012/11/the-complete-tutorial-for-stellaris_25.html ohjeesta, jotka käsittelevät debuggeria ovat melko ja flasheriä ova melko suoraviivaisia kopionteja kuvasta.

Haluan kuitenkin tuoda jokusen kuvakaappauksen esille kuvakaappausta, jotka eroavat alkuperäisestä ohjeesta, koska ohjelmat on oikeasti asennettu järjestelmään.
Ensin flashille kirjoitus

Sitten OpenOCD viritykseni.

Ja lopuksi vielä debuggerin asetukseni

Lisäksi ainakin debuggeri tarvitsee joka kerta uudelleen kertoa, koska muuten se voi debugata edelleen samaa ledivilkku projektia. En saanut toimimaan kauniisti eclipseä.

Jos minun säädöilläni Eclipse ulisee empty reference project_Namesta niin valitse oikealta workspace explorerista C näkymässä se projekti aktiiviseksi oikein nimen kohtaa. Eli yksi paikka vähemmän säätää, kun tekee uuden projektin, mutta käytössä pieni ikävyys. Eli käyttö on hieman ikävää, mutta varmaankin joku jossain vaiheessa tekee pluginin Stellaris Launchpadillekin.

[size=150]Muita ajatuksia[/size]

Lisäksi sivuhuomautuksena todettakoon, että ei Arch Linux oikeasti näin hankala ole. Lähes kaikki paketit olisi saanut aikaiseksi yhdellä komennolla packer -S cross-arm-none-eabi-gcc cross-arm-none-eabi-gdb OpenOCD vain tarvitsi tuon pätsäyksen. Oman uteliaisuuteni takia katselin miten kääntäjät syntyvät ja lisäksi olisi rumaa opettaa heti ihmiset kulkemaan oikopolkuja pitkin…

Arch Linux ja AUR paketit ovat ilkeitä siinä mielessä, että ne pitää kääntää ja jos alustana on reppana Atomilankku tai jotain vastaavaa, voi oikeasti mennä pitkään.

Summary in English for those who found this with search engine:
This is simple tutorial to install TI Launchpad Stellaris toolchain and debugging environment on Arch Linux. I’ve done it to fresh install under Qemu. Follow the code and you aren’t far away from success.

Mitäs mieltä olet Qemu:sta? Toimiiko paremmin kuin esim. virtualbox?

No syvältä molemmat ovat. Sitähän sä kysyit :slight_smile: Normaalisti otan yhden ATK:n läjästä ja kokeilen sillä. Nyt tarvittiin kuitenkin 64-bittinen alusta, koska paketit asensin myös työasemaani.

Pidän Qemusta enempi, koska sen hallinta komentoriviltä on mukavampaa tuollaisissa pikkusissa kokeiluissa. Lisäksi tuki kummallisille alustoille on kiva, kuten esimerkiksi Solariksen pyörittäminen virtuaali SPARCissa.

Virtualboxi taas on GUI tyyppinen härveli, jolla koneen konfiguraatio sirpaloituu ja ei jää töllisteltäväksi yhdeksi riviksi tekstiä. Mutta varmasti sillä on käyttäjänsä. Ja tiedän, että sitäkin voi ajaa komentoriviltä.

Eli paremmuus riippuu käytöstä.

Ookoo :slight_smile: Kokeilin tosiaan tota virtualboxia jokin aika sitten ja vähän ku isomman softan pisti käyntiin virtuaalijärjestelmässä niin kaatu koko virtuaalikone… Eli mietin et olisko toi qemu toimintavarmempi, mut jos molemmat on syvältä niin kai niissä suunnilleen samat ongelmat on.

Ehkäpä ongelmana olivatkin vain virheelliset asetukset? Vaikkapa dynaamisesti varattu, mutta silti maksimikooltaan liian pieni virtuaalikiintolevyosio? Silloin jumittaa kaikki ja pahasti. Oletuksena Virtualbox taitaa tarjota vain kahdeksaa gigatavua, suosittelen selvästi suurempaa osion maksimikokoa.