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).