Ik ben net begonnen met het schrijven van een kernel module voor 2 simpele stukje hardware.
Nu maken deze apparaatjes gebruik van dezelfde interface, dus dacht ik slim te zijn en de drivers op te delen in 3 stukken: 1 voor de interface en 2 voor de afzonderlijke stukjes hardware.
Ik heb het nu dus opgedeeld in 3 devices:
/dev/interf
/dev/app1
/dev/app2
schrijven of lezen van/naar /dev/interf zorgt dus dat de interface al vanaf de userspace benaderd kan worden.
schrijven en lezen naar app1 en app2 zorgt dus dat de apparaten vanuit de userspace benaderd kunnen worden.
Nu heb ik de drivers in principe af, maar loop ik tegen een probleem aan: de app1 en app2 drivers moeten kunnen schrijven naar de interface, maar open(), ioctl, write() e.d. zijn natuurlijk niet beschikbaar in kernel-space.
Nu kan ik natuurlijk wel de functies van /dev/interf mee-compilen met app1 en app2, maar dat doe ik liever niet: /dev/interf claimt namelijk een stukje geheugen met request_mem_region(..) en ik weet niet of meerdere drivers dat tegelijk kunnen doen met hetzelfde stukje geheugen (het zijn memory-mapped I/O registers)
Weet iemand een alternatief, beter manier of een manier waarop het wel moet?
Nu maken deze apparaatjes gebruik van dezelfde interface, dus dacht ik slim te zijn en de drivers op te delen in 3 stukken: 1 voor de interface en 2 voor de afzonderlijke stukjes hardware.
Ik heb het nu dus opgedeeld in 3 devices:
/dev/interf
/dev/app1
/dev/app2
schrijven of lezen van/naar /dev/interf zorgt dus dat de interface al vanaf de userspace benaderd kan worden.
schrijven en lezen naar app1 en app2 zorgt dus dat de apparaten vanuit de userspace benaderd kunnen worden.
Nu heb ik de drivers in principe af, maar loop ik tegen een probleem aan: de app1 en app2 drivers moeten kunnen schrijven naar de interface, maar open(), ioctl, write() e.d. zijn natuurlijk niet beschikbaar in kernel-space.
Nu kan ik natuurlijk wel de functies van /dev/interf mee-compilen met app1 en app2, maar dat doe ik liever niet: /dev/interf claimt namelijk een stukje geheugen met request_mem_region(..) en ik weet niet of meerdere drivers dat tegelijk kunnen doen met hetzelfde stukje geheugen (het zijn memory-mapped I/O registers)
Weet iemand een alternatief, beter manier of een manier waarop het wel moet?