Всё что угодно можно абстрагировать в файл -- для этого всё, кроме open/read/write, может делаться через ioctl(). Да и read/write может и не делаться, для memory mapped io (зачем втупую копировать -- пусть контроллер через DMA из юзерспейса сразу посылает и принимает). Смотри, например, как V4L работает:
http://www.linuxtv …ec-single/v4l2.html#io