Tux fliegt zu den Sternen

Aus BraLUG-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(arm-none-eabi-gcc auf Basis einer Energia-Installation)
(arm-none-eabi-gcc auf Basis einer Energia-Installation)
Zeile 13: Zeile 13:
 
Möchte man sich nicht gleich am Anfang mit der Installation/Konfiguration einer entsprechenden gcc-Umgebung herumschlagen, reicht für erste Experimente [http://energia.nu/ Energia] aus. Das entsprechende Dowload-Paket enthält alle notwendigen Komponenten zum Übersetzen von eigenen Programmen und deren Übertragung auf das Launchpad. Die Archivdatei wird einfach in ein Verzeichnis entpackt und dann kann es sofort (zumindestens bei der aktuellen Version 0101E0010) losgehen. Viele der mitgelieferten Beispiele funktionieren, nach Auswahl des richtigen Boards unter dem Menüpunkt "Tools" → "Boards", problemlos.
 
Möchte man sich nicht gleich am Anfang mit der Installation/Konfiguration einer entsprechenden gcc-Umgebung herumschlagen, reicht für erste Experimente [http://energia.nu/ Energia] aus. Das entsprechende Dowload-Paket enthält alle notwendigen Komponenten zum Übersetzen von eigenen Programmen und deren Übertragung auf das Launchpad. Die Archivdatei wird einfach in ein Verzeichnis entpackt und dann kann es sofort (zumindestens bei der aktuellen Version 0101E0010) losgehen. Viele der mitgelieferten Beispiele funktionieren, nach Auswahl des richtigen Boards unter dem Menüpunkt "Tools" → "Boards", problemlos.
  
==arm-none-eabi-gcc auf Basis einer Energia-Installation==
+
==Kommandozeilen-Toolchain auf Basis einer Energia-Installation==
 
+
Ist schon eine funktionierende Energia-Installation auf seinem Rechner vorhanden, braucht man eigentlich nicht noch einen Compiler zu installieren, unterlagert werkelt dort schon ein arm-none-eabi-gcc. Es reicht also den Pfad zu den Binaries des Compilers mit in die PATH-Variable aufzunehmen, also z.B. die Datei .bashrc im eigenen Homeverzeichnis zu erweitern:
Wenn man schon funktionierende Energia-Installation auf seinem Rechner hat, braucht man eigentlich nicht noch einen Compiler installieren, unterlagert werkelt dort schon ein arm-none-eabi-gcc. Es reicht also den Pfad zu den Binaress des Compilers mit in die PATH-Variable aufzunehmen, also z.B. die Datei .bashrc im eigenen Homeverzeichnis zu erweitern:
+
 
<pre>
 
<pre>
 
# Cross-Compiler-Umgebung fuer Stellaris Launchpad
 
# Cross-Compiler-Umgebung fuer Stellaris Launchpad
 
export PATH=$PATH:$HOME/energia/hardware/tools/lm4f/bin
 
export PATH=$PATH:$HOME/energia/hardware/tools/lm4f/bin
 +
</pre>
 +
 +
Will man das Rad nicht ständig neu erfinden, sollte man die frei erhältliche [[http://www.ti.com/tool/sw-ek-lm4f120xl StellarisWare] von TI installieren. Das heruntergeladene Archivfile entpackt man dazu in ein beliebiges Verzeichnis auf seinem Rechner und führt dort das Makefile aus:
 +
<pre>
 +
$ make
 +
</pre>
 +
 +
 +
Hier ein entsprechendes Makefile, mit dem man dann seine eigenen Programme generieren und auf die MCU flashen kann:
 +
<pre>
 +
TARGET = main
 +
 +
STELLARISWARE = ~/work/stellaris/stellarisware
 +
SRC = $(wildcard *.c)
 +
TOOLCHAIN = arm-none-eabi
 +
PART = LM4F120H5QR
 +
CPU = cortex-m4
 +
FPU = fpv4-sp-d16
 +
FABI = softfp
 +
 +
LINKER_FILE = $(STELLARISWARE)/boards/ek-lm4f120xl/hello/hello.ld
 +
SRC += $(STELLARISWARE)/boards/ek-lm4f120xl/hello/startup_gcc.c
 +
 +
CC = $(TOOLCHAIN)-gcc
 +
LD = $(TOOLCHAIN)-ld
 +
CP = $(TOOLCHAIN)-objcopy
 +
OD = $(TOOLCHAIN)-objdump
 +
SZ = $(TOOLCHAIN)-size
 +
 +
CFLAGS = -mthumb -mcpu=$(CPU) -mfpu=$(FPU) -mfloat-abi=$(FABI)
 +
CFLAGS+= -Os -ffunction-sections -fdata-sections
 +
CFLAGS+= -MD -std=c99 -Wall -pedantic
 +
CFLAGS+= -DPART_$(PART) -c -DTARGET_IS_BLIZZARD_RA1
 +
CFLAGS+= -g
 +
CFLAGS+= -I $(STELLARISWARE)
 +
 +
LIB_GCC_PATH=$(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
 +
LIBC_PATH=$(shell $(CC) $(CFLAGS) -print-file-name=libc.a)
 +
LIBM_PATH=$(shell $(CC) $(CFLAGS) -print-file-name=libm.a)
 +
LFLAGS = --gc-sections --entry ResetISR
 +
CPFLAGS = -Obinary
 +
 +
ODFLAGS = -S
 +
 +
FLASHER=lm4flash
 +
FLASHER_FLAGS=-v
 +
 +
OBJS = $(SRC:.c=.o)
 +
 +
all: $(OBJS) $(TARGET).axf $(TARGET)
 +
 +
%.o: %.c
 +
$(CC) -c $(CFLAGS) $< -o $@
 +
 +
$(TARGET).axf: $(OBJS)
 +
$(LD) -T $(LINKER_FILE) $(LFLAGS) -o $(TARGET).axf $(OBJS) $(LIBM_PATH) $(LIBC_PATH) $(LIB_GCC_PATH)
 +
 +
$(TARGET): $(TARGET).axf
 +
$(CP) $(CPFLAGS) $(TARGET).axf $(TARGET).bin
 +
$(OD) $(ODFLAGS) $(TARGET).axf > $(TARGET).lst
 +
@echo
 +
$(SZ) $(TARGET).o
 +
 +
 +
flash: $(TARGET)
 +
$(FLASHER) $(TARGET).bin $(FLASHER_FLAGS)
 +
 +
clean:
 +
rm *.o *.d *.bin *.lst *.axf
 
</pre>
 
</pre>
  

Version vom 19. Oktober 2013, 11:55 Uhr


Derzeit noch Baustelle...!

Inhaltsverzeichnis

Motivation

Stellaris Launchpad

Herstellerseite...

Toolchain

Energia

Möchte man sich nicht gleich am Anfang mit der Installation/Konfiguration einer entsprechenden gcc-Umgebung herumschlagen, reicht für erste Experimente Energia aus. Das entsprechende Dowload-Paket enthält alle notwendigen Komponenten zum Übersetzen von eigenen Programmen und deren Übertragung auf das Launchpad. Die Archivdatei wird einfach in ein Verzeichnis entpackt und dann kann es sofort (zumindestens bei der aktuellen Version 0101E0010) losgehen. Viele der mitgelieferten Beispiele funktionieren, nach Auswahl des richtigen Boards unter dem Menüpunkt "Tools" → "Boards", problemlos.

Kommandozeilen-Toolchain auf Basis einer Energia-Installation

Ist schon eine funktionierende Energia-Installation auf seinem Rechner vorhanden, braucht man eigentlich nicht noch einen Compiler zu installieren, unterlagert werkelt dort schon ein arm-none-eabi-gcc. Es reicht also den Pfad zu den Binaries des Compilers mit in die PATH-Variable aufzunehmen, also z.B. die Datei .bashrc im eigenen Homeverzeichnis zu erweitern:

# Cross-Compiler-Umgebung fuer Stellaris Launchpad
export PATH=$PATH:$HOME/energia/hardware/tools/lm4f/bin

Will man das Rad nicht ständig neu erfinden, sollte man die frei erhältliche [StellarisWare von TI installieren. Das heruntergeladene Archivfile entpackt man dazu in ein beliebiges Verzeichnis auf seinem Rechner und führt dort das Makefile aus:

$ make


Hier ein entsprechendes Makefile, mit dem man dann seine eigenen Programme generieren und auf die MCU flashen kann:

TARGET = main

STELLARISWARE = ~/work/stellaris/stellarisware
SRC = $(wildcard *.c)
TOOLCHAIN = arm-none-eabi
PART = LM4F120H5QR
CPU = cortex-m4
FPU = fpv4-sp-d16
FABI = softfp

LINKER_FILE = $(STELLARISWARE)/boards/ek-lm4f120xl/hello/hello.ld
SRC += $(STELLARISWARE)/boards/ek-lm4f120xl/hello/startup_gcc.c

CC = $(TOOLCHAIN)-gcc
LD = $(TOOLCHAIN)-ld
CP = $(TOOLCHAIN)-objcopy
OD = $(TOOLCHAIN)-objdump
SZ = $(TOOLCHAIN)-size

CFLAGS = -mthumb -mcpu=$(CPU) -mfpu=$(FPU) -mfloat-abi=$(FABI)
CFLAGS+= -Os -ffunction-sections -fdata-sections
CFLAGS+= -MD -std=c99 -Wall -pedantic
CFLAGS+= -DPART_$(PART) -c -DTARGET_IS_BLIZZARD_RA1
CFLAGS+= -g
CFLAGS+= -I $(STELLARISWARE)

LIB_GCC_PATH=$(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
LIBC_PATH=$(shell $(CC) $(CFLAGS) -print-file-name=libc.a)
LIBM_PATH=$(shell $(CC) $(CFLAGS) -print-file-name=libm.a)
LFLAGS = --gc-sections --entry ResetISR
CPFLAGS = -Obinary

ODFLAGS = -S

FLASHER=lm4flash
FLASHER_FLAGS=-v

OBJS = $(SRC:.c=.o)

all: $(OBJS) $(TARGET).axf $(TARGET)

%.o: %.c
	$(CC) -c $(CFLAGS) $< -o $@

$(TARGET).axf: $(OBJS)
	$(LD) -T $(LINKER_FILE) $(LFLAGS) -o $(TARGET).axf $(OBJS) $(LIBM_PATH) $(LIBC_PATH) $(LIB_GCC_PATH)

$(TARGET): $(TARGET).axf
	$(CP) $(CPFLAGS) $(TARGET).axf $(TARGET).bin
	$(OD) $(ODFLAGS) $(TARGET).axf > $(TARGET).lst
	@echo
	$(SZ) $(TARGET).o
	

flash: $(TARGET)
	$(FLASHER) $(TARGET).bin $(FLASHER_FLAGS)

clean:
	rm *.o *.d *.bin *.lst *.axf

Tipps und Tricks

Zugriff auf /dev/ttyACMx als Nicht-root-Benutzer

Über /dev/ttyACMx (siehe dsmeg-Meldungen nach Einstöpseln des Launchpads) erfolgt die Kommunikation zwischen Linux-PC und Launchpad. Gibt es keine entsprechende udev-Regel, kann nur root auf diese Schnittstelle zugreifen. Also macht sich eine entsprechende Konfiguration für Nicht-Root-User ganz sinnvoll:

Erzeugung der Datei /etc/udev/rules.d/61-stellaris.rules mit folgendem Inhalt:

# Zugriff auf TIs Stellaris-Launchpad regeln
#
SUBSYSTEM=="usb",ATTRS{idVendor}=="1cbe",ATTRS{idP roduct}=="00fd",MODE="0666"
KERNEL=="ttyACM0",ATTRS{idVendor}=="1cbe",ATTRS{id Product}=="00fd",MODE="0666"

Nach dem Restart von udev (Befehl: /etc/init.d/udev restart) kann man auch als Nicht-root zugreifen.

Weiterführende Links

Linux-Toolchain:

Makefile-Templates:

Unsortiert:

Kontakt

Uwe

'Persönliche Werkzeuge