Comando Linux / Unix: insmod

O comando Linux / Unix insmod instala un módulo cargado no kernel executante. insmod intenta conectar un módulo ao kernel executante resolvendo todos os símbolos da táboa de símbolos exportados do kernel.

Se o nome do ficheiro de módulo está indicado sen directorios ou extensións, insmod buscará o módulo en algúns directorios predeterminados comúns. A variable de entorno MODPATH pode usarse para substituír este valor predeterminado. Se existe un ficheiro de configuración de módulos como /etc/modules.conf , substituirá as rutas definidas en MODPATH .

A variable de entorno MODULECONF tamén se pode empregar para seleccionar un ficheiro de configuración diferente do estándar /etc/modules.conf (ou /etc/conf.modules (obsoleto)). Esta variable de ambiente substituirá todas as definicións anteriores.

Cando se configure a variable de entorno UNAME_MACHINE , modutils usará o seu valor no canto do campo da máquina de uname () syscall. Isto é principalmente usado cando está compilando módulos de 64 bits no espazo de usuario de 32 bits ou viceversa, estableza UNAME_MACHINE no tipo de módulos. Os moduladores actuais non admiten o modo de compilación cruzada completa dos módulos, limitándose a elixir versións entre 32 e 64 bits da arquitectura host.

Opcións

-e persist_name , --persist = persist_name

Especifica onde se leen datos persistentes para o módulo desde a carga e se escriben cando se descarga esta instanciación do módulo. Esta opción ignórase silenciosamente se o módulo non ten datos persistentes. Os datos persistentes só son lidos por insmod se esta opción está presente, por defecto insmod non procesa datos persistentes.

Como forma abreviada , -e "" (unha cadea baleira) é interpretada por insmod como o valor de persistdir como se definiu en modules.conf , seguido do nome do módulo relativo á ruta de busca do módulo en que se atopou, menos calquera rematando ".gz", ".o" ou ".mod". Se modules.conf especifica " persistdir = " (é dicir, persistdir é un campo baleiro) entón esta forma de taquigrafía é ignorada en silencio. (Ver módulos.conf (5).)

-f , --force

Tentamos cargar o módulo mesmo se a versión do kernel executante e a versión do kernel para a que se compilou o módulo non coinciden. Isto só anula a comprobación da versión do kernel, non ten efecto nos cheques de nome de símbolo. Se o nome do símbolo no módulo non coincide co kernel, entón non hai forma de forzar insmod para cargar o módulo.

-h , --help

Mostrar un resumo das opcións e saír de inmediato.

-k , --autoclean

Establece o indicador de limpeza automática no módulo. Esta bandeira será utilizada por kerneld (8) para eliminar módulos que non foron utilizados nun período de tempo (xeralmente un minuto).

-L , --lock

Use a bandada (2) para evitar cargas simultáneas do mesmo módulo.

-m , --map

Sae un mapa de carga no stdout, polo que é máis doado depurar o módulo en caso de pánico nun kernel.

-n , --noload

Run monstruoso, faga todo excepto cargar o módulo no kernel. Se é solicitado por un -m ou -O , a carreira producirá un mapa ou un ficheiro blob. Dado que o módulo non está cargado, o enderezo de carga do kernel real é descoñecido polo que o mapa e o ficheiro blob están baseados nunha dirección de carga arbitraria de 0x12340000.

-o módulo_name , --name = nome_module

Explicar o nome do módulo, en vez de derivar o nome do nome de base do ficheiro de obxecto fonte.

-O blob_name , --blob = blob_name

Garda o obxecto binario en blob_name . O resultado é un blob binario (sen encabezados ELF) que mostra exactamente o que se carga no núcleo despois da manipulación e deslocalización da sección. A opción -m recoméndase para obter un mapa do obxecto.

-p , --probe

Proba o módulo para ver se se puido cargar con éxito . Isto inclúe a localización do ficheiro de obxecto no camiño do módulo, a comprobación dos números de versión e a resolución de símbolos. Non verifica as deslocalizacións nin produce un mapa ou ficheiro blob.

-P prefix , --prefix = prefixo

Esta opción pode usarse con módulos versionados para un kernel SMP ou bigmem, xa que estes módulos teñen un prefixo adicional engadido nos seus nomes de símbolo. Se o kernel foi construído con versións de símbolos, insmod extraerá automáticamente o prefijo da definición de "get_module_symbol" ou "inter_module_get", un dos cales debe existir en calquera kernel que soporte módulos. Se o kernel non ten versións de símbolos pero o módulo foi creado con versións de símbolos, entón o usuario debe proporcionar -P .

-q , --quiet

Non imprima unha lista de símbolos sen resolver. Non se queixa da incompatibilidade da versión. O problema só se verá reflectido no estado de saída de insmod .

-r , - raíz

Algúns usuarios compilan módulos baixo un usuario non root e instálanse os módulos como root. Este proceso pode deixar os módulos propiedade do usuario non root, aínda que o directorio de módulos sexa propiedade da raíz. Se o usuario non root está comprometido, un intruso pode sobreescribir os módulos existentes propiedade de ese usuario e usar esta exposición para arrincar ata o acceso root.

Por defecto, modutils rexeitará os intentos de usar un módulo que non sexa propiedade de root. A especificación de -r cambiará a comprobación e permitirá que a raíz cargue módulos que non sexan propiedade da raíz. Nota: o valor predeterminado para a comprobación da raíz pódese cambiar cando os moduladores están configurados.

O uso de -r para desactivar a comprobación raíz ou a configuración predeterminada para "non verificar raíz" no momento da configuración é unha exposición de seguridade importante e non se recomenda.

-s , - syslog

Saia todo ao syslog (3) no canto do terminal.

-S , - pequenos

Forza o módulo cargado para ter datos de kallsyms , aínda que o kernel non o admita. Esta opción é para sistemas pequenos onde o kernel está cargado sen datos de kallsyms pero os módulos seleccionados precisan kallsyms para a depuración. Esta opción é o predeterminado en Red Hat Linux.

-v , --verbose

Sexa detallado.

-V , --versión

Mostrar a versión de insmod .

-X , --export ; -x , --noexport

Non exporte todos os símbolos externos do módulo, respectivamente. O valor predeterminado é que se exporten os símbolos. Esta opción só é efectiva se o módulo non exporta explícitamente a súa propia táboa de símbolos controlados e, polo tanto, está desfasada.

-Y , --ksymoops ; -y , --noksymoops

Non engada os símbolos de ksymoops a ksyms. Estes símbolos son utilizados por ksymoops para proporcionar unha mellor depuración se hai un Oops neste módulo. O valor predeterminado é definir os símbolos de kymoops . Esta opción é independente das opcións -X / -x .

Os símbolos de kymoops engaden aproximadamente 260 bytes por módulo cargado. A non ser que estea moi curto no espazo do kernel e estea a tentar reducir o ksyms ao seu tamaño mínimo, tome o valor predeterminado e elimine a depuración máis precisa. Os símbolos de kymoops son necesarios para gardar datos de módulos persistentes.

-N , --numérica só

Verifique só a parte numérica da versión do módulo contra a versión do kernel, é dicir, ignore EXTRAVERSION ao decidir se un módulo pertence a un kernel. Esta bandeira está definida automaticamente para o kernel 2.5 en diante, é opcional para os kernels anteriores.

Parámetros do módulo

Algúns módulos aceptan parámetros de tempo de carga para personalizar a súa operación. Estes parámetros son frecuentemente o porto de E / S e os números de IRQ que varían de máquina a máquina e non se pode determinar a partir do hardware.

Nos módulos construídos para os kernels da serie 2.0, calquera símbolo de punteiro de enteiro ou carácter pode tratarse como un parámetro e modificado. Comezando nos kernels da serie 2.1, os símbolos están marcados explicitamente como parámetros de xeito que só se poden cambiar valores específicos. Ademais, proporcionamos información de tipo para comprobar os valores proporcionados no tempo de carga.

No caso dos números enteiros, todos os valores poden estar en decimal, octal ou hexadecimal a la C: 17, 021 ou 0x11. Os elementos matriciais son secuencia especificada separada por comas. Os elementos poden omitirse omitiendo o valor.

Nos módulos da serie 2.0, os valores que non comezan cun número son considerados como cadeas. A partir do 2.1, a información do tipo de parámetro indica se se debe interpretar o valor como unha cadea. Se o valor comeza con comiñas dobres ( " ), a cadea interprétase como en C, as secuencias de escape e todas. Teña en conta que a partir do símbolo do shell, as comiñas poden ter que estar protexidas da interpretación do shell.

Módulos e símbolos con licenza GPL

Comezando co kernel 2.4.10, os módulos deberían ter unha cadea de licenza, definida usando MODULE_LICENSE () . Varias cadeas son recoñecidas como compatibles con GPL; calquera outra cadea de licenza ou licenza non implica que o módulo sexa tratado como propietario.

Se o núcleo admite a marca / proc / sys / kernel / tainted , entón insmod fará OR a marca marcada con '1' ao cargar un módulo sen unha licenza GPL. Recibe unha advertencia se o núcleo soporta a contaminación e se carga un módulo sen unha licenza. Advertencia sempre emitida para módulos que teñen un MODULE_LICENSE () que non é compatible con GPL, mesmo en kernels máis antigos que non son compatibles coa contaminación. Isto minimiza as advertencias cando se usa un modutils novo en kernels máis antigos.

O modo insmod -f (forza) Ou a bandeira contaminada con '2' en núcleos que soportan a corrupción. Sempre emite un aviso.

Algúns desenvolvedores do kernel esixen que os símbolos exportados polo seu código só deben ser utilizados por módulos con licenza compatible con GPL. Estes exportadores exportan EXPORT_SYMBOL_GPL no canto do normal EXPORT_SYMBOL . Os símbolos só para GPL exportados polo kernel e por outros módulos só están visibles para módulos con licenza compatible con GPL, estes símbolos aparecen en / proc / ksyms cun prefixo de ' GPLONLY_ '. insmod ignora o prefixo GPLONLY_ nos símbolos ao cargar un módulo con licenza GPL polo que o módulo só fai referencia ao nome do símbolo normal, sen o prefixo. Os símbolos de GPL só non están dispoñibles para módulos sen unha licenza compatible con GPL, isto inclúe módulos sen ningunha licenza.

Asistencia de Ksymoops

Para axudar na depuración do kernel. Ó usar os módulos, insmod defínese para engadir algúns símbolos a ksyms, consulte a opción -Y . Estes símbolos comezan con __insmod_modulename_ . Requírese o nome de módulo para que os símbolos sexan únicos. É legal cargar o mesmo obxecto máis dunha vez baixo diferentes nomes de módulos. Actualmente, os símbolos definidos son:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

file de obxecto é o nome do ficheiro do que se cargou o obxecto. Isto asegura que ksymoops pode emparejar o código co obxecto correcto. mtime é a última marca de tempo modificada no ficheiro en hexadecimal, cero se a estatística fallou. a versión é a versión do kernel para a que se compilou o módulo, -1 se non hai ningunha versión dispoñible. O símbolo _O ten o mesmo enderezo de inicio que o encabezado do módulo.

__insmod_modulename_Ssectionname_Llength

Este símbolo aparece ao comezo das seccións ELF seleccionadas, actualmente .text, .rodata, .data, .bss e .sbss. Só aparece se a sección ten un tamaño non cero. O nome da sección é o nome da sección ELF, a lonxitude é a lonxitude da sección en decimal. Estes símbolos axudan a ksymoops a asignar enderezos a seccións cando non hai símbolos dispoñibles.

__insmod_modulename_Persistent_filename

Só creado por insmod se o módulo ten un ou máis parámetros marcados como datos persistentes e un nome de ficheiro para gardar datos persistentes (ver -e , arriba).

O outro problema co kernel de depuración Oops nos módulos é que os contidos de / proc / ksyms e / proc / modules poden cambiar entre os Oops e cando procesa o ficheiro de rexistro. Para axudar a superar este problema, se o directorio / var / log / ksymoops existe, entón insmod e rmmod copiarán / proc / ksyms e / proc / modules a / var / log / ksymoops cun prefixo de `date +% Y% m % d% H% M% S ". O administrador do sistema pode dicir a ksymoops que ficheiros instantáneos usar ao depurar un Oops. Non hai ningunha opción para desactivar esta copia automática. Se non quere que ocorra, non cree / var / log / ksymoops . Se ese cartafol existe, debería ser propiedade de root e ser o modo 644 ou 600 e debería executar este script cada día máis ou menos. O script a continuación está instalado como insmod_ksymoops_clean .

Información básica a saber

NAME

insmod - instala o módulo de kernel cargable

SINOPSE

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P prefix ] módulo [ symbol = value ...]