A descrição "userspace kernel module" é uma contradição em termos: qualquer um é executado no userspace, ou é executado no kernel, mas não pode ser executado em nenhum dos dois, e você não pode executar módulos do kernel no userspace. / p>
Dito isso, é possível escrever drivers de dispositivo no espaço do usuário, fazendo uso de APIs de kernel bastante gerais (que são executadas no espaço do kernel, independentemente de serem módulos ou não) e implementando funcionalidade real do driver de dispositivo no espaço do usuário. Os drivers de dispositivo que usam libusb
, spidev
ou i2cdev
são exemplos: eles usam uma biblioteca para acessar APIs de kernel conhecidas ou acessam as APIs diretamente, mas a lógica do driver de dispositivo é executada no espaço do usuário.
Outro exemplo semelhante é o fusível : usando APIs fixas do kernel, você pode implementar seu próprio sistema de arquivos no espaço do usuário.
Então, se você quiser exemplos, procure drivers de dispositivo usando essas APIs. Mas eles ainda serão exemplo de "drivers de dispositivo de espaço do usuário", não de "drivers de dispositivo do kernel do espaço do usuário", então não tenho certeza se é isso que você quer.
Se você quiser escrever algo que rode no espaço do kernel, você precisa aprender a escrever um módulo do kernel.