<<< Previous topic - Next topic >>> |
|
Author |
Message |
cra
Joined: 19 May 2007 Posts: 6
|
Posted: 19.05.2007, 12:00 Post subject: Probleme beim Bauen der Interrupt-Demos. |
|
|
Hallo,
Ich wollte das Interrupt Beispiel aus Linux/demos/ssvirq_demo-dnp2110 übersetzen:
nach dem ich make aufgerufen habe bekomme ich folgende Fehlermeldung:
>>>
/usr/local/arm-xscale-linux/bin/arm-xscale-linux-gcc -D__KERNEL__ -DMODULE -O2 -Wall -Wstrict-prototypes -I/usr/src/linux-2.4.19-rmk7-pxa2-ssv1/include -march=armv4 -Wa,-mxscale -mtune=strongarm -c ssvirq.c -o ssvirq.o
In file included from /usr/local/arm-xscale-linux/lib/gcc-lib/arm-xscale-linux/2.95.3/../../../../arm-xscale-linux/sys-include/asm/uaccess.h:7,
from ssvirq.c:13:
/usr/src/linux-2.4.19-rmk7-pxa2-ssv1/include/linux/sched.h:155: conflicting types for `kernel_thread'
/usr/local/arm-xscale-linux/lib/gcc-lib/arm-xscale-linux/2.95.3/../../../../arm-xscale-linux/sys-include/asm/processor.h:128: previous declaration of `kernel_thread'
make: *** [ssvirq.o] Fehler 1
<<<
Anscheinend wird der kernel_thread in den „Kernel sources“ und in „Kernel tool chain“ unterschiedlich deklariert
#Kernel sources:
# line 155 in :/usr/src/linux-2.4.19-rmk7-pxa2-ssv1/include/linux/sched.h
extern long kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
#Kernel Tool chain:
# line 128 in : /usr/local/arm-xscale-linux/lib/gcc-lib/arm-xscale-linux/2.95.3/../../../../arm-xscale-linux/sys-include/asm/processor.h
extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
Ich habe ,wie in README empfohlen, die SW entsprechend installiert
Requirements
------------
- Kernel source at "/usr/src/linux-2.4.19-rmk7-pxa2-ssv1"
- Userspace Toolchain at "/usr/local/arm-linux"
- Kernel Toolchain at "/usr/local/arm-xscale-linux"
Wenn „Kernel sources“ nicht erreichbar sind wird ssvirg übersetzt, demo1 bricht aber ab.
>>>
/usr/local/arm-xscale-linux/bin/arm-xscale-linux-gcc -D__KERNEL__ -DMODULE -O2 -Wall -Wstrict-prototypes -I/usr/src/linux-2.4.19-rmk7-pxa2-ssv1/include -march=armv4 -Wa,-mxscale -mtune=strongarm -c ssvirq.c -o ssvirq.o
/usr/local/arm-linux/bin/arm-linux-gcc -Wall -Wstrict-prototypes -Os -Wl,-s -march=armv4 -mtune=strongarm demo1.c -o demo1
/tmp/ccJ773nf.o: In function `main':
/tmp/ccJ773nf.o(.text+0xf4): undefined reference to `__invalid_size_argument_for_IOC'
collect2: ld returned 1 exit status
make: *** [demo1] Fehler 1
<<<
Das Demo port_c-dnp2110 baut problemlos.
Viele Grüße
cra |
|
Back to top |
|
|
mha
Joined: 05 May 2006 Posts: 28
|
Posted: 22.05.2007, 16:36 Post subject: |
|
|
Hallo.
Die Kernel Quellen müssen auch konfiguriert werden.
Steps:
1) make menuconfig
-> die Kernel Konfiguration laden und speichern.
2) make dep
-> erzeugt die Abhängigkeiten.
Jetzt kann das Modul übersetzt werden.
Die Kernel Konfiguration "CONFIG-DNP2110-<...>
befinden sich auf der CD im Verzeichnis "linux\dnp2110-<...>\zimage".
Gruss Marco |
|
Back to top |
|
|
cra
Joined: 19 May 2007 Posts: 6
|
Posted: 22.05.2007, 21:52 Post subject: Leider erfolglos |
|
|
Hallo,
Leider treten immer noch Fehler auf.
Als root in /usr/src/linux-2.4.19-rmk7-pxa2-ssv1
habe ich die Konfiguraitonsdatei CONFIG-DNP2110-2.4.19-SSV20040824 geladen (make menuconfig). Die Datei wurde dann als .config abgespeichert.
Dann habe ich "make dep" aufgerufen (vorher PATH um /usr/local/arm-xscale-linux/bin
erweitert). Make lief fehlerfrei durch.
Danach wollte ich die Interrupt-Demos übersetzen
christian@linux:~/entwicklung/ssv_board/clean_demos/ssvirq_demo-dnp2110> make ssvirq
/usr/local/arm-linux/bin/arm-linux-gcc ssvirq.o -o ssvirq
/usr/local/arm/2.95.3/arm-linux/lib/crt1.o: In function `_start':
/usr/local/arm/2.95.3/arm-linux/lib/crt1.o(.text+0x2c): undefined reference to `main'
ssvirq.o: In function `ssvirq_interrupt':
ssvirq.o(.text+0x2c): undefined reference to `__put_user_4'
ssvirq.o: In function `ssvirq_ioctl':
ssvirq.o(.text+0x74): undefined reference to `__put_user_4'
ssvirq.o: In function `ssvirq_open':
ssvirq.o(.text+0x114): undefined reference to `__this_module'
ssvirq.o: In function `ssvirq_release':
ssvirq.o(.text+0x178): undefined reference to `__this_module'
ssvirq.o: In function `init_module':
ssvirq.o(.text+0x1ac): undefined reference to `request_irq'
ssvirq.o(.text+0x1c0): undefined reference to `printk'
ssvirq.o(.text+0x1d4): undefined reference to `register_chrdev'
ssvirq.o(.text+0x1e4): undefined reference to `printk'
ssvirq.o(.text+0x210): undefined reference to `printk'
ssvirq.o(.text+0x21c): undefined reference to `free_irq'
ssvirq.o: In function `cleanup_module':
ssvirq.o(.text+0x248): undefined reference to `free_irq'
ssvirq.o(.text+0x254): undefined reference to `unregister_chrdev'
ssvirq.o(.text+0x25c): undefined reference to `printk'
collect2: ld returned 1 exit status
make: *** [ssvirq] Fehler 1
und demo1
christian@linux:~/entwicklung/ssv_board/clean_demos/ssvirq_demo-dnp2110> make demo1
/usr/local/arm-linux/bin/arm-linux-gcc -Wall -Wstrict-prototypes -Os -Wl,-s -march=armv4 -mtune=strongarm demo1.c -o demo1
/tmp/ccygJ2L4.o: In function `main':
/tmp/ccygJ2L4.o(.text+0xf4): undefined reference to `__invalid_size_argument_for_IOC'
collect2: ld returned 1 exit status
make: *** [demo1] Fehler 1
Viele Grüße
Christian |
|
Back to top |
|
|
mha
Joined: 05 May 2006 Posts: 28
|
Posted: 23.05.2007, 09:03 Post subject: |
|
|
Hallo.
Die Demo sollte mit "make" oder "make all" übersetzt werden,
oder es muß explizit "make ssvirq.o" angegeben werden, um nur
das Kernel Modul zu übersetzen.
Ein "make ssvirq" versucht ein Programm aus "ssvirq.o" zu erzeugen,
was nicht funktionieren kann.
Damit das Übersetzen der Programme "demo1" und "demo2" gelingt,
muß eine kleine Anpassung in der Toolchain "arm-toolchain-SSV20011207.tgz"
vorgenommen werden.
Es gibt zwei Möglichkeiten:
Möglichkeit 1)
Im Verzeichnis der Toolchain "/usr/local/arm-linux/arm-linux"
den Link "sys-include" löschen und "sys-include.org" in "sys-include"
umbenennen.
# cd /usr/local/arm-linux/arm-linux
# rm sys-include
# mv sys-include.org sys-include
oder
Möglichkeit 2)
Im Verzeichnis der Toolchain "/usr/local/arm-linux/arm-linux"
den Link "sys-include" mit dem ARM-Kernel verbinden.
# cd /usr/local/arm-linux/arm-linux
# rm sys-include
# ln -s /usr/src/linux-2.4.19-rmk7-pxa2-ssv1/include sys-include
Jetzt sollte es funktionieren.
Bemerkung:
Der Fehler ist in der Toolchain "arm-toolchain-SSV20020812.tgz" beseitigt.
Gruss Marco |
|
Back to top |
|
|
cra
Joined: 19 May 2007 Posts: 6
|
Posted: 23.05.2007, 20:57 Post subject: Es funktioniert |
|
|
Es funktioniert
Danke
Christian |
|
Back to top |
|
|
|