[Conceptos básicos de Linux]: explicación detallada del administrador de dispositivos de Linux udev

1. ¿Qué es udev?

udev es el administrador de dispositivos de la serie Linux Kernel 2.6. Su función principal es administrar los nodos del dispositivo en el directorio / dev. También se usa para reemplazar las funciones de devfs y hotplug, lo que significa que tiene que lidiar con el comportamiento del directorio / dev y todo el espacio de usuario al agregar / quitar hardware, incluso al cargar firmware.

La última versión de udev depende de la última versión de la interfaz uevent del Kernel Linux 2.6.13 actualizado. El sistema que usa la nueva versión de udev no se puede iniciar con la versión 2.6.13, a menos que se use el parámetro noudev para deshabilitar udev y se use el / dev tradicional para la lectura del dispositivo.

En segundo lugar, los beneficios de usar udev

  1. Cuando se agrega o elimina un dispositivo, el marco del demonio de udev escucha el uevent del kernel para agregar o eliminar archivos de dispositivo en / dev, por lo que udev solo genera archivos de dispositivo para dispositivos conectados, no en / dev Una gran cantidad de archivos de dispositivo virtual.
  2. Los usuarios de Linux pueden generar nombres de archivos de dispositivos de manera flexible con una identificación sólida a través de archivos de reglas personalizados y no depende del orden en el que se insertan los dispositivos en el sistema.
  3. udev puede establecer los permisos del archivo del dispositivo y el propietario y el grupo del archivo del dispositivo de acuerdo con ciertas condiciones.

Tres, archivo de configuración udev

[inbi @ debian ~] #cat /etc/udev/udev.conf 
# La prioridad inicial de syslog (3): "err", "info", "debug" o su 
# equivalente numérico. Para la depuración en tiempo de ejecución, el 
# estado interno de los demonios se puede cambiar con: "udevcontrol log_priority =". 
udev_log = "err"
  • udev_log: nivel de registro de syslog, el valor predeterminado es err. Si se cambia a información o depuración, se grabará un registro de udev extenso.
  • udev_root: El directorio donde se almacena el dispositivo generado por udev. El valor predeterminado es / dev /. Se recomienda no modificar los parámetros, por lo que esta opción no se muestra por defecto.

Cuarto, los archivos de reglas y reglas de udev

El archivo de reglas es la parte más importante de udev y se almacena en /etc/udev/rules.d/ por defecto. Todos los archivos de reglas deben tener el sufijo ".rules" y los archivos de reglas se ejecutan en el orden de la primera letra o número.

En el archivo de reglas, a excepción de la línea (comentario) que comienza con "#", todas las líneas que no están en blanco se consideran una regla, pero una regla no se puede extender a varias líneas. Las reglas se componen de varios pares clave-valor, separados por comas. Los pares clave-valor se pueden dividir en pares clave-valor coincidentes condicionales (en lo sucesivo, "claves coincidentes") y pares clave-valor de asignación (en lo sucesivo denominados " Clave de asignación "), una regla puede tener varias claves coincidentes y varias claves de asignación. La clave coincidente debe coincidir con todas las condiciones de un atributo de dispositivo. Cuando el atributo de un dispositivo coincide con todas las claves coincidentes de la regla, la regla se considera efectiva y, a continuación, la asignación de la regla se ejecuta de acuerdo con el contenido de la regla. clave de asignación. Aquí hay una regla simple:

NÚCLEO == "sdb", NOMBRE = "disco raíz", MODO = "0660"

KERNEL es la clave correspondiente, y NOMBRE y MODO son las claves de asignación. El significado de esta regla es: si hay un dispositivo cuyo nombre de dispositivo del kernel es sdb, la condición entrará en vigor y se ejecutará la siguiente asignación: un archivo de dispositivo llamado root_disk se genera en / dev, y los permisos del archivo de dispositivo son establecido en 0660.

Todos los operadores de las reglas de udev
== Compare la clave y el valor, si son iguales, la condición se cumple
! = Compare claves y valores, si no son iguales, se cumple la condición
= Asignar un valor a una clave
+ = Asignar un valor a una clave que represente múltiples entradas
: = Asignar un valor a una clave y rechazar todos los cambios posteriores a la clave
Coincidencia de clave para reglas de udev
ACCIÓN Comportamiento del evento: agregar (agregar dispositivo), eliminar (eliminar dispositivo)
NÚCLEO Nombre del dispositivo del kernel, por ejemplo: sda, cdrom
DEVPATH Ruta de Devpath del dispositivo
SUBSISTEMA El nombre del subsistema del dispositivo, por ejemplo, el subsistema de sda ​​es block
AUTOBÚS El nombre del bus del dispositivo en devpath, por ejemplo: usb
CONDUCTOR El nombre del controlador de dispositivo del dispositivo en devpath, por ejemplo: ide-cdrom
IDENTIFICACIÓN El número de identificación del dispositivo en devpath
SYSFS {nombre de archivo} El contenido del archivo de propiedades "nombre de archivo" del dispositivo en la ruta devpath del dispositivo. Por ejemplo: SYSFS {mode} == "ST936701SS" significa: si el modelo del dispositivo es ST936701SS, el dispositivo coincide con la clave correspondiente. En una regla, puede configurar hasta cinco claves coincidentes SYSFS
ENV (clave) Variables de entorno. En una regla, puede configurar hasta cinco claves coincidentes para las variables de entorno
PROGRAMA Invocar comandos externos
RESULTADO

El resultado de retorno del comando externo PROGRAM.

例 : PROGRAMA == ”/ lib / udev / scsi_id -g -s $ devpath”, RESULTADO == ”35000c50000a7ef67 ″

Clave de asignación de reglas de udev
NOMBRE El nombre del archivo del dispositivo generado en / dev. Solo entra en vigor la primera asignación al NOMBRE de un dispositivo, y luego se ignorará la asignación al NOMBRE del dispositivo por las reglas coincidentes. Si no hay una regla para asignar un valor al NOMBRE del dispositivo, udev usará el nombre del dispositivo del kernel para generar el archivo del dispositivo.
SYMLINK Cree enlaces simbólicos para archivos de dispositivo en / dev /. Dado que udev solo puede generar un archivo de dispositivo para un determinado dispositivo, se recomienda utilizar enlaces simbólicos para no sobrescribir los archivos generados por las reglas udev predeterminadas del sistema.
DUEÑO Usuario predeterminado
GRUPO Grupo de usuarios predeterminado
MODO Permisos del dispositivo
ENV {clave} Importar una variable de entorno
operador de sustitución invocable de udev
$ kernel,% k El nombre del dispositivo del kernel del dispositivo, por ejemplo: sda, cdrom
$ número,% n El número de kernel del dispositivo, por ejemplo: el número de kernel de sda3 es 3
$ devpath,% p Ruta de Devpath del dispositivo
$ id,% b Número de identificación del dispositivo en devpath
$ sysfs {archivo},% s {archivo}

El contenido del archivo en el sysfs del dispositivo. De hecho, es el valor de atributo del dispositivo.

Por ejemplo: Por ejemplo: $ sysfs {size} indica el tamaño del dispositivo (disco).

$ env {clave},% E {clave} El valor de una variable de entorno
$ mayor,% M Número mayor del dispositivo
$ menor,% m

Número menor del dispositivo

$ resultado,% c PROGRAM 返回的结果。
$parent,%P 父设备的设备文件名
$root,%r

udev_root 的值,默认是 /dev/。

$tempnode,%N 临时设备名
%% 符号 % 本身
$$ 符号 $ 本身

devpath:是指一个设备在 sysfs 文件系统(/sys)下的相对路径,该路径包含了设备的属性文件。udev 里的多数命令都是针对 devpath 操作的。例如:sda 的 devpath 是 /block/sda,sda2 的 devpath 是 /block/sda/sda2。

五、udev 规则文件实例

KERNEL=="sd*", PROGRAM="/lib/udev/scsi_id -g -s %p",

RESULT=="35000C50000A7EF67", SYMLINK="%k_%c"

该规则的执行:如果有一个内核设备名称以 sd 开头,且 SCSI ID 为 35000c50000a7ef67,则为设备文件产生一个符号链接 “sda_35000c50000a7ef67”。

SUBSYSTEM=="net", SYSFS{address}=="00:1E:6E:00:36:F1", NAME="public_NIC"

如果存在设备的子系统为 net,并且地址(MAC address)为 “00:1E:6E:00:36:F1”,为该设备产生一个名为 public_NIC 的设备文件。

SUBSYSTEM=="block", SYSFS{size}=="71096640", SYMLINK="my_disk"

如果存在设备的子系统为 block,并且大小为 71096640(block),则为该设备的设备文件名产生一个名为 my_disk 为符号链接。

六、查询设备信息

查询 sysfs 文件系统

设备 sda 的 SYSFS{size} 可以通过 cat /sys/block/sda/size 得到;
SYSFS{model} 信息可以通过 cat /sys/block/sda/device/model 得到。

查询磁盘的 SCSI_ID

scsi_id -g -s /block/sda

参考文献:

http://zh.wikipedia.org/wiki/Udev

http://www.reactivated.net/writing_udev_rules.html

http://www.ibm.com/developerworks/cn/linux/l-cn-udev/index.html?ca=drs-cn-0304

Supongo que te gusta

Origin blog.csdn.net/u014674293/article/details/114934035
Recomendado
Clasificación