Linux kernel modul (Driver) za A/D karticu CIO-DAS08jr
------------------------------------------------------------------------
Popis datoteka
----------------------
README - ova datoteka
Makefile - Makefile skripta za kompajliranje
a2dc.c - DAS08jr programski kod drivera
a2dc.h - include datoteka
!Nakon svakog novog ukljuèenja raèunala za pokretanje sustava potrebno je instalirati
driver naredbom "insmod -f das08jr.o" u direktoriju " /home/projekt/drv ".
Kompajliranje i instalacija:
-----------------------------------
1. Potrebno je na kartici pomocu mikroprekidaca postaviti BASE_ADDRESS
sto je adresa prvog registra kartice. Tu vrijednost je potrebno
upisati u a2dc.h. Npr. ako je pocetna adresa 0x330 (heksadecimalno)
tada se u a2dc.h upisuje:
#define DAS08_BASE 0x330
2. Za device datoteke potrebno je definirati MAJOR device number.
Ovdje je taj broj postavljen na 31, zato sto je ta vrijednost
uglavnom slobodna. Nije preporucljivo mijenjati taj broj ukoliko
nije potrebno, a ako je nuzno tada treba u Makefile promijeniti
sljedecu liniju da odgovara promjeni.
MAJOR_DEV=31
3. Za prvo kompajliranje drivera potrebno je napisati:
make
Za svako sljedece kompajliranje potrebno je prvo napisati
make clean
i onda
make
jer inace make program nece htjeti kompajlirati driver
ukoliko vec postoji stara verzija.
Device datoteke
---------------
Nakon uspjesnog kompajliranja potrebno je napraviti device
datoteke u /dev direktoriju sljedecom naredbom:
make devices
Nakon ove naredbe, u /dev direktoriju se nalaze datoteke
/dev/das08jr_adc00
/dev/das08jr_adc01
/dev/das08jr_adc02
/dev/das08jr_adc03
/dev/das08jr_adc04
/dev/das08jr_adc05
/dev/das08jr_adc06
/dev/das08jr_adc07
koje predstavljaju 8 A/D kanala, i datoteka
/dev/das08jr_dio
koja predstavlja digitalni ulaz-izlaz.
Instalacija drivera
-------------------
Kako napraviti instalaciju prilikom boota ostavljam
onima koje to zanima (pogledati rc skripte u /etc/rc).
Naredba insmod instalira kernel modul.
prompt> insmod -f das08jr.o
instalirat ce modul i ispisati poruku o uspjesnosti/neuspjesnosti.
Korisne naredbe su:
lsmod (ispisuje listu kernel modula) i
rmmod (brise modul iz kernela)
Napomena: rmmod das08jr , a NE rmmod das08jr.o
Upotreba
--------
#include <sys/ioctl.h>
#include <sys/types.h>
#include <fcntl.h>
...
int fd;
if( (fd = open("/dev/das08jr_adc01", NACIN_RADA)) < 0){
puts("\tNe mogu otvoriti adc01!);
exit(0);
};
...
Ove naredbe ce otvoriti drugi A/D kanal.
NACIN_RADA je bilo sto od sljedeceg:
ADC_SOFT_TRIGGER
O_RDONLY
0 (nula)
Sve predstavlja istu stvar, a preporucam O_RDONLY.
Za citanje podataka koristiti naredbu read (NE fread).
Za detalje: man read.
Napomena: Naredbe read, write obavljaju poslove BEZ bufferiranja,
za razliku od fread i fwrite naredbi. Moguce je i njih
koristiti, ali tada je potrebno definirati
FILE *fd (pointer na strukturu file), a ne
int fd (file descriptor) i nuzno je iza svake
fread naredbe koristiti fflush(fd) kako bi se ispraznio
buffer. fread svakako nije preporucljiv jer nema garancije
da scheduler nece prekinuti program izmedju
fread i fflush sto moze dovesti do cijelog
spektra zanimljivih ponasanja.
TEST PROGRAMI
Ovo su test programi za A/D karticu CIO DAS08 JR.
Prije pokretanja bilo kojeg od ovih programa, POTREBNO
je INSTALIRATI DRIVER!!!!!!!!
Upotreba make programa
======================
Make program izvrsava Makefile skriptu.
1.
----------------------------------------------------
prompt>make clean
Ovaj poziv cisti zaostale programe, sto je nuzno jer
inace make nece htjeti kompajlirati programe.
2.
----------------------------------------------------
prompt>make
ili
prompt>make all
Ukoliko sve bude u redu, ovo ce proizvesti tri datoteke:
dtest, dio i volt.
3.
----------------------------------------------------
prompt>make install
Ovo ce kopirati datoteke dtest, dio i volt u direktorij:
a2s_test/bin.
----------------------------------------------------------------------------------------------------------
Testni programi su jednostavni programi kojima se samo
dokazuje da kartica i driver rade kako treba. Prvi je volt.c
kojim preko potenciometra reguliramo napon, taj
napon se ocitava i prikazuje na LED diodama. Nešto kao
jednostavan VU metar. Drugi program je bio dtest.c
koji po nekom redosljedu pali i gasi diode na vanjskoj
plocici te na kraju binarno broji. Treci i zadnji testni
program je bio dio.c koji je citao stanje digitalnih ulaza
te ih ispisivao na izlaz tj. njihova stanja je prikazivao
na LED diodama. Programi su detaljno komentirani.
FIFO server i FIFO klijent
Driver i FIFO server komuniciraju pisanjem i citanjem u device datoteke.
(nalaze se u /dev poddirektoriju).
FIFO server i FIFO klijent razmjenjuju podatke pisanjem i citanjem u FIFO
cjevovod (datoteku). Program fserver stvara dva cjevovoda, jedan za PID
procesa, a drugi za podatke. FIFO klijent zahtjeve za odreðenim akcijama
daje FIFO serveru šaljuæi mu signale (koji su vec definirani). Signali su
upoznati u PPMPS vjezbi br. 3.
Signali koji se koriste i uloga koju smo im namijenili su:
SIGUSR1 fserver cita 100 podatka sa kanala 4 (signal-generator)
i šalje ih na podatkovni cjevovod
SIGUSR2 fserver cita 1000 podatka sa kanala 4 (signal-generator)
i šalje ih na podatkovni cjevovod
SIGHUP fserver cita podatak o stanju digitalnih ulaza (4 tipke, 1 By)
i šalje ih na podatkovni cjevovod i na digitalni izlaz
(pali odgovarajuce diode)
SIGINT fserver cita 10 podatka sa kanala 1 (potenciometar)
i šalje ih na podatkovni cjevovod
Svaki signal uzrokuje i ispis na kranu proèitanih vrijednosti.
FIFO klijent u ovom obliku sluzi samo da se ispita komunikacija sa fserverom.
Da bi se programi kompajlirali potrebno je biti logiran kao student i nalaziti se
u direktoriju /home/projekt/fifo.
prompt>gcc -O2 -Wall fserver.c -o fserver
prompt>gcc -O2 -Wall fclient.c -o fclient
fserver i fklijent se pokreæu svaki u svojoj konzoli. Potrebno je prvo pokrenuti
fserver (on prvo mora zapisati svoj PID u imenovani cjevovod, e da bi fclient
znao kome slati signale).