#1 20.05.2018 12:43:25

sanni
Mitglied

Makefile funktioniert nicht [gelöst]

Hallo Ihrs,

seit dem Update des gcc auf Version 8 kann ich ein Kernelmodul nicht mehr übersetzen.  Dazu ist das Makefile hier enthalten:

# SPDX-License-Identifier: GPL-2.0
SHELL := /bin/sh
CC = gcc
KVER  := $(shell uname -r)
#KVER  :=
KSRC := /lib/modules/$(KVER)/build
#KSRC := /work/linux-src/linux-stable
FIRMWAREDIR := /lib/firmware/
PWD := $(shell pwd)
CLR_MODULE_FILES := *.mod.c *.mod *.o .*.cmd *.ko *~ .tmp_versions* modules.order Module.symvers
SYMBOL_FILE := Module.symvers
# Handle the move of the entire rtlwifi tree
ifneq ("","$(wildcard /lib/modules/$(KVER)/kernel/drivers/net/wireless/realtek)")
MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/realtek/rtlwifi
else
MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/rtlwifi
endif

#Handle the compression option for modules in 3.18+
ifneq ("","$(wildcard $(MODDESTDIR)/*.ko.gz)")
COMPRESS_GZIP := y
endif
ifneq ("","$(wildcard $(MODDESTDIR)/*.ko.xz)")
COMPRESS_XZ := y
endif

ccflags-y += -O2

obj-m		+= rtlwifi.o
rtlwifi-objs	:=		\
		base.o		\
		cam.o		\
		core.o		\
		debug.o		\
		efuse.o		\
		ps.o		\
		rc.o		\
		regd.o		\
		stats.o

rtl8192c_common-objs +=		\

obj-m				+= rtl_pci.o
rtl_pci-objs	:=		pci.o

obj-m				+= rtl_usb.o
rtl_usb-objs	:=		usb.o

obj-m				+= rtl8192c/
obj-m				+= rtl8192ce/
obj-m				+= rtl8192cu/
obj-m				+= rtl8192se/
obj-m				+= rtl8192de/
obj-m				+= rtl8723ae/
obj-m				+= rtl8723be/
obj-m				+= rtl8723de/
obj-m				+= rtl8188ee/
obj-m				+= btcoexist/
obj-m				+= halmac/
obj-m				+= phydm/
obj-m				+= rtl8723com/
obj-m				+= rtl8821ae/
obj-m				+= rtl8822be/
obj-m				+= rtl8192ee/

ccflags-y += -D__CHECK_ENDIAN__
#subdir-ccflags-y += -Werror
ccflags-y += -DCONFIG_RTLWIFI_DEBUG
subdir-ccflags-y += -DCONFIG_RTLWIFI_DEBUG

ifeq ("$(KVER)", $(filter "$(KVER)", "3.14.35-031435-generic" "3.14.35-031435-lowlatency"))
ccflags-y += -D_ieee80211_is_robust_mgmt_frame=ieee80211_is_robust_mgmt_frame
subdir-ccflags-y += -D_ieee80211_is_robust_mgmt_frame=ieee80211_is_robust_mgmt_frame
endif

# for uncooked code
uncooked_ccflags-y += -DBT_SUPPORT=1
uncooked_ccflags-y += -DCOEX_SUPPORT=1
uncooked_ccflags-y += -DRTL8822B_SUPPORT=1
uncooked_ccflags-y += -DRTL8723D_SUPPORT=1
ccflags-y += $(uncooked_ccflags-y)
subdir-ccflags-y += $(uncooked_ccflags-y)

CHECKFLAGS += -D__CHECK_ENDIAN__

all:
	$(MAKE) -C $(KSRC) M=$(PWD) modules
install: all
ifeq (,$(wildcard ./backup_drivers.tar))
	@echo Making backups
	@tar cPf backup_drivers.tar $(MODDESTDIR)
endif

	@mkdir -p $(MODDESTDIR)/btcoexist
	@mkdir -p $(MODDESTDIR)/halmac
	@mkdir -p $(MODDESTDIR)/phydm
	@mkdir -p $(MODDESTDIR)/rtl8188ee
	@mkdir -p $(MODDESTDIR)/rtl8192c
	@mkdir -p $(MODDESTDIR)/rtl8192ce
	@mkdir -p $(MODDESTDIR)/rtl8192cu
	@mkdir -p $(MODDESTDIR)/rtl8192de
	@mkdir -p $(MODDESTDIR)/rtl8192ee
	@mkdir -p $(MODDESTDIR)/rtl8192se
	@mkdir -p $(MODDESTDIR)/rtl8723ae
	@mkdir -p $(MODDESTDIR)/rtl8723be
	@mkdir -p $(MODDESTDIR)/rtl8723de
	@mkdir -p $(MODDESTDIR)/rtl8723com
	@mkdir -p $(MODDESTDIR)/rtl8821ae
	@mkdir -p $(MODDESTDIR)/rtl8822be
	@install -p -D -m 644 rtl_pci.ko $(MODDESTDIR)
	@install -p -D -m 644 rtl_usb.ko $(MODDESTDIR)
	@install -p -D -m 644 rtlwifi.ko $(MODDESTDIR)
	@install -p -D -m 644 ./btcoexist/btcoexist.ko $(MODDESTDIR)/btcoexist
	@install -p -D -m 644 ./halmac/halmac.ko $(MODDESTDIR)/halmac
	@install -p -D -m 644 ./phydm/phydm_mod.ko $(MODDESTDIR)/phydm
	@install -p -D -m 644 ./rtl8188ee/rtl8188ee.ko $(MODDESTDIR)/rtl8188ee
	@install -p -D -m 644 ./rtl8192c/rtl8192c-common.ko $(MODDESTDIR)/rtl8192c
	@install -p -D -m 644 ./rtl8192ce/rtl8192ce.ko $(MODDESTDIR)/rtl8192ce
	@install -p -D -m 644 ./rtl8192cu/rtl8192cu.ko $(MODDESTDIR)/rtl8192cu
	@install -p -D -m 644 ./rtl8192de/rtl8192de.ko $(MODDESTDIR)/rtl8192de
	@install -p -D -m 644 ./rtl8192ee/rtl8192ee.ko $(MODDESTDIR)/rtl8192ee
	@install -p -D -m 644 ./rtl8192se/rtl8192se.ko $(MODDESTDIR)/rtl8192se
	@install -p -D -m 644 ./rtl8723ae/rtl8723ae.ko $(MODDESTDIR)/rtl8723ae
	@install -p -D -m 644 ./rtl8723be/rtl8723be.ko $(MODDESTDIR)/rtl8723be
	@install -p -D -m 644 ./rtl8723de/rtl8723de.ko $(MODDESTDIR)/rtl8723de
	@install -p -D -m 644 ./rtl8821ae/rtl8821ae.ko $(MODDESTDIR)/rtl8821ae
	@install -p -D -m 644 ./rtl8822be/rtl8822be.ko $(MODDESTDIR)/rtl8822be
	@install -p -D -m 644 ./rtl8723com/rtl8723-common.ko $(MODDESTDIR)/rtl8723com
ifeq ($(COMPRESS_GZIP), y)
	@gzip -f $(MODDESTDIR)/*.ko
	@gzip -f $(MODDESTDIR)/btcoexist/*.ko
	@gzip -f $(MODDESTDIR)/rtl8*/*.ko
	@gzip -f $(MODDESTDIR)/halmac/*.ko
	@gzip -f $(MODDESTDIR)/phydm/*.ko
endif
ifeq ($(COMPRESS_XZ), y)
	@xz -f $(MODDESTDIR)/*.ko
	@xz -f $(MODDESTDIR)/btcoexist/*.ko
	@xz -f $(MODDESTDIR)/rtl8*/*.ko
	@xz -f $(MODDESTDIR)/halmac/*.ko
	@xz -f $(MODDESTDIR)/phydm/*.ko
endif

	@depmod -a

	@#copy firmware images to target folder
	@cp -fr firmware/rtlwifi/ $(FIRMWAREDIR)/
	@echo "Install rtlwifi SUCCESS"

uninstall:
ifneq (,$(wildcard ./backup_drivers.tar))
	@echo Restoring backups
	@tar xvPf backup_drivers.tar
endif

	@depmod -a

	@echo "Uninstall rtlwifi SUCCESS"

clean:
	@find halmac/ \( -name "*.mod.c" -o -name "*.mod" -o -name "*.o" -o -name ".*.cmd" -o -name "*.ko" -o -name "*~" \) -exec rm {} \;
	@find phydm/ \( -name "*.mod.c" -o -name "*.mod" -o -name "*.o" -o -name ".*.cmd" -o -name "*.ko" -o -name "*~" \) -exec rm {} \;
	@rm -fr *.mod.c *.mod *.o .*.cmd *.ko *~
	@rm -fr rtl8*/*.mod.c rtl8*/*.mod rtl8*/*.o rtl8*/.*.cmd rtl8*/*.ko rtl8*/*~
	@rm -fr bt*/*.mod.c bt*/*.mod bt*/*.o bt*/.*.cmd bt*/*.ko bt*/*~
	@rm -fr .tmp_versions
	@rm -fr Modules.symvers
	@rm -fr Module.symvers
	@rm -fr Module.markers
	@rm -fr modules.order

Nun bin ich mir nicht sicher, ob es wirklich am Makefile liegt oder an den Includes.  Mit einem Downgrade des gcc auf Version 7 kriege ich wieder mein Kernelmodul.  Aber das kann ja nicht wirklich so richtig sein oder???

Liebe Grüße,
Sanni

Beitrag geändert von sanni (20.05.2018 16:40:53)

Offline

#2 20.05.2018 12:59:36

stefanhusmann
Moderator

Re: Makefile funktioniert nicht [gelöst]

Wen esmit gcc 7 geht und nicht mit gcc 8, liegt es nicht am Makefile. Ich vermute mal, du hast make in einem halbfertigen Verzeichnisbaum aufgerufen, will sagen, da lagen schon Kompilate aus einem Versuch mit gcc7 herum, die bei einem Versuch mit gcc8 nicht passen. Versuche es einmal, falls nicht schon geschehen, mit einem jungfräulichen Verzeichnisbaum, in dem wirklich nur die Sourcen liegen.

Interessant wäre ansonsten die Ausgabe von gcc.

Offline

#3 20.05.2018 16:40:32

sanni
Mitglied

Re: Makefile funktioniert nicht [gelöst]

Ich habe mal die Hausfrauenmethode (Zitat eines Profs) benutzt:
Verzeichnis total löschen, neu entpacken, läuft!  Das werde ich mir wohl merken werden smile

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums