linux - llamadas - llamar a una función del módulo del kernel desde el programa en el espacio de usuario
llamadas al sistema en windows (4)
Como han mencionado otros carteles, hay una clara distinción entre el núcleo y el espacio del usuario. Así que no, no puedes llamar a una función del núcleo directamente desde el espacio del usuario. Creo que la forma más fácil de enviar mensajes entre el espacio de usuario y el espacio del kernel es a través de sockets de enlace de red. Un socket de enlace de red le permite pasar fácilmente estructuras de datos arbitrarias entre el nivel de usuario y el nivel de kernel.
Sí, las llamadas al sistema son alternativas viables, no son tan flexibles como el socket de enlace de red para pasar información arbitraria.
Código de ejemplo aquí: http://people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto-3.html
Desarrollé un módulo de kernel y algunas funciones en él. Ahora necesito desarrollar un programa en el espacio del usuario y llamar a algunas funciones que están en el módulo del kernel.
También necesito acceder a alguna variable global que se encuentra en el módulo del kernel de mi programa en el espacio de usuario.
Deberá instalar un nuevo kernel para hacer uso de la nueva llamada, a menos que ya tenga algún mecanismo para actualizar el kernel ... http://www.cyberciti.biz/tips/how-to-patch-running-linux-kernel.html
Hay una descripción completa del módulo linux-kernel y el programa de espacio de usuario interactuando http://wiki.tldp.org/kernel_user_space_howto " Kernel Space, User Space Interfaces " por Ariane Keller (es de 2008-09-28, pero aproximadamente 2.6 kernels; solo una nueva forma importante es relayfs )
No se enumera ninguna llamada de función ordinaria del espacio del usuario al espacio del kernel, solo syscall (agregar una nueva syscall no es fácil) y upcall (llamar en dirección inversa).
Una de las interfaces más fáciles es ioctl; pero no puede comenzar a usar ioctl antes de crear procfs, sysfs o archivos similares.
Otro es sysctl; pero sysctl es más elegible para leer / escribir en una variable global. (Es difícil pasar varios parámetros a través de la interfaz sysctl).
Parece que te estás perdiendo el punto de separación entre kernel y usuario. Si su programa de usuario pudiera modificar los datos dentro del kernel directamente, eso llevaría rápidamente al desastre.
Solo hay una forma convencional para que un programa de usuario solicite explícitamente servicios desde el kernel: make a system call
.
También hay trampas y algunos mecanismos de comunicación específicos de Linux en el núcleo del usuario, pero estos no son relevantes aquí.