- Bearbeitet
Hallo Leute, ich benötige Eure Hilfe bei einer Kompilierung eines speziellen Treibers.
Dieser wird später benötigt um Xilinx FPGA per jtag zu laden.
Leider benötige ich eine ältere Xilinx ISE Version 11.1 um einen alten CPLD zu programmieren.
Was ich bisher gemacht habe:
Kompilieren des Treibers für 64bit Systeme. Das funktioniert.
Kompilieren des Treibers auf ein 64 bit Arch-Linux Systems für 32 bit. Ergab Fehler wie weiter unten beschrieben.
Folgende libs wurden zuerst installiert.
glibc lib32-glibc lib-usb lib32-libusb libusb-compat lib32-libusb-compat
Das ist die Fehlerausgabe nach dem Kompilieren:
Wie kann man das ändern?
Falls Jemand das von Euch probieren möchte, so kann man den Quellcode runterladen. (Ist nur wenig)
git clone git://git.zerfleddert.de/usb-driver (Der Link ist wirklich korrekt).
Hier ist noch der Inhalt vom Makefile
Gruß aus DN
Greg
Dieser wird später benötigt um Xilinx FPGA per jtag zu laden.
Leider benötige ich eine ältere Xilinx ISE Version 11.1 um einen alten CPLD zu programmieren.
Was ich bisher gemacht habe:
Kompilieren des Treibers für 64bit Systeme. Das funktioniert.
Kompilieren des Treibers auf ein 64 bit Arch-Linux Systems für 32 bit. Ergab Fehler wie weiter unten beschrieben.
Folgende libs wurden zuerst installiert.
glibc lib32-glibc lib-usb lib32-libusb libusb-compat lib32-libusb-compat
Das ist die Fehlerausgabe nach dem Kompilieren:
$ make lib32
make LIBVER=32 clean all
make[1]: Verzeichnis „/home/gl/temp/usb-driver“ wird betreten
rm -f libusb-driver.so libusb-driver-DEBUG.so
cc -Wall -fPIC -DUSB_DRIVER_VERSION="\"2017-05-13 09:57:38\"" -m32 -DJTAGKEY usb-driver.c xpcu.c parport.c config.c jtagmon.c jtagkey.c -o libusb-driver.so -ldl -lusb -lpthread -L/usr/lib -lftdi -L/usr/lib -lusb -shared
usb-driver.c: In Funktion »access«:
usb-driver.c:634:5: Warnung: nonnull argument »pathname« compared to NULL [-Wnonnull-compare]
if (pathname && !strcmp(pathname, "/dev/windrvr6")) {
^
parport.c: In Funktion »parport_transfer«:
parport.c:21:23: Warnung: Variable »last_pp_write« gesetzt, aber nicht verwendet [-Wunused-but-set-variable]
static unsigned char last_pp_write = 0;
^~~~~~~~~~~~~
/usr/bin/ld: skipping incompatible /usr/lib/libdl.so when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib/libdl.a when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib/libdl.so when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib/libdl.a when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib/libusb.so when searching for -lusb
/usr/bin/ld: skipping incompatible /usr/lib/libusb.so when searching for -lusb
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libftdi.so when searching for -lftdi
/usr/bin/ld: skipping incompatible /usr/lib/libftdi.so when searching for -lftdi
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/../../../libftdi.so when searching for -lftdi
/usr/bin/ld: skipping incompatible /usr/lib/libftdi.so when searching for -lftdi
/usr/bin/ld: cannot find -lftdi
/usr/bin/ld: skipping incompatible /usr/lib/libusb.so when searching for -lusb
/usr/bin/ld: skipping incompatible /usr/lib/libusb.so when searching for -lusb
/usr/bin/ld: skipping incompatible /usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/ld: skipping incompatible /usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1
collect2: Fehler: ld gab 1 als Ende-Status zurück
make[1]: *** [Makefile:29: libusb-driver.so] Fehler 1
make[1]: Verzeichnis „/home/gl/temp/usb-driver“ wird verlassen
make: *** [Makefile:35: lib32] Fehler 2
Wenn ich jetzt so rumforsche von welchem Paket die /usr/lib/libdl.so her ist, dann gibt pacman das aus:
pacman -Qo /usr/lib/libdl.so
/usr/lib/libdl.so ist in glibc 2.25-1 enthalten
Wenn ich jetzt ein pacman -Ql lib32-glibc eingebe, dann findet pacman die so:
pacman -Ql lib32-glibc /usr/lib32/libdl.so
Kann es sein, dass bei der Kompilierung fälschlicherweise immer im Pfad /usr/lib statt /usr/lib32/ zugegriffen wird?Wie kann man das ändern?
Falls Jemand das von Euch probieren möchte, so kann man den Quellcode runterladen. (Ist nur wenig)
git clone git://git.zerfleddert.de/usb-driver (Der Link ist wirklich korrekt).
Hier ist noch der Inhalt vom Makefile
#Add -DFORCE_PC3_IDENT to CFLAGS to force the identification of
#a Parallel Cable III
#Add -DNO_USB_RESET to disable the hard reset of the cable when
#opening the device
CFLAGS=-Wall -fPIC -DUSB_DRIVER_VERSION="\"$(shell stat -c '%y' usb-driver.c |cut -d\. -f1)\"" #-DFORCE_PC3_IDENT -DNO_USB_RESET
LIBS=-ldl -lusb -lpthread
SRC=usb-driver.c xpcu.c parport.c config.c jtagmon.c
HEADER=usb-driver.h xpcu.h parport.h jtagkey.h config.h jtagmon.h
ifeq ($(LIBVER),32)
CFLAGS += -m32
endif
FTDI := $(shell libftdi-config --libs 2>/dev/null)
ifneq ($(FTDI),)
SRC += jtagkey.c
CFLAGS += -DJTAGKEY
LIBS += $(FTDI)
endif
SOBJECTS=libusb-driver.so libusb-driver-DEBUG.so
all: $(SOBJECTS)
@file libusb-driver.so | grep x86-64 >/dev/null && echo Built library is 64 bit. Run \`make lib32\' to build a 32 bit version || true
libusb-driver.so: $(SRC) $(HEADER) Makefile
$(CC) $(CFLAGS) $(SRC) -o $@ $(LIBS) -shared
libusb-driver-DEBUG.so: $(SRC) $(HEADER) Makefile
$(CC) -DDEBUG $(CFLAGS) $(SRC) -o $@ $(LIBS) -shared
lib32:
$(MAKE) LIBVER=32 clean all
clean:
rm -f $(SOBJECTS)
.PHONY: clean all lib32
Vielen Dank im Vorraus!!Gruß aus DN
Greg