5 votos

¿Dónde se instalan los módulos del núcleo?

Estoy intentando encontrar módulos del kernel de Linux en mi placa de nitrógeno.

He desempaquetado la configuración del kernel desde /proc/config.gz y veo que el kernel fue compilado con muchos módulos.

Sólo veo uno en /vendor/lib/modules , cero en /system/lib/modules .

¿Puede alguien explicar dónde se instalan los módulos, cuál es el procedimiento para instalarlos?

0 votos

En teoría podrían estar en un ramdisk de inicio. También es posible construir módulos pero no empaquetarlos (en cuyo caso no serían utilizables, pero cosas más extrañas han sucedido). Si hay una objetivo debería incluirlo en su pregunta, es decir, ¿está tratando de encontrar un módulo que cree que está disponible, pero que no se ha cargado?

5voto

Jack Wade Puntos 231

Hay dos maneras de construir los módulos del núcleo de Linux: 1. como parte del binario ejecutable del kernel (imagen comprimida), es decir, con CONFIG_*=y en el momento de la construcción, o 2. como objeto separado del núcleo ( .ko ) que pueden ser cargados y descargados con algunas condiciones, es decir, construidos con CONFIG_*=m opciones.
En el segundo caso, el .ko Los archivos se colocan en alguna ubicación estándar, normalmente /lib/modules/ en Linux y su equivalente en Android /system/lib/modules/ o /vendor/lib/modules/ . Estas rutas están codificadas en los binarios que las cargan, por ejemplo insmod , modprobe .

En los lanzamientos anteriores a la publicación de la revista Pie ( 1 ) Por defecto, el núcleo de Android se construye sin la opción CONFIG_MODULES=y por lo que no hay módulos del núcleo construidos como .ko que pueden cargarse o descargarse con insmod , modprobe o rmmod como es el caso de las distros Linux estándar. Tampoco se exponen a través de /proc/modules de donde lsmod lee información. Sin embargo, cada componente del núcleo que puede construirse como módulo tiene una entrada en /sys/module .

Ahora los módulos que se compilan y cargan como .ko tiene su correspondiente /sys/module/<module>/initstate archivo, otros no tienen. De esta manera se puede confirmar si hay módulos cargados:

~$ ls /sys/module/*/initstate

0 votos

Aunque por defecto Android podría no utilizar módulos cargables, muchos dispositivos reales durante años.

0 votos

Sí, tengo más de 20 módulos en mi dispositivo.

0 votos

@IrfanLatif He estado tratando de localizar el *.ko en mi emulador, pero no puedo encontrarlos en ningún sitio. Es un emulador API 30, y puedo ver los módulos cargados (en /proc/modules ), y el archivo apropiado existe para /sys/module/*/initstate pero no *.ko existen archivos (buscados con find / -name "*.ko" . ¿Alguna idea de dónde podrían estar?

1voto

Daniel Katz Puntos 116

Los módulos del kernel son una pieza de código que se carga en la memoria del kernel. Consiste en al menos dos funciones como int, cleanup. Si quiere ver qué módulos se cargan en la memoria del núcleo, sólo tiene que escribir los comandos lsmod o cat /proc/modules . Si quieres encontrar módulos del kernel en toda la memoria de la partición del sistema: find / -name "*.ko" .

Cargar el módulo del núcleo en la memoria

insmod hello.ko

Eliminar el módulo del kernel

rmmod hello.ko

para más información ver dmesg log .

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X