Avatar billede Swift Praktikant
28. april 2003 - 15:58 Der er 7 kommentarer og
2 løsninger

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;   
}
Avatar billede jpvj Nybegynder
28. april 2003 - 16:00 #1
Prøv at 0 terminere.

kernelbuf[5] = 0;
 
  int len = 5;


JP
Avatar billede jpvj Nybegynder
28. april 2003 - 16:08 #2
Der skulle naturligvis have stået kernelbuf[4] = 0;
Avatar billede Swift Praktikant
28. april 2003 - 16:10 #3
Det har jeg prøvet - men jeg synes problemet var det samme...
Avatar billede a_eriksen Nybegynder
28. april 2003 - 16:20 #4
Måske skulle du prøve at sende en EOF?
Avatar billede a_eriksen Nybegynder
28. april 2003 - 18:45 #5
Fra cat.c

for (prev = '\n'; (ch = getc(fp)) != EOF; prev = ch) {

så mon ikke det skulle virke..
Avatar billede Swift Praktikant
29. april 2003 - 13:03 #6
eriksen: Hvordan sætter man en EOF ind i det array man returnerer ??
Avatar billede a_eriksen Nybegynder
29. april 2003 - 14:22 #7
Det var sådan set bare et gæt, så jeg ved det desværre ikke :)
Avatar billede Swift Praktikant
27. maj 2003 - 21:48 #8
Jeg lavede arrayet 3 pladser for langt. Og fyldte ekstra 0'er i!
Avatar billede a_eriksen Nybegynder
27. maj 2003 - 22:02 #9
swift: Hmm.. Det lyder som en skummel løsning.
btw, jeg synes nok jeg havde hørt "swift" et eller andet sted fra... Smølf!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester