Newsgroup: it.comp.os.linux.development
Titolo: Modifica driver: quante cose non documentate...

Ciao a tutti,
Premessa: non ho mai sviluppato nulla sotto linux; ci smanetto da anni
ma solo come piccolo sistemista giocherellone :-)
Ho però 8 anni di esperienza come firmwarista, conosco quindi il C e
vari RTOS embedded.
Sto tentando di modificare il driver del chip W83627EHF per fargli
supportare anche i GPIO: ho una scheda madre a cui ne hanno connessi
otto e vorrei utilizzarli. Il file è driver/hwmon/w83627ehf.c.
Il problema è che nel driver ci sono tonnellate di cose per le quali non
riesco a trovare uno straccio di documentazione!!!
Ho visto che in /sys/devices/platform/ ci sono una valanga di voci
relative a ventole, allarmi, tensioni. Voglio aggiungere due "files",
gpio_dir e gpio_value, per pilotare la porta che ho in uscita.
Innanzitutto noto che molte di queste voci sono istanziate con la macro
SENSOR_ATTR e altri con DEVICE_ATTR. Quali sono le differenze? I loro
parametri?
Trovo poi un grosso uso di misteriosi metodi platform_driver*
(platform_driver_register(), platform_driver_alloc(),
platform_set_drvdata(), ecc).
Nulla di tutto questo c'è sul citatissimo "Linux device drivers 2a
edizione" di Rubini/Corbet.
Inoltre, ho letto più volte che i driver sono a caratteri o a blocchi
(dipende ovviamente da cosa bisogna pilotare); qui non ci sono
register_chrdev() o blkdev...
Per concludere, in realtà la cosa l'ho fatta ma totalmente al buio. Mi
piacerebbe però capire se quello che ho fatto ha un senso. Sono arrivato
che se setto i pin in ingresso leggo sempre 255; se li setto in uscita e
li piloto, rileggendo leggo effettivamente quanto ho settato. La cosa
sembra quindi funzionare se non fosse che i pin sul connettore stanno
sempre bassi. Forse non hanno portato la porta 3 come sembrerebbe dal
manuale utente. Purtroppo non riesco a vedere il chip; probabilmente è
montato sotto la scheda!
Ciao e grazie!
Lorenzo

 manuale utente. Purtroppo non riesco a vedere il chip; probabilmente è
Mi sono fatto un CD bootabile con sopra il DOS. Il manuale della scheda
madre fa vedere quali comandi dare sotto DEBUG.EXE per muovere i pin.
Effettivamente non vanno.
..Qualcuno ha una scheda madre Commell LV-678 e ha giocato con i GPIO?
Ciao,
Lorenzo


ciao, io ho fatto diversi lavori tipo quella che stai facendo tu. Succede 
spesso che chi fa un driver implementa delle proprie macro, che vengono 
usate solo in quel driver e quindi non sono documentate. Devi quindi cercare 
la definizione della macro in quelche .h. La funzione "find in files" di 
molti editor sara' tua amica !!!!
Fede 

 molti editor sara' tua amica !!!!
essendo su un gruppo linux, direi che è molto piu' amica find +
grep :)

fede ha scritto:


I metodi platform_device sono in include/linux/platform_device.h,
SENSOR_ATTR è definito in include/linux/hwmon-sysfs.h. Non sono quindi
cose definite da chi ha scritto questo driver!
Ciao e grazie,
Lorenzo

 piacerebbe però capire se quello che ho fatto ha un senso. Sono arrivato
Il produttore mi ha fornito un eccellente supporto. Ho visto che per
testarli lui usa una scheda con dei LED, mentre io usavo un
oscilloscopio. In pratica i pin sono degli open-drain e non hanno
montato i pull-up sulla scheda madre. Ho messo i pull-up e ora funziona.
Se qualcuno ha una scheda Commell LV-678 e vuole pilotare i GPIO sotto
linux faccia un fischio; gli manderò il file drivers/hwmon/w83627ehf.c
(preso dal kernel 2.6.25.9). Se poi trova magagne e le sistema, tanto
meglio!
Ciao,
Lorenzo