are there other options for interfacing device drivers in Linux that doesn't go through device files?
Sim, os dispositivos de rede não têm um arquivo de dispositivo em / dev ou usam operações de leitura / gravação, pois não reagem apenas em resposta a chamadas do espaço do kernel - eles também reagem em resposta ao tráfego de rede. seu conjunto de operações é diferente. Isso está em contrato para char e bloquear dispositivos, que têm nós de dispositivo de arquivo.
Os dispositivos de rede usam soquetes e buffers de soquete para se comunicar, e as chamadas principais usadas são socket (), bind (), listen (), accept (), read (), write () e close (). Há muitas informações disponíveis sobre eles na web, e o (bastante antigo agora) livro de drivers de dispositivos Linux (LDD3) é uma boa introdução e está disponível online gratuitamente.