/ proc / sys vs / sys / modules / mod / parameter

10

Me he estado preguntando durante los últimos días cómo funciona exactamente. Podemos establecer parámetros de tiempo de ejecución del kernel usando sysctl o echo boolen 1> /proc/sys/module/exactParameterpero /sys/modules/module/parameters/parametertambién podemos establecer valores.

¿Están los parámetros para los módulos /proc/sys/relacionados solo con el núcleo? ¿o podría haber parámetros para los módulos de kernel cargables también?

LKM después de ser cargado en Kernel en ejecución revela sus parámetros en /sys/modules/module/paraeter/params. ¿Significa que no hay parámetros para módulos compilados en Kernel?

¿Cuál es la diferencia entre ambos directorios?

ast
fuente

Respuestas:

5

Hay poca relación entre /proc/sysy /sysaparte del hecho de que ambas son interfaces de kernel y una coincidencia de nombres.

/proc/syses una interfaz para sysctl , que son parámetros de configuración del kernel. Leer o modificar /proc/sys/foo/bares equivalente a obtener o configurar el foo.barsysctl. Los valores de Sysctl están organizados por categorías semánticas, no están intrínsecamente relacionados con la estructura del núcleo. Muchos valores sysctl son configuraciones que están presentes en todos los sistemas Linux, independientemente de los controladores o características que se compilan; algunos están relacionados con funciones opcionales (por ejemplo, ciertos protocolos de red) pero nunca con dispositivos de hardware específicos.

/sys/modulees, como su nombre lo indica, una interfaz para los módulos del núcleo. Cada directorio corresponde a un módulo del núcleo. Puede leer, y en ocasiones modificar, los parámetros del módulo fooescribiendo a /sys/module/foo/parameters/*.

Los componentes que se cargan en el kernel leen sus parámetros desde la línea de comando del kernel. Estos parámetros no se pueden establecer en tiempo de ejecución (al menos no a través de una interfaz generada automáticamente como /sys/module: el componente puede exponer una interfaz personalizada para esto).

Gilles 'SO- deja de ser malvado'
fuente
Entonces, para los módulos compilados en Kernel, solo puedo agregar parámetros a través de la línea de comando del kernel (como: / proc / cmdline). ¿No hay otra forma de cambiarlos en tiempo de ejecución? ¿Lo he entendido bien? Entonces, ¿qué son exactamente estos parámetros del kernel (configuración)? Pensé que son parámetros cambiables de algunos módulos compilados en el kernel
AST
@ast Los parámetros de sysctl están documentados Documentation/sysctl/*.txten la documentación del kernel de Linux. Es un conjunto de parámetros que se aplican principalmente independientemente de las características y controladores que se compilan en un núcleo en particular.
Gilles 'SO- deja de ser malvado'
muchas gracias, estaba tratando de entender completamente esta relación y pasé 3 días leyendo muchas cosas para encontrar una respuesta.
ast
3

El documento " El sistema de archivos sysfs " de Patrick Mochel le dará una visión general mucho mejor del propósito y la historia de lo /sysque cabe en este cuadro. Citando el resumen:

sysfs es una característica del núcleo Linux 2.6 que permite que el código del núcleo exporte información a los procesos del usuario a través de un sistema de archivos en memoria. La organización de la jerarquía de directorios del sistema de archivos es estricta y se basa en la organización interna de las estructuras de datos del núcleo. Los archivos que se crean en el sistema de archivos son (en su mayoría) archivos ASCII con (generalmente) un valor por archivo. Estas características aseguran que la información exportada sea precisa y de fácil acceso, haciendo que sysfs sea una de las características más intuitivas y útiles del kernel 2.6.

En respuesta a su pregunta específica "¿El módulo de núcleo cargable obtiene una representación /sys? la respuesta es "sí, si el autor del módulo proporciona una interfaz". Esto se puede demostrar fácilmente al mostrar cuántos módulos cargados tienen entradas correspondientes en/sys/module

$ lsmod | awk '{print $1}' | sort > /tmp/lsmod
$ cd /sys/module ; ls > /tmp/sysmodule
$ comm -12 /tmp/lsmod /tmp/sysmodule
ahci
arc4
ath
ath9k
ath9k_common
ath9k_hw
bluetooth
bnep
cfg80211
…

que en mi sistema muestra que 73 de los 73 módulos cargables tienen una entrada correspondiente /sys/module.

msw
fuente
Encontré información especialmente sobre / sys / modules /, que siempre hay LKM y module_param (name, type, perm) impacta la apariencia de los parámetros del directorio. Pero todavía tengo preguntas sobre sysctl y / proc / sys, donde podemos configurar los parámetros de Kernel Runtime. ¿Por qué no es posible emplear / sys / modules? ¿Y dónde establecemos los parámetros para los módulos compilados de Kernel (/ sys / modules / o también en / proc / sys /)? Tal vez mezclo opciones del núcleo con los parámetros del módulo (pensé que ellos son los mismos) por lo que usar sysctl debería ajustar el parámetro de módulo o algunas funciones del kernel
AST