Kernel space device driver - READ funktion problemer???
Jeg har en device driver der via interrupts ind- og udlæser data og gemmer dem i driverens hukommelse.Via READ og WRITE funktionerne vil jeg så gerne kunne hente og gemme data fra mit device.
Min WRITE funktion kan jeg "aktivere" vha:
echo "1234" > /dev/flaf
Og det virker fint!
Min READ funktion kan jeg også "aktivere" vha:
cat /dev/flaf - MEN HER OPSTÅR DER SÅ ET PROBLEM.
Device driveren bliver ved med at spytte data tilbage i hovedet af mig. Det samme data - igen og igen!
Dataene består af 4 chars som bliver gentaget uendeligt.
Jeg regner med at det er fordi at man på den sidste plads i sit output array skal specificere EOF eller noget i den stil.
Men hvordan gøres det ???
Herunder en kopi af min READ funktion
-------------------------------------------
ssize_t flafRead(struct file *filp, char *userbuf, size_t count, loff_t *offp)
{
char kernelbuf[MAXLEN];
if (filp->f_flags & O_NONBLOCK)
return -EWOULDBLOCK;
kernelbuf[0] = 't';
kernelbuf[1] = 'e';
kernelbuf[2] = 's';
kernelbuf[3] = 't';
int len = 4;
copy_to_user(userbuf, kernelbuf, len);
filp->f_pos += len;
return len;
}
