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.gz
y 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?
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_*=y
opciones en el momento de la compilación, o 2. como archivos de objeto del kernel ( ) separados .ko
que se pueden cargar y descargar con algunas condiciones, es decir, construido con CONFIG_*=m
opciones.
En el segundo caso, los .ko
archivos 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 .ko
archivos que se pueden cargar o descargar con insmod
, modprobe
o rmmod
como es el caso de las distribuciones estándar de Linux. Tampoco se exponen a través /proc/modules
de donde lsmod
se 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 .ko
archivo tienen un /sys/module/<module>/initstate
archivo correspondiente, otros no lo tienen. Puede confirmar de esta manera si hay algún módulo cargado:
~$ ls /sys/module/*/initstate
*.ko
archivos 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 *.ko
existen archivos (buscado con find / -name "*.ko"
. ¿Alguna idea de dónde más podrían estar?init
los archivos de configuración ( *.rc
) /system
y /vendor
ver cómo y desde dónde se cargan los módulos en el arranque. grep -riI <mod_name> /system /vendor /odm /product
o find /system /vendor /odm /product -iname '*<mod_name>*'
(no agregue .ko
) debería llevar a alguna conclusión..ko
archivos 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: lsmod
o 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.
chris stratton