Para desarrollar el programa del controlador, necesitamos el directorio /lib/modules//build. Pero encontré debajo de la imagen acoplable de centos, incluso después de que
yum install kernel-devel
Todavía no existe tal directorio con todo su contenido. Pregunta:
(1) ¿cómo hacer posible el desarrollo del controlador en un entorno docker linux?
(2) ¿es posible cargar este módulo desarrollado?
Docker no es una máquina virtual.
Ubuntu con docker no es ubuntu real.
Si desea desarrollar con ubuntu, debe usar virtualbox o vmware.
Consulta este enlace para más información
Docker usa el kernel de la máquina host.
Después de leer esta página, casi dejo de construir un módulo kernel en Docker, así que agrego esta respuesta con la esperanza de que ayude a alguien. Véase también cuál-es-la-diferencia-entre-controladores-del-kernel-y-módulos-del-kernel
Puede compilar módulos de Kernel en Docker siempre que la fuente de Kernel requerida para la compilación esté disponible dentro de Docker. Digamos que desea compilar con la última fuente del kernel disponible en sus repositorios de yum, puede instalar la fuente del kernel usando yum install kernel-devel
. La fuente estará en el directorio /usr/src/kernels/<version>
. Puede instalar una versión específica de kernel-devel
desde su repositorio si eso es lo que desea.
Luego construya el módulo usando $ make -C <path_to_kernel_src> M=$PWD
donde la ruta al código fuente del kernel sería /usr/src/kernels/<version>
.
Leer - Sistema de construcción del kernel » Construcción de módulos externos
El contenedor Docker usa el kernel de la máquina host, por lo que si desea compilar contra el kernel en ejecución, es decir, el kernel de la máquina host Docker, puede intentar ejecutar el contenedor en modo privilegiado y montar el directorio de módulos. docker run --name container_name --privileged --cap-add=ALL -v /dev:/dev -v /lib/modules:/lib/modules image_id
Ver esto
No debe cargar los módulos en un kernel que no sea el mismo para el que se creó el módulo. Podría forzar la instalación, pero eso es muy desaconsejable. Recuerde que su kernel en ejecución, es decir, el kernel host de Docker, es el kernel del contenedor de Docker, independientemente de la versión kernel-devel
que haya instalado.
Para ver el núcleo para el que se creó el módulo (o con el que se creó), ejecute modinfo <module>
y busque el valor de vermagic
.
También vale la pena leer el soporte del módulo dinámico del kernel .