¿Historial de syscalls agregado a Linux?

3 minutos de lectura

¿Hay algún lugar donde pueda obtener una lista completa de la versión mínima de Linux necesaria para cada llamada al sistema? Estoy buscando una respuesta general a preguntas del tipo “Si uso syscall X, ¿cuál es la versión mínima de Linux en la que se puede ejecutar mi código?”

  • Siempre está la fuente… *risita malvada*.

    usuario166390

    22 de julio de 2011 a las 23:18


  • ¿Te refieres a la versión mínima de Linux en la que se ejecutará la llamada con los parámetros especificados y con el comportamiento esperado? sonrisa malvada

    –Karoly Horvath

    22 de julio de 2011 a las 23:23


  • Me refiero a la versión mínima con la que no volverá el syscall ENOSYS o lo que sea que haga para números de llamada al sistema no válidos. Entiendo que algunas llamadas al sistema tenían un comportamiento incompleto o roto en versiones anteriores, por lo que la información sobre eso también sería buena, pero más allá del alcance de mi pregunta original. 🙂

    – R.. GitHub DEJA DE AYUDAR A ICE

    22 de julio de 2011 a las 23:44

  • Si esto se va a usar realmente, también sería bueno tener una fe de erratas. “Implementado” no siempre es lo mismo que “implementado y funcionando decentemente”.

    – Profesor Falken

    15 de febrero de 2012 a las 10:48

  • @AmigableClarkKant: Sí, pero si miras mis preguntas, (¿casi?) todas las que no tienen una respuesta aceptada son preguntas realmente difíciles que aún no tienen una solución o donde hay múltiples opiniones en conflicto como respuestas y no fuentes autorizadas. 🙂

    – R.. GitHub DEJA DE AYUDAR A ICE

    15 de febrero de 2012 a las 16:29

Esta información se puede encontrar en el syscalls(2) página de manuales. Para aquellas llamadas al sistema donde no se indica la versión del kernel, la llamada al sistema apareció en el kernel 1.0 o anterior.

  • Hasta ahora, esta parece ser la mejor respuesta. No sé cómo me perdí esto para empezar.

    – R.. GitHub DEJA DE AYUDAR A ICE

    11 de febrero de 2012 a las 23:24

Linus ha criticado durante mucho tiempo la verificación del espacio de usuario para versiones particulares del kernel para saber si una función está disponible; el enfoque recomendado es probar la función que desea (las llamadas al sistema no implementadas devuelven ENOSYS).

Una de las razones de esto es que los números de versión simplemente no significan tanto como parecen: los núcleos de distribución, que la mayoría de los usuarios están ejecutando, a menudo tienen funciones retroportadas de versiones más nuevas del núcleo. Algunos de ellos son verdaderos monstruos de Frankenstein en este sentido.

  • Mi razón para preguntar no es verificar si una función está disponible en tiempo de ejecución, sino estimar si me estoy excluyendo de versiones compatibles que podrían ser relevantes dependiendo de ciertas llamadas al sistema.

    – R.. GitHub DEJA DE AYUDAR A ICE

    23 de julio de 2011 a las 0:19

Puede encontrar esto al usar sitios como http://linux.die.net/ cerca de la parte inferior de las páginas para las llamadas API, en la sección ‘Versión’. Por ejemplo, se agregó inotify en Linux 2.6.13.

Para las llamadas posix, esto no se aplicará porque se recopilan según las especificaciones de Posix, por ejemplo, read tiene una sección ‘Conforme’ que menciona POSIX.1-2001.

  • De hecho, el que estaba buscando en este momento era clock_gettime cuya página man no especifica.

    – R.. GitHub DEJA DE AYUDAR A ICE

    22 de julio de 2011 a las 23:46

Hay una lista de llamadas al sistema en el archivo include/asm-generic/unistd.h. Puede consultar el historial de ese archivo en:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=history;f=include/asm-generic/unistd.h;h=2292d1af9d705f129ae523ce00a6b7794fb1648c;hb=8df54d622a120058ee8bec38743c9b8e589

No estoy seguro acerca de las llamadas al sistema para otro arco que no sea x86. Puede haber detalles.

¿Ha sido útil esta solución?