Tja jag tänkte att det var lika bra att fråga här då det har mer med Linux teori än ren programmering.
Jo det är så här att jag skall interfaca generella portar på min dator. Men jag har lite problem med att förstå mig på det hela.
I detta exempel så är det bara en knapp(brytare) jag skall koppla in på nån av ingångarna.
I kernelspace så får man använda IRQ,DMA och diverse sleep funktioner när man programmerar. Javisst detta är ju jätte bra. När jag väljer att skriva en drivrutin så kan jag välja att antingen skriva en charachter device eller en blockdevice. Eftersom jag i kernelspace får använda avbrott så behöver jag inte ligga och polla ingången utan jag kan använda mig av avbrott som hårdvaran genererar.
Jag bestämmer mig nu för att det är en character device jag vill skriva en drivrutin för.
Jag skriver min drivrutin som använder sig av avbrott då denna porten har tillgång till ett externt avbrott.
Det interesanta här nu som jag inte lyckas hitta nån information om är hur jag i userspace kan sitta och läsa av charachter device utan att sno en massa cpu tid. Eftersom jag i userspace inte har tillgång till interrupts så måste jag ju ligga och polla charachter devicen efter ny information och jag får ett program som tar en massa onödig cputid.
Jag skulle kunna använda mig av sleep i userspace, men då finns det ju en chans att jag missar information som skickas på charachter devicen.
Så frågan är hur skriver jag ett userspace program som går ner i sleep och vaknar till liv när det finns ny data att hämta från devicen.
När jag höll på med client serverprogrammering så kunde man sätta om man ville ha blocking mode eller streaming mode där blocking mode satte processen i sleep tills det fanns något att läsa frånsocketn. Detta borde betydda att mitt lilla problem är lösbart. Iofs så är ju eth0 en blockdevice skulle jag gissa.
Jag vet inte om det är nått fundamentalt jag missat efter att ha läst sida upp och sida ner när jag läst om hur man skriver linux drivrutiner. För jag tror inte att man använder massa usleep i userspace för att sitta och läsa av en device, känns som om man skulle slösa en massa resurser då.
Finns det nån linux guru som kan hjalpa mig på traven ?