Newsgroup: it.comp.os.linux.development
Titolo: Compilazione di Device Driver

Ciao,
Sto provando ad imparare come si scrivono i device driver sotto linux e ho
dei problemi con la compilazione sotto Mandrake 7.0 .
Ho provaro a compilare un driver di esempio trovato sulla rete, ma non c'e'
niente da fare sembra che il compilatore trovi degli errori nei file di
include. Ma questi sono quelli del kernel e quindi non credo proprio che ci
siano degli errori.
Magari sbaglio qualcosa io ma non riesco a capire il sorgente sembra del
tutto
simile ai drivers presenti nei sorgenti del kernel.
Qualcuno ha avuto una esperienza simile e risolto la situazione?
max@stc2caoapc1c~/drivers> gcc -DMODULE -D__KERNEL__ -O -c foo.c
In file included from /usr/include/linux/sched.h:13,
                 from foo.c:24:
/usr/include/linux/times.h:5: parse error before `clock_t'
/usr/include/linux/times.h:5: warning: no semicolon at end of struct or
union
/usr/include/linux/times.h:6: warning: data definition has no type or
storage
class
/usr/include/linux/times.h:7: parse error before `tms_cutime'
/usr/include/linux/times.h:7: warning: data definition has no type or
storage
class
/usr/include/linux/times.h:8: parse error before `tms_cstime'
/usr/include/linux/times.h:8: warning: data definition has no type or
storage
class
In file included from /usr/include/linux/sched.h:14,
                 from foo.c:24:
/usr/include/linux/timex.h:159: field `time' has incomplete type
In file included from /usr/include/linux/signal.h:4,
                 from /usr/include/linux/sched.h:23,
                 from foo.c:24:
grazie.

dei problemi con la compilazione sotto Mandrake 7.0 .
Purtroppo gli include del kernel di linux sono un po' str#@$i...
Ti posso suggerire di includere prima un qualosa del tipo linux/types.h
O meglio guardati i sorgenti del kernel e vedi dove e' incluso lo header
time.h; e metti prima tutti gli header che ci sono la'. Anche io mi sono
imbattutto negli stessi problemi ... abbi fede ...

imbattutto negli stessi problemi ... abbi fede ...
Sono riuscito finalmente a compilare, usando un Makefile che è sugli
esempi del libro di Rubini sui Device Drivers e aggiungendo un include
per  Rules.make.
Ora però ho un altro problema: su tutti i tutorial e documenti che ho
trovato sulla
rete e presumo, anche il Libro di Rubini (1998) si parla dei dello sviluppo
dei drivers sotto kernel 2.0.x . Ma nei kernel 2.2.x le chiamate di sistema
sono radicalmente cambiate, ad esempio:
 #include <asm/segment.h>        /* for put_user_byte */
in realtà questo include contiene 4 righe di codice e la funzione
"put_user_byte"
e molte altre che erano presenti nel segment.h dei vecchi kernel sono state
rimosse, e sostituite con chissa cosa!
Quello che mi domando è se esistono documentazioni in rete di tutte queste
funzioni, mi sembra paradossale andarsi a leggere tutti i sorgenti x carpire
cosa fanno. Ma non mi sembra di aver trovato gran che!
con il kernel 2.4.x e i prossimi, le cose cambieranno ancora?
Allego qui il Makefile che funziona correttamente con la Mandrake 7.0
e kernel 2.2.14.  :
------------------------
# Comment/uncomment the following line to disable/enable debugging
#DEBUG = y
# Change it here or specify it on the "make" commandline
INCLUDEDIR = /usr/include
ifeq ($(DEBUG),y)
  DEBFLAGS = -O -g -DSCULL_DEBUG # "-O" is needed to expand inlines
else
  DEBFLAGS = -O2
endif
CFLAGS = -D__KERNEL__ -DMODULE -Wall $(DEBFLAGS) -DSCULL_USE_PROC
CFLAGS += -I.. -I$(INCLUDEDIR)
# Extract version number from headers.
VER = $(shell awk -F\" '/REL/ {print $$2}' $(INCLUDEDIR)/linux/version.h)
TARGET = test
OBJS = $(TARGET).o
SRC = main.c
all: .depend $(TARGET).o
$(TARGET).o: $(SRC:.c=.o)
 $(LD) -r $^ -o $@
clean:
 rm -f *.o *~ core .depend
depend .depend dep:
 $(CC) $(CFLAGS) -M *.c > $@
ifeq (.depend,$(wildcard .depend))
include .depend
endif
include /usr/src/linux/Rules.make
--------------------
Ciao, Pusillus. (
ringzer0.goldrake.com
)

con il kernel 2.4.x e i prossimi, le cose cambieranno ancora?
Direi di si ...
Guarda su 
www.linuxdoc.org
Troverai quel che cerchi.
Ciao
Fausto

 
/* 
 * The latest version of this document may be found at: 
 * 
http://www.dit.upm.es/~jmseyas/linux/kernel/hackers-docs.html
 
 */
Io mi sono basato su quello per trovare documentazione aggiornata ( ai tempi
del 2.2 )