He tomado bits del código de espacio de usuario que he escrito y lo he convertido para trabajar en el kernel (es decir, usando kmalloc(), etc.), no es tan difícil . Sin embargo, está limitado a la comprensión del kernel de C, no del espacio de usuario, que difiere ligeramente ... especialmente con varios tipos de int estándar.
Recién vinculado al espacio de usuario DSO no es posible: el kernel de Linux es monolítico, completamente autónomo. No usa libc del espacio de usuario, bibliotecas u otros bits como otros han notado.
9/10 veces, encontrará lo que necesita en algún lugar en el kernel.Es muy probable que alguien más haya encontrado la misma necesidad que usted y haya escrito algunas funciones estáticas en algún módulo para hacer lo que quiera. Solo agárrelas y vuelva a utilizarlas.
En el caso de la criptografía, como han dicho otros, simplemente use lo que está en el kernel. Una cosa a tener en cuenta es que necesitarás que estén habilitados en kconfig, lo que puede suceder o no dependiendo de lo que el usuario seleccione al compilarlo. Por lo tanto, tenga cuidado con las dependencias y sea explícito, puede que tenga que piratear algunas entradas en kconfig que también seleccionen la API de cifrado que desea cuando se selecciona su módulo. Hacer eso puede ser un poco doloroso al construir fuera del árbol.
Así que, por un lado, hemos "copiado y cambiado el nombre de las cosas al agregar relleno general", por el otro, tiene "decirle a las personas que deben tener la fuente completa del núcleo". Es uno de los caprichos que vienen con un kernel monolítico.
Con un Microkernel, casi todo se ejecuta en el espacio de usuario, no hay preocupaciones que se relacionen con un DSO para un controlador ... no es un problema. Por favor, no tome esa declaración como una señal para reiniciar la filosofía de diseño del núcleo en los comentarios, eso no está en el alcance de esta pregunta.