¿Dónde están instalados los módulos del kernel?

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

He desempaquetado la configuración del kernel /proc/config.gzy veo que el kernel se compiló con muchos módulos.

Solo veo uno en /vendor/lib/modules, cero en /system/lib/modules.

¿Alguien puede explicar dónde se instalaron los módulos, cuál es el procedimiento para instalar módulos?

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

Respuestas (2)

Hay dos formas en que se construyen los módulos del kernel de Linux: 1. como parte del binario ejecutable del kernel (imagen comprimida), es decir, con CONFIG_*=yopciones en el momento de la compilación, o 2. como archivos de objeto del kernel ( ) separados .koque se pueden cargar y descargar con algunas condiciones, es decir, construido con CONFIG_*=mopciones.
En el segundo caso, los .koarchivos se colocan en alguna(s) ubicación(es) estándar, generalmente /lib/modules/en Linux y su equivalente en Android /system/lib/modules/o /vendor/lib/modules/. Estas rutas están codificadas en archivos binarios que las cargan, por ejemplo insmod, modprobe.

En las versiones anteriores a Pie ( 1 ) , el kernel de Android predeterminado se crea sin la opción CONFIG_MODULES=y, por lo que no hay módulos del kernel creados como .koarchivos que se pueden cargar o descargar con insmod, modprobeo rmmodcomo es el caso de las distribuciones estándar de Linux. Tampoco se exponen a través /proc/modulesde donde lsmodse lee la información. Sin embargo, cada componente del kernel que se puede compilar como un módulo tiene una entrada en /sys/module.

Ahora esos módulos que se compilan y cargan como .koarchivo tienen un /sys/module/<module>/initstatearchivo correspondiente, otros no lo tienen. Puede confirmar de esta manera si hay algún módulo cargado:

~$ ls /sys/module/*/initstate
Aunque es posible que Android predeterminado no use módulos cargables, muchos dispositivos reales lo han hecho durante años.
Sí, tengo más de 20 módulos en mi dispositivo.
@IrfanLatif He estado tratando de ubicar los *.koarchivos en mi emulador, pero parece que no puedo encontrarlos en ninguna parte. Es un emulador API 30, y puedo ver los módulos cargados (en /proc/modules), y existe el archivo apropiado para /sys/module/*/initstate, pero no *.koexisten archivos (buscado con find / -name "*.ko". ¿Alguna idea de dónde más podrían estar?
Los desarrolladores de OEM / ROM de @WilliamReed pueden nombrar los archivos del módulo cargable de manera diferente. Puede buscar en initlos archivos de configuración ( *.rc) /systemy /vendorver cómo y desde dónde se cargan los módulos en el arranque. grep -riI <mod_name> /system /vendor /odm /producto find /system /vendor /odm /product -iname '*<mod_name>*'(no agregue .ko) debería llevar a alguna conclusión.
Guía oficial para colocar .koarchivos en fs: source.android.com/devices/architecture/kernel/…

Los módulos del núcleo son una pieza de código que se carga en la memoria del núcleo. Consta de al menos dos funciones como int, cleanup. Si desea ver qué módulos están cargados en la memoria del núcleo, simplemente escriba los comandos: lsmodo cat /proc/modules. Si desea encontrar módulos del kernel en toda la memoria de la partición del sistema: find / -name "*.ko".

Cargue el módulo del kernel en la memoria

insmod hello.ko

Eliminar el módulo del núcleo

rmmod hello.ko

para obtener más información, consulte el registro de dmesg.