Forum: Mikrocontroller und Digitale Elektronik Kompilieren unter openSUSE Leap 15.0


von Lokus P. (derschatten)


Lesenswert?

Ich versuche gerade unter openSUSE Leap 15.0 AVR Source zu kompilieren.
Und erhalte folgende Fehlermeldung:
1
derschatten@linux-5at6:~/Downloads/attiny4313> make
2
DEP main.c util.c key_tap.c uart4313.c uart_helper.c
3
CC  main.c -o main.o
4
main.c:25:10: fatal error: avr/io.h: No such file or directory
5
 #include <avr/io.h>
6
          ^~~~~~~~~~
7
compilation terminated.
8
make: *** [Makefile:60: main.o] Fehler 1
9
derschatten@linux-5at6:~/Downloads/attiny4313>

avr-libc
cross-avr-gcc7
gcc
gcc7


ist alles installiert.
Was fehlt mir da noch?


Unter Windows verwende ich den WinAVR, da läuft das problemlos.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Lokus P. schrieb:
> Was fehlt mir da noch?

Der richtige Include-Pfad.

Das ist die GCC-Kommandozeilenoption -I

von gauna (Gast)


Lesenswert?

Bei mir installiert ist unter 15.0:

cross-avr-binutils
cross-avr-gcc8
cross-avr-gdb
avr-libc

Ich meine mich zu entsinnen, dass ich es mit cross-avr-gcc7 auch nicht 
zum laufen gebracht habe. Mit V8 war es dann kein Problem.

von Lokus P. (derschatten)


Lesenswert?

cross-avr-gcc8 bekomme ich gar nicht angeboten.
Benötige ich da eine spezielle Installationsquelle?

von gauna (Gast)


Lesenswert?

Ich denke. Such einfach danach auf software.opensuse.org Das Repo heißt 
Cross:Avr oder so ähnlich

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Zeige mal dein Makefile. In meinem steht dies drin:
1
# Binaries to be used
2
# You may add the path to them if they are not in the PATH variable.
3
CC       = avr-gcc
4
OBJCOPY  = avr-objcopy
5
OBJDUMP  = avr-objdump
6
AVRDUDE  = avrdude
7
AVR_SIZE = avr-size

von Lokus P. (derschatten)


Lesenswert?

1
# Source files 
2
TARGET   = main
3
SOURCES  = main.c util.c key_tap.c uart4313.c uart_helper.c
4
5
# Target MCU & fuses
6
MCU  = attiny4313
7
F_CPU  = 8000000UL
8
LFUSE  = 0xD4
9
HFUSE  = 0xDB
10
EFUSE   = 0xFF
11
12
# Compiler configuration
13
CC     = avr-gcc 
14
OPT    = s
15
16
CFLAGS = -Wall -DF_CPU=$(F_CPU) -O$(OPT)
17
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -feliminate-unused-debug-types -ffunction-sections
18
CFLAGS += -Wa,-adhlns=$(<:.c=.s)
19
20
ALL_CFLAGS = -mmcu=$(MCU)  $(CFLAGS)
21
22
LDFLAGS    = -s -Wl,-Map=$(TARGET).map,--cref,--gc-sections,--relax
23
24
# Avrdude configuration
25
AVRDUDE_PROG  = usbasp
26
AVRDUDE_FLAGS   = -y -p $(MCU) -c $(AVRDUDE_PROG)
27
28
AVRDUDE_WRITE_FLASH  = -U flash:w:$(TARGET).hex
29
AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
30
31
# Other tools
32
OBJCOPY = avr-objcopy
33
SIZE  = avr-size
34
AVRDUDE  = avrdude
35
36
# Targets
37
.PHONY: all
38
all: depend hex eeprom size
39
40
.PHONY: hex
41
hex: $(TARGET).hex
42
43
.PHONY: eeprom
44
eeprom: $(TARGET).eep
45
46
OBJECTS  = $(SOURCES:.c=.o)
47
ASM = $(SOURCES:.c=.s)
48
49
$(TARGET).elf: $(OBJECTS)
50
  @echo "LD  $(OBJECTS)";\
51
  $(CC) $(ALL_CFLAGS) $(OBJECTS) --output $@ $(LDFLAGS)
52
53
$(TARGET).hex: $(TARGET).elf
54
  $(OBJCOPY) -O ihex -R .eeprom $< $@
55
56
$(TARGET).eep: $(TARGET).elf
57
  -$(OBJCOPY) -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" \
58
  --change-section-lma .eeprom=0 $< $@
59
%.o : %.c
60
  @echo "CC  $< -o $@";\
61
  $(CC) -c $(ALL_CFLAGS) $< -o $@
62
63
# Programming with avrdude
64
65
.PHONY: program
66
program: $(TARGET).hex $(TARGET).eep
67
  $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
68
69
.PHONY: fuses
70
fuses: lfuse hfuse efuse
71
.PHONY: lfuse
72
lfuse:
73
  $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U lfuse:w:$(LFUSE):m
74
.PHONY: hfuse
75
hfuse:
76
  $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U hfuse:w:$(HFUSE):m
77
.PHONY: efuse
78
efuse:
79
  $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U efuse:w:$(EFUSE):m
80
.PHONY: reset
81
reset:
82
  $(AVRDUDE) $(AVRDUDE_FLAGS) -i 10 -U lfuse:r:/dev/null:m
83
84
# Clean
85
.PHONY: clean
86
clean:
87
  rm -f $(TARGET).hex $(TARGET).eep $(TARGET).elf $(TARTGET).map
88
  rm -f $(OBJECTS)
89
  rm -f $(ASM)
90
91
# Display Size
92
.PHONY: size
93
size: $(TARGET).elf
94
  @echo -n "SIZE "; $(SIZE) -A $(TARGET).elf
95
96
# Display flags
97
.PHONY: cflags
98
cflags:
99
  @echo CFLAGS=$(CFLAGS)
100
.PHONY: ldflags
101
ldflags:
102
  @echo LDFLAGS=$(LDFLAGS)
103
.PHONY: all_cflags
104
all_cflags:
105
  @echo ALL_CFLAGS=$(ALL_CFLAGS)
106
107
# dependeny 
108
.PHONY: depend
109
depend:
110
  @echo "DEP $(SOURCES)"; $(CC) $(ALL_CFLAGS) -MM $(SOURCES) > .depend
111
112
ifeq (.depend,$(wildcard .depend)) 
113
include .depend
114
endif

von Stefan F. (Gast)


Lesenswert?

CC ist gesetzt, also kann es wohl nicht daran liegen, dass der falsche 
Compiler aufgerufen wird. Das war meine erste Vermutung.

Es scheint dann wohl eher am Include-Pfad zu hängen. Bei mir (Debian) 
liegen sie in /usr/lib/avr.

Vegleiche mal deinen Pfad mit der Ausgabe von
1
avr-gcc --print-search-dirs

Falls sie nicht überein stimmen, kannst du das vielleicht elegant mit 
einem Symlink (Befehl mklink) lösen. Dann musst du nicht alle Makefiles 
ändern.

von gauna (Gast)


Lesenswert?

Eben. Beim gcc7 stimmen die Pfade nicht zusammen. Nimm einfach das gcc8 
Package. Da passt alles zusammen.

von Lokus P. (derschatten)


Lesenswert?

Danke!
cross-avr-gcc8 installiert.
Bin schon ein Stück weiter. Trotzdem zickt das Teil noch rum.

Was ist da wieder faul?
Die Pakete von dir oben sind alle installiert.
1
derschatten@linux-5at6:~/Downloads/attiny4313> make
2
DEP main.c util.c key_tap.c uart4313.c uart_helper.c
3
CC  main.c -o main.o
4
CC  util.c -o util.o
5
CC  key_tap.c -o key_tap.o
6
CC  uart4313.c -o uart4313.o
7
CC  uart_helper.c -o uart_helper.o
8
LD  main.o util.o key_tap.o uart4313.o uart_helper.o
9
/usr/lib64/gcc/avr/8/ld: warning: -z relro ignored
10
/usr/lib64/gcc/avr/8/ld: main.o: in function `parse':
11
main.c:(.text.parse+0x1e): undefined reference to `uart_print_help'
12
/usr/lib64/gcc/avr/8/ld: main.c:(.text.parse+0x6a): undefined reference to `uart_print_err'
13
/usr/lib64/gcc/avr/8/ld: main.o: in function `main':
14
main.c:(.text.startup.main+0x6): undefined reference to `init'
15
collect2: error: ld returned 1 exit status
16
make: *** [Makefile:50: main.elf] Fehler 1

von gauna (Gast)


Lesenswert?

Da müsstest du schon den Code zur Verfügung stellen.

von Hau Wech (Gast)


Lesenswert?

1
 # make -L/usr/lib/avr -L/lib64 -l/lib/avr/some_avr.lib.so -I/usr/include/avr

Man kann mit den Compiler - Flags :  -D, -I ( include )
und den Linker - Flags : -L, -l ( lib )

die beiden Kompiler und Linker auf die richtigen Pfade der benötigten 
Dateien hinweisen .

Auch
1
 # export LIBS='-L/avr -L/lib256' 
2
 # make

von Hau Wech (Gast)


Lesenswert?

Mit Linker Flags muß man sich auseinandersetzen :
https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

Du hast folgende VARIABLEN im Makefile ,
welcher bei manuellen Eintragsveränderungen die TABS beim
abspeichern bewahren muß :

Linker :
1
LDFLAGS    = -s -Wl,-Map=$(TARGET).map,--cref,--gc-sections,--relax

Und diese Line könnte so aussehen :
1
LDFLAGS    = -s -Wl,-Map=$(TARGET).map,--cref,--gc-sections,--relax -L/pfad/zur/mappe/wo/bibliothek/drin/installiert/ist


Compiler :
1
CFLAGS = -Wall -DF_CPU=$(F_CPU) -O$(OPT)
2
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -feliminate-unused-debug-types -ffunction-sections
3
CFLAGS += -Wa,-adhlns=$(<:.c=.s)

Und an diese Compiler - Flags - Variable könnte angehängt werden :
1
CFLAGS = -Wall -DF_CPU=$(F_CPU) -O$(OPT)
2
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -feliminate-unused-debug-types -ffunction-sections
3
CFLAGS += -Wa,-adhlns=$(<:.c=.s)
4
CFLAGS += -I/pfad/wo/avr/headers/directory

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.