Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2011-10-11, 19:27
  #1
Medlem
Jag kör Debian minimal på en NAS med ARM processor och när jag försöker bygga drivrutinerna till en usb/232 adapter får jag följande:
Kod:
NAS:/mnt/md3/NAS/driver# make install
  *******************************************************************
  # MOXA UPort 1110/1130/1150/1150I USB to Serial Hub Driver v1.2 #
  #                for Linux Kernel 2.6.x                           #
  #                                                                 #
  #               release date : 03/23/2009                         #
  *******************************************************************
make -C /lib/modules/2.6.22.18/build SUBDIRS=/mnt/md3/NAS/driver modules 
make[1]: Entering directory `/lib/modules/2.6.22.18/build'
make[1]: *** No rule to make target `modules'.  Stop.
make[1]: Leaving directory `/lib/modules/2.6.22.18/build'
make: *** [module] Error 2
Det är en MOXA UPort 1110 och drivrutinerna finns här http://www.moxa.com/support/sarch_re...=281&type_id=9
Jag vet att det är x86 men förhoppningen är att få dem att kompilera ändå. Annars har jag två värdelösa adaptrar liggandes :/
Citera
2011-10-11, 19:54
  #2
Medlem
Xexys avatar
Citat:
Ursprungligen postat av Pieorpaj
Jag kör Debian minimal på en NAS med ARM processor och när jag försöker bygga drivrutinerna till en usb/232 adapter får jag följande:
Kod:
NAS:/mnt/md3/NAS/driver# make install
  *******************************************************************
  # MOXA UPort 1110/1130/1150/1150I USB to Serial Hub Driver v1.2 #
  #                for Linux Kernel 2.6.x                           #
  #                                                                 #
  #               release date : 03/23/2009                         #
  *******************************************************************
make -C /lib/modules/2.6.22.18/build SUBDIRS=/mnt/md3/NAS/driver modules 
make[1]: Entering directory `/lib/modules/2.6.22.18/build'
make[1]: *** No rule to make target `modules'.  Stop.
make[1]: Leaving directory `/lib/modules/2.6.22.18/build'
make: *** [module] Error 2
Det är en MOXA UPort 1110 och drivrutinerna finns här http://www.moxa.com/support/sarch_re...=281&type_id=9
Jag vet att det är x86 men förhoppningen är att få dem att kompilera ändå. Annars har jag två värdelösa adaptrar liggandes :/

Ska du kompilera den på ett normalt sätt så tror jag du måste pilla i källkodsfilerna.

Annars kan du alltid testa med att ignorera felmeddelandena och slutföra make-kommandot. Typ med -i (ignore errors) samt -k (Keep going when some targets can't be made). Så något i stil med:

make -i -k

make install

Kommer drivrutinen att installeras korrekt? Tja, det vete fan...
Citera
2011-10-11, 20:16
  #3
Medlem
Problemet är att att targeten modules är den enda. Skippade remove och clean:
Kod:
all:	module

install: module
	mkdir -p /lib/modules/$(KVER)/kernel/drivers/usb/serial
	cp -f ./$(TARGET).ko /lib/modules/$(KVER)/kernel/drivers/usb/serial
	mkdir -p /lib/modules/$(KVER)/misc/
	cp -f ./$(TARGET).ko /lib/modules/$(KVER)/misc/
	depmod -a

ifeq "$(findstring fc6, $(KDISVER))" "fc6"
CFLAGS += -D__FC6__
endif

ifneq ($(KERNELRELEASE),)
obj-m := $(TARGET).o
else
module:
	@echo "  *******************************************************************"
	@echo "  # MOXA UPort 1110/1130/1150/1150I USB to Serial Hub Driver v$(DRV_VER) #"
	@echo "  #                for Linux Kernel 2.6.x                           #"
	@echo "  #                                                                 #"
	@echo "  #               release date : $(REL_DATE)                         #"
	@echo "  *******************************************************************"
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 
endif

På min laptop finns dock modules fast det är samma filer och modules inte finns i Makefile.
Citera
2011-10-11, 21:08
  #4
Medlem
Xexys avatar
Citat:
Ursprungligen postat av Pieorpaj
Problemet är att att targeten modules är den enda. Skippade remove och clean:
Kod:
all:	module

install: module
	mkdir -p /lib/modules/$(KVER)/kernel/drivers/usb/serial
	cp -f ./$(TARGET).ko /lib/modules/$(KVER)/kernel/drivers/usb/serial
	mkdir -p /lib/modules/$(KVER)/misc/
	cp -f ./$(TARGET).ko /lib/modules/$(KVER)/misc/
	depmod -a

ifeq "$(findstring fc6, $(KDISVER))" "fc6"
CFLAGS += -D__FC6__
endif

ifneq ($(KERNELRELEASE),)
obj-m := $(TARGET).o
else
module:
	@echo "  *******************************************************************"
	@echo "  # MOXA UPort 1110/1130/1150/1150I USB to Serial Hub Driver v$(DRV_VER) #"
	@echo "  #                for Linux Kernel 2.6.x                           #"
	@echo "  #                                                                 #"
	@echo "  #               release date : $(REL_DATE)                         #"
	@echo "  *******************************************************************"
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 
endif

På min laptop finns dock modules fast det är samma filer och modules inte finns i Makefile.

Tror man kan utnyttja krosskompilering. Googla "Cross Compile" så kanske du finner något intressant.

Prova lägg till ARCH := arm i början av din Makefil samt ta bort:

ifeq "$(findstring fc6, $(KDISVER))" "fc6"
CFLAGS += -D__FC6__
endif

Annars vet jag inte, har aldrig själv krosskompilerat innan...
Citera
2011-10-12, 09:06
  #5
Medlem
Citat:
Ursprungligen postat av Pieorpaj
J
Kod:
make -C /lib/modules/2.6.22.18/build SUBDIRS=/mnt/md3/NAS/driver modules 
make[1]: Entering directory `/lib/modules/2.6.22.18/build'
make[1]: *** No rule to make target `modules'.  Stop.
make[1]: Leaving directory `/lib/modules/2.6.22.18/build'
make: *** [module] Error 2

För att kunna bygga en modul måste du ha källkodsträdet för kärnan tillgängligt och det verkar som att du inte har den på din burk (vilket låter rimligt om det är en minimal). Antingen får du lägga in linux-source eller så får du korskompilera som redan nämndes i tråden.

Huruvida drivern kommer fungera eller ej beror helt på hur den är skriven, om det är en USB-device så är det fullt möjligt att det fungerar (om de har gjort drivern "snyggt") men oddsen är ungefär lika stora att den inte kommer göra det (om de har gjort antaganden om byteorder, wordlength osv). I det senare fallet har du värsta möjligheten att lära dig lite kernelprogrammering
Citera
2011-10-12, 09:07
  #6
Medlem
http://marcin.juszkiewicz.com.pl/201...-ubuntu-10-10/ kanske kan vara en bra start?
Citera
2011-10-12, 11:51
  #7
Medlem
Nasen som drivrutinen ska kompileras för kör kärnan 2.6.22-18 så jag antar att jag måste ha källkoden för just den installerad?
Kod:
NAS:~# uname -a
Linux NAS 2.6.22.18 #1 Thu Nov 5 16:01:23 CST 2009 v0.2.4 armv5tejl GNU/Linux

Problemet är att den inte finns i förråden
Kod:
Package linux-source is a virtual package provided by:
  linux-source-2.6.26 2.6.26-27

Om jag ska crosskompilera är väll samma sak som gäller där?

Jag har jäkligt dåligt med space på / på NASen så cross-crosscompile vore nice.
Jag har installerat gcc-arm-linux-gnueabi och försöker kompilera med
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
men får en massa fel, mest troligt beror det på att jag kör 3.0.0-12 och drivrutinen stödjer upp till 2.6.29

Så nu måste jag tanka källkoden för arm ver 2.6.22-18, eller?
Citera
2011-10-12, 11:55
  #8
Medlem
Citat:
Ursprungligen postat av Pieorpaj
Nasen som drivrutinen ska kompileras för kör kärnan 2.6.22-18 så jag antar att jag måste ha källkoden för just den installerad?
Så nu måste jag tanka källkoden för arm ver 2.6.22-18, eller?

Yes. Alternativt bygger du en ny custom-kärna och kör på den istället.
Citera
2011-10-12, 12:52
  #9
Medlem
Jag har nu tankat 2.6.22 koden, specat mappen som kdir och konfigurerat kärnan med
Kod:
make oldconfig && make prepare
(jag var tvungen). Svarade default på alla frågor.

Nu när jag försöker kompilera får jag
Kod:
rasmus@rasmus-P420:~/tmp/driver$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
  *******************************************************************
  # MOXA UPort 1110/1130/1150/1150I USB to Serial Hub Driver v1.2 #
  #                for Linux Kernel 2.6.x                           #
  #                                                                 #
  #               release date : 03/23/2009                         #
  *******************************************************************
make -C /home/rasmus/tmp/driver/linux-2.6.22 SUBDIRS=/home/rasmus/tmp/driver modules 
make[1]: Entering directory `/home/rasmus/tmp/driver/linux-2.6.22'

  WARNING: Symbol version dump /home/rasmus/tmp/driver/linux-2.6.22/Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  /home/rasmus/tmp/driver/mxu11x0.o
In file included from include/asm/tsc.h:1:0,
                 from include/asm/timex.h:15,
                 from include/linux/timex.h:187,
                 from include/linux/jiffies.h:8,
                 from include/linux/ktime.h:25,
                 from include/linux/timer.h:5,
                 from include/linux/workqueue.h:8,
                 from include/linux/slub_def.h:11,
                 from include/linux/slab.h:121,
                 from /home/rasmus/tmp/driver/mxu11x0.c:23:
include/asm-i386/tsc.h: In function ‘get_cycles’:
include/asm-i386/tsc.h:29:2: warning: left shift count >= width of type [enabled by default]
include/asm-i386/tsc.h: In function ‘get_cycles_sync’:
include/asm-i386/tsc.h:57:2: warning: left shift count >= width of type [enabled by default]
/home/rasmus/tmp/driver/mxu11x0.c: In function ‘mxu1_close’:
include/asm/semaphore.h:128:2: error: impossible constraint in ‘asm’
include/asm/semaphore.h:170:2: error: impossible constraint in ‘asm’
make[2]: *** [/home/rasmus/tmp/driver/mxu11x0.o] Error 1
make[1]: *** [_module_/home/rasmus/tmp/driver] Error 2
make[1]: Leaving directory `/home/rasmus/tmp/driver/linux-2.6.22'
make: *** [module] Error 2

Någon som har nån idé?

Jag ska först försöka kompilera drivaren och sen får vi se hur det funkar och om jag annars kan göra nått åt det.

EDIT: Kan inte bygga någon custom kärna till NASen. Citerar han som har portat Debian till den:
Citat:
The NAS uses kernel 2.6.22.18. Upgrading the kernel is a non-trivial task because you need a kernel with Marvell's patches to support all hardware components.
Citera
2011-10-12, 13:13
  #10
Medlem
Xexys avatar
Citat:
Ursprungligen postat av Pieorpaj
Jag har nu tankat 2.6.22 koden, specat mappen som kdir och konfigurerat kärnan med
Kod:
make oldconfig && make prepare
(jag var tvungen). Svarade default på alla frågor.

Nu när jag försöker kompilera får jag
Kod:
rasmus@rasmus-P420:~/tmp/driver$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
  *******************************************************************
  # MOXA UPort 1110/1130/1150/1150I USB to Serial Hub Driver v1.2 #
  #                for Linux Kernel 2.6.x                           #
  #                                                                 #
  #               release date : 03/23/2009                         #
  *******************************************************************
make -C /home/rasmus/tmp/driver/linux-2.6.22 SUBDIRS=/home/rasmus/tmp/driver modules 
make[1]: Entering directory `/home/rasmus/tmp/driver/linux-2.6.22'

  WARNING: Symbol version dump /home/rasmus/tmp/driver/linux-2.6.22/Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  /home/rasmus/tmp/driver/mxu11x0.o
In file included from include/asm/tsc.h:1:0,
                 from include/asm/timex.h:15,
                 from include/linux/timex.h:187,
                 from include/linux/jiffies.h:8,
                 from include/linux/ktime.h:25,
                 from include/linux/timer.h:5,
                 from include/linux/workqueue.h:8,
                 from include/linux/slub_def.h:11,
                 from include/linux/slab.h:121,
                 from /home/rasmus/tmp/driver/mxu11x0.c:23:
include/asm-i386/tsc.h: In function ‘get_cycles’:
include/asm-i386/tsc.h:29:2: warning: left shift count >= width of type [enabled by default]
include/asm-i386/tsc.h: In function ‘get_cycles_sync’:
include/asm-i386/tsc.h:57:2: warning: left shift count >= width of type [enabled by default]
/home/rasmus/tmp/driver/mxu11x0.c: In function ‘mxu1_close’:
include/asm/semaphore.h:128:2: error: impossible constraint in ‘asm’
include/asm/semaphore.h:170:2: error: impossible constraint in ‘asm’
make[2]: *** [/home/rasmus/tmp/driver/mxu11x0.o] Error 1
make[1]: *** [_module_/home/rasmus/tmp/driver] Error 2
make[1]: Leaving directory `/home/rasmus/tmp/driver/linux-2.6.22'
make: *** [module] Error 2

Någon som har nån idé?

Jag ska först försöka kompilera drivaren och sen får vi se hur det funkar och om jag annars kan göra nått åt det.

EDIT: Kan inte bygga någon custom kärna till NASen. Citerar han som har portat Debian till den:


Varför laddar du inte ned den specifika kerneln då?

kernel 2.6.22.18: http://launchpad.net/linux/2.6.22/2.....22.18.tar.bz2
Citera
2011-10-12, 13:40
  #11
Medlem
2.6.22 var det enda som fanns på kernel.org
Men nu har jag iaf. tankat den du länkade, men får ändå samma fel.
Citera
2011-10-14, 19:25
  #12
Medlem
Citat:
Ursprungligen postat av Pieorpaj
EDIT: Kan inte bygga någon custom kärna till NASen. Citerar han som har portat Debian till den:

Du måste bygga modulen mot samma kärna som rullar på din burk, annars kommer det inte lira (symboler som inte matchar och annan skit). Kan du inte ladda hem källkoden till den kernel som rullar på NAS:en och bygga mot den?
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback