Conozco todas las discusiones sobre por qué uno no debería leer / escribir archivos desde el kernel, sino cómo usar / proc o netlink para hacer eso. Quiero leer / escribir de todos modos. También he leído Driving Me Nuts: Cosas que nunca debes hacer en el núcleo .
Sin embargo, el problema es que 2.6.30 no se exporta sys_read()
. Más bien está envuelto SYSCALL_DEFINE3
. Entonces, si lo uso en mi módulo, recibo las siguientes advertencias:
WARNING: "sys_read" [xxx.ko] undefined!
WARNING: "sys_open" [xxx.ko] undefined!
Obviamente insmod
no se puede cargar el módulo porque la vinculación no ocurre correctamente.
Preguntas:
- ¿Cómo leer / escribir dentro del kernel después de 2.6.22 (donde
sys_read()
/sys_open()
no se exportan)? - En general, ¿cómo usar las llamadas al sistema envueltas en macro
SYSCALL_DEFINEn()
desde dentro del kernel?
fuente
Desde la versión 4.14 del núcleo de Linux,
vfs_read
yvfs_write
funciones están ya no se exportan para su uso en módulos. En cambio, se proporcionan funciones exclusivamente para el acceso a archivos del kernel:Además,
filp_open
ya no acepta cadenas de espacio de usuario, por lo que se puede usar para acceder al kernel directamente (sin bailar conset_fs
).fuente