[linux driver] relaiskaart driver werkt niet

Pagina: 1
Acties:

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
Ik heb een quancom usbrel8 relaiskaart. Deze heeft usb drivers erbij:

zie http://www.quancom.de/qprod01/homed.htm onder 'mitgelieferte treiber' en dan de voor kernel 2.6.x driver. Ik werkt met fedora core 4 met kernel 2.6.x dus dat zou goed moeten zijn.

Drivers geinstalleerd volgens handleiding
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Step 1: First make the nodes for the kernel driver with
   make nodes
Step 2: Then compile the module. We use the kernel make structure. This ensures a
correct make.
   make default
Step 3: Load the module with
   make insmod
Step 3.1 ( optional ): Check driver messages during load
        dmesg
Step 4: Change the directory
   cd ..
Step 5: Change the directory to the test application directory
   cd usboptorel16_usbopto16io
   or
   cd usboptorel32_usbopto32io
   or
   cd usbrel8
   or
   cd usbwdog
Step 6: Compile the test application
        make
Step 7: Run the test application
        ./usbtest


Bij eerste regel krijg ik al:
code:
1
2
3
4
[root@linuxbak module]# make nodes
mknod -m 660 /dev/usb/qusb0 c 180 132
mknod: `/dev/usb/qusb0': No such file or directory
make: *** [nodes] Error 1


Makefile erbij:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@linuxbak module]# cat Makefile
ifneq ($(KERNELRELEASE),)
obj-m := quancom.o

else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

insmod:
        insmod quancom.ko

rmmod:
        rmmod quancom

nodes:
        mknod -m 660 /dev/usb/qusb0 c 180 132
        mknod -m 660 /dev/usb/qusb1 c 180 133
        mknod -m 660 /dev/usb/qusb2 c 180 134
        mknod -m 660 /dev/usb/qusb3 c 180 135
        mknod -m 660 /dev/usb/qusb4 c 180 136
        mknod -m 660 /dev/usb/qusb5 c 180 137
        mknod -m 660 /dev/usb/qusb6 c 180 138
        mknod -m 660 /dev/usb/qusb7 c 180 139

default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

die mknod geeft dus een foutmelding. Waarom? wat precies doet mknod?

Verder heb ik deze stap over geslagen en na make insmod komt er mbv dmesg:
code:
1
2
3
4
5
6
7
quancom driver: probing vendor id 0xa7c, device id 0xb
quancom driver: QUANCOM USBREL8LC detected.
quancom driver: registering: major = 180, minor = 132, node = usb/qusb132
quancom driver: firmware version 0.09
usbcore: registered new driver qusbdrv
quancom driver: quancom_init: driver registered
/root/relais/kernel26_v2/port2.6.x/module/quancom.c: v1.2-2.6-port:QUANCOM USB Module Driver


Lijkt erop dat iig iets gevonden is. Ik krijg het test proggie ook niet aan de gang vanwege de eerste fout, maar weet mijn god niet hoe ik dit op moet gaan lossen. Ik zelf gebruik altijd bestaande drivers ;)

if broken it is, fix it you should


  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 30-01 01:49

Sprite_tm

Semi-Chinees

Lijkt me dat je /dev/usb niet bestaat. mkdir /dev/usb en opnieuw make nodes draaien lijkt me dus :)

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
Sprite_tm schreef op dinsdag 22 november 2005 @ 18:20:
Lijkt me dat je /dev/usb niet bestaat. mkdir /dev/usb en opnieuw make nodes draaien lijkt me dus :)
Dat dacht ik ook, maar mag dat zomaar????

Edit:
ik heb de map /dev/usb aangemaakt en hij geeft geen fouten meer aldus handleding, driver wordt ook geladen, maar nog steeds kan ik er niets mee. Het testprogramma zegt ook dat ie geen usb kaarten vindt. De vraag is nu of de driver wel goed geinstalleerd is.

Kan ik dat ergens zien / controleren ???

EDIT 2:
Verder merk ik op dat bij een reboot de drivers niet meer geladen worden. Is dit normaal bij linux en hoe zorg ik dat ie wel werkt?
De map /dev/usb is overigens ook weg na een reboot, en moet ik ook opnieuw aanmaken oid?

[ Voor 57% gewijzigd door elgringo op 22-11-2005 19:58 ]

if broken it is, fix it you should


  • froggie
  • Registratie: November 2001
  • Laatst online: 20-11-2024

froggie

Kwaaak

/dev wordt bij iedere boot gegenereerd door de kernel en de dev "manager" (devfs, udev). Handmatige wijzigingen hierin zul je dus na iedere boot opnieuw moeten aanbrengen (bijv dmv een scriptje).

  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
Maar met udev zou ik ook verwachten dat de device automatisch worden aangemaakt en dat het niet meer nodig is mknod te draaien. Als je dus de driver laat en nog niet de nodes aangemaakt hebt, zijn er dan al apparaten te vinden met major 180? ( ls -Rl /dev | grep 180 ) Als dat het geval is kun je die node opzoeken en die instellen in de config van je programma.

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
cool_zero schreef op dinsdag 22 november 2005 @ 20:18:
Maar met udev zou ik ook verwachten dat de device automatisch worden aangemaakt en dat het niet meer nodig is mknod te draaien. Als je dus de driver laat en nog niet de nodes aangemaakt hebt, zijn er dan al apparaten te vinden met major 180? ( ls -Rl /dev | grep 180 ) Als dat het geval is kun je die node opzoeken en die instellen in de config van je programma.
Ik ben dus een n00b of dev drivers in linux.

udev kan ik dus gaan gebruiken om het mapje /dev/usb aan te maken. En als ik jou goed begrijp moet deze ook de mknod /dev/usb/qusb? (?=0..7) aanmaken?

Wat is een major 180, een soort van adres waar het app. zit?

if broken it is, fix it you should


  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 11:07
Major nummer is een speciaal gereserveerd nummer die door de driver opgepakt wordt. Al maak je in /tmp een device node met die speciale major nummers, die driver reageert gewoon op calls voor bestanden met dat major nummer. De minor nummers worden in de driver op zich afgehandeld, er kan nml meer dan 1 apparaat zijn die je wilt besturen met dezelfde driver.

  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
Je moet gewoon even de driver laden (die nodes moet je nu dus even niet aanmaken) en dan even dit uitvoeren:
code:
1
ls -Rl /dev | grep 180

(Voor de duidelijkheid: LS -RL /dev ,staand streepje, grep ,het getal 180 ;) )

Als mijn vermoede juist is is er al automatisch een node aangemaakt door de driver en zul je met dat commando de naam ervan kunnen achterhalen. Je kunt dan die node gebruiken voor in je applicatie.

[ Voor 20% gewijzigd door cool_zero op 22-11-2005 23:24 ]


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
cool_zero schreef op dinsdag 22 november 2005 @ 23:21:
Je moet gewoon even de driver laden (die nodes moet je nu dus even niet aanmaken) en dan even dit uitvoeren:
code:
1
ls -Rl /dev | grep 180

(Voor de duidelijkheid: LS -RL /dev ,staand streepje, grep ,het getal 180 ;) )

Als mijn vermoede juist is is er al automatisch een node aangemaakt door de driver en zul je met dat commando de naam ervan kunnen achterhalen. Je kunt dan die node gebruiken voor in je applicatie.
ls -Rl /dev | grep 180 verwijst naar /dev/qusb0 -> deze ga ik dan ook maar gebruiken

Kan ik dan ook zorgen dat deze driver en /dev/usb aangemaakt wordt tijdens het opstarten?

if broken it is, fix it you should


  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
Je kan de module gewoon in /etc/modprobe.preload zetten (zonder de .ko extensie). Als dit bestand niet bestaat kun je hem aanmaken. Maar dat kun je vinden met de search ;)

Als je graag een /dev/usb/qusb0 wil hebben die hetzelfde doet als de /dev/qusb0 kun je een symlink maken door in /etc/udev/ aan het bestand udev.rules de volgende lijn toe te voegen:
code:
1
KERNEL="qusb0", SYMLINK="usb/qusb0"

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
cool_zero schreef op woensdag 23 november 2005 @ 21:21:
Je kan de module gewoon in /etc/modprobe.preload zetten (zonder de .ko extensie). Als dit bestand niet bestaat kun je hem aanmaken. Maar dat kun je vinden met de search ;)

Als je graag een /dev/usb/qusb0 wil hebben die hetzelfde doet als de /dev/qusb0 kun je een symlink maken door in /etc/udev/ aan het bestand udev.rules de volgende lijn toe te voegen:
code:
1
KERNEL="qusb0", SYMLINK="usb/qusb0"
Is het dan (in modprobe.preload): /dirretje/subdir/module (zonder .ko) Of moet ie nog naar een aparte map oid?

en als /dev/usb/ niet bestaat maakt hij deze dan automagisch aan?

Verder hebben drivers alla muis ed dit niet nodig. Worden deze modules std al geladen of gaat dit ergens anders

[ Voor 9% gewijzigd door elgringo op 29-11-2005 16:05 ]

if broken it is, fix it you should


  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
elgringo schreef op dinsdag 29 november 2005 @ 16:00:
[...]

Is het dan (in modprobe.preload): /dirretje/subdir/module (zonder .ko) Of moet ie nog naar een aparte map oid?
Dat is een goede vraag. Dat zou ik ook zo niet weten. Probeer het eens zou ik zeggen met die path ( /dirretje/subdir/module (zonder .ko)). Je kan met lsmod zien of de module geladen is. Als dit nou niet werkt kun je ook in /etc/rc.d/rc.local gewoon even het commando neerzetten (/sbin/insmod /dirretje/subdir/module.ko )
en als /dev/usb/ niet bestaat maakt hij deze dan automagisch aan?
Ja. Ik vroeg mij dat ook af en heb het daarom al getest en het ging automagisch ;)
Verder hebben drivers alla muis ed dit niet nodig. Worden deze modules std al geladen of gaat dit ergens anders
Ja, dat is allemaal standaard. Het wordt altijd lastig al je er zelf wat aan toe wil voegen :P

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
cool_zero schreef op dinsdag 29 november 2005 @ 22:42:
[...]

Dat is een goede vraag. Dat zou ik ook zo niet weten. Probeer het eens zou ik zeggen met die path ( /dirretje/subdir/module (zonder .ko)). Je kan met lsmod zien of de module geladen is. Als dit nou niet werkt kun je ook in /etc/rc.d/rc.local gewoon even het commando neerzetten (/sbin/insmod /dirretje/subdir/module.ko )
[...]

Ja. Ik vroeg mij dat ook af en heb het daarom al getest en het ging automagisch ;)
[...]

Ja, dat is allemaal standaard. Het wordt altijd lastig al je er zelf wat aan toe wil voegen :P
Ik heb nu het probleem, als de usb drivers erop staan (ze worden automatisch geladen) en de relaiskaart zit er niet in als de pc start (lees modules geladen worden) wordt de kaart ook niet herkend.

Nu weet ik niet of hier een oplossing voor is

if broken it is, fix it you should


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
Ik snap er nu niets meer van......

Ik heb die drivers in /etc/moudles geladen zodat alles mods geladen worden (UHCI_HCD) als die bak opgestart is laat ik quancom.ko (de driver van de relaiskaart) (nadat de nodes zijn aangemaakt). Deze vindt alles:
qusbdrv 4-1:1.0: usb_probe_interface
qusbdrv 4-1:1.0: usb_probe_interface - got id
quancom driver: probing vendor id 0xa7c, device id 0xb
quancom driver: QUANCOM USBREL8LC detected.
drivers/usb/core/file.c: looking for a minor, starting at 132
quancom driver: registering: major = 180, minor = 132, node = usb/qusb132
quancom driver: firmware version 0.09
usbcore: registered new driver qusbdrv
quancom driver: quancom_init: driver registered
/home/staal/relaydriver/module/quancom.c: v1.2-2.6-port:QUANCOM USB Module Driver
Maar vervolgens kan ik niets geschijven naar /dev/usb/qusb0, en als ik geen nodes maak, maar ie normaal zelf een link naar de relaiskaart, maar dat doet ie ook niet.
cat a.out > /dev/usb/qusb0
bash: /dev/usb/qusb0: Permission denied
Wat eerst wel werkte.

Mijn vraag is nu, hoe kan het dat die node niet goed gemaakt / geladen wordt. Mis ik nog speciale modules oid?

Edit: het lijkt er dus op dat alles wel geregisteerd wordt maar dat die link zelf niet werkt

[ Voor 5% gewijzigd door elgringo op 30-11-2005 14:48 ]

if broken it is, fix it you should


  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
Het is logischer om eerst de module te laden en dan pas de nodes. Dat wordt misschien wat lastig in dit geval. Wat je zou kunnen proberen is om udev even opnieuw te starten ('/dev/init.d/udev restart' is dat in debian) Als het dan wel werkt zit daar het probleem. Ik neem trouwens even aan dat je als root werkt zodat de foutmelding '/dev/usb/qusb0: Permission denied' niet komt doordat er rechten in /dev fout staan.

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 01-02 09:13
cool_zero schreef op woensdag 30 november 2005 @ 17:41:
Het is logischer om eerst de module te laden en dan pas de nodes. Dat wordt misschien wat lastig in dit geval. Wat je zou kunnen proberen is om udev even opnieuw te starten ('/dev/init.d/udev restart' is dat in debian) Als het dan wel werkt zit daar het probleem. Ik neem trouwens even aan dat je als root werkt zodat de foutmelding '/dev/usb/qusb0: Permission denied' niet komt doordat er rechten in /dev fout staan.
het vreemde is dat de driver eerst zijn node aanmaakte (of /dev/qusb0 en als /dev/usb/ bestond, /dev/usb/qusb0 ) Nu doet hij dat niet. Ik heb dus met de hand aangemaakt (gisteren: mknod -m 666 /dev/usb/qusb0 c 180 132 ) en toen pakte die hem niet.

Vanmorgen doet ie het echter wel.... (En ik maar denken dat windows rare foutmelding gaf)

Ik zat te bedenken, ik miste eerst usb drivers. Nu zijn er 3 ehci, uhci, ohci (althans volgens mijn kernel) nu weet ik dat deze chipset gerelateerd zijn. Maar hoe zit dit precies?

if broken it is, fix it you should


  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
elgringo schreef op donderdag 01 december 2005 @ 10:06:
[...]


het vreemde is dat de driver eerst zijn node aanmaakte (of /dev/qusb0 en als /dev/usb/ bestond, /dev/usb/qusb0 ) Nu doet hij dat niet. Ik heb dus met de hand aangemaakt (gisteren: mknod -m 666 /dev/usb/qusb0 c 180 132 ) en toen pakte die hem niet.
werkte udev restart niet?
Ik zat te bedenken, ik miste eerst usb drivers. Nu zijn er 3 ehci, uhci, ohci (althans volgens mijn kernel) nu weet ik dat deze chipset gerelateerd zijn. Maar hoe zit dit precies?
Staat gewoon in de kernel documentatie en dus ook wel op internet. Uit mij hoofd is ehci usb2, uhci voor intel, via en ohci voor sis, maar pin me daar niet op vast.

Verwijderd

Ik heb ook een usbrel8 en een usbopto8.
Onder LabVIEW werkt alles prima.

Maar als ik in C (Borland CPP 5.02 of Borland Builder 6) probeer te programmeren lopen alle includes/libraries/dll's hard tegen mekaar in.

Neemt niet weg dat de downloadbare manuals bedoelt zijn voor oudere versies van de software + drivers.

Wat ik probeer te zeggen is dat ik dit topic ff blijf volgen.

p.s. ik gebruik winxp.

[ Voor 5% gewijzigd door Verwijderd op 19-12-2005 20:03 . Reden: toevoeging ]

Pagina: 1