- La búsqueda con “/” en menuconfig revela rutas, dependencias y estado de cada símbolo.
- Parte de un .config que ya funciona y actualízalo con oldconfig/olddefconfig o localmodconfig.
- Compila e instala con seguridad: modules_install, initramfs y actualización de GRUB.
- Evita errores típicos (fuera del árbol del kernel, toolchains mezcladas, dependencias ocultas).
Si estás intentando averiguar cómo buscar configuraciones en make menuconfig y de paso dejar tu kernel listo para tu máquina, aquí tienes una guía integral y práctica. Partimos desde lo básico para no perderse con menús, símbolos y dependencias, y terminamos con la compilación e instalación, incluyendo trucos en Gentoo, Debian y derivados.
El objetivo es que puedas navegar con soltura por el configurador del kernel, localizar cualquier opción con la función de búsqueda, comprender los formatos de los símbolos y sus dependencias, y evitar errores típicos durante la compilación e instalación. Todo ello con ejemplos reales de drivers (red, wifi, sonido, vídeo, cámaras, pantallas táctiles), recomendaciones para contenedores como Docker y avisos importantes sobre Kbuild y las toolchains.
Qué es make menuconfig y para qué sirve
El conjunto de herramientas del kernel incluye varios frontends para configurar, siendo make menuconfig uno de los más populares por su interfaz de texto basada en ncurses. Te permite activar funciones como integradas en el núcleo (Y), como módulo (M) o desactivadas (N), además de moverte por categorías y submenús con el teclado.
Antes de empezar, conviene conocer tu hardware para no desactivar nada esencial. Comandos como lspci, lspci -k, dmesg o un simple lsmod para ver módulos cargados te ayudan a identificar qué controladores necesitas. Es una buena práctica copiar la configuración actual a la carpeta de fuentes y usarla de base.
Una preparación típica consiste en ir a tu árbol de fuentes (por ejemplo, en /usr/src/linux o la versión concreta que estés usando), y copiar el archivo del kernel en ejecución: cp -v /boot/config-$(uname -r) .config. Con esa base, puedes lanzar make menuconfig y comenzar a ajustar opciones sin partir de cero.
En la interfaz verás categorías como Device Drivers, File systems, Networking support o CPU/virtualización. Mueve el cursor con las flechas, cambia entre botones con Tab y alterna el estado de una opción con la barra espaciadora o las teclas Y, M y N. Cada elemento suele incluir ayuda contextual accesible con H o con el botón Help.
Buscar opciones dentro de menuconfig (símbolos, rutas y dependencias)
La función de búsqueda integrada es la clave para no volverte loco. Pulsa / (barra inclinada) dentro de menuconfig e introduce el nombre del símbolo (por ejemplo, BT_HCIBTUSB o IPVLAN) o una palabra clave del texto del prompt. El resultado muestra el símbolo (CONFIG_…), su descripción, la ubicación en el menú, sus dependencias y dónde está definido.
Interpreta los resultados con calma: verás secciones como “Location” (ruta de menús), “Depends on” (condiciones que deben cumplirse), y “Selects” (elementos que esta opción activa). Si una opción está oculta es probable que falte una dependencia; habilítala primero siguiendo las pistas del buscador.
Una vez localizada la opción, navega por el camino indicado en “Location” para llegar a ella. Si se ofrece como integrada () o módulo (<M>), elige lo que te convenga. Los módulos son más flexibles, pero ciertas funcionalidades críticas (por ejemplo, controladores del disco raíz o sistemas de archivos para el arranque) conviene llevarlas integradas.
La ayuda (H o Help) merece la pena: explica el propósito del driver, su estabilidad y frecuentemente te sugiere si es mejor activarlo como módulo o integrado. Etiquetas como (NEW), (EXPERIMENTAL), (DEPRECATED) u (OBSOLETE) te orientan sobre el estado de cada opción.
Navegación y símbolos: lo que significan Y/M/N y la notación de los menús
Las entradas del configurador usan notaciones visuales para indicar su estado. Verás y cuando el elemento puede estar desactivado o activado de forma monolítica; y < >, <M>, <*> cuando además permite compilarse como módulo. Cada pulsación de espacio (o Y/M/N) rota el estado según lo permitido.
También es común ver {M} o {*} cuando no es posible desactivar por completo una opción (hay dependencias aguas arriba), y formatos como -M- o -*- que indican que el estado lo impone otra opción. Si detectas esto, recurre a la búsqueda y a la ayuda para resolver qué dependencia te falta por activar o desactivar.
Para moverte con rapidez, las teclas de la A a la Z saltan a la siguiente línea cuyo texto contiene esa letra en negrita. La barra espaciadora alterna el estado, Tab se desplaza por los botones (Select, Exit, Help, Save), y Enter entra a submenús. Este conjunto de atajos de teclado acelera mucho el trabajo.
Cuando termines, guarda con Save. El fichero .config quedará en el directorio de las fuentes; si ya existía, se renombrará la versión anterior a .config.old, lo cual es muy práctico para comparar cambios o volver atrás con rapidez.
Preparar el árbol de fuentes: reutilizar y actualizar tu .config
Lo más eficiente es partir de una configuración conocida que ya funciona. Copia el .config actual desde /boot como se mencionó y actualízalo a la nueva versión con make oldconfig (te preguntará por novedades), o de forma más ágil con make olddefconfig (acepta valores por defecto de lo nuevo sin preguntarte). Ambas rutas ahorran tiempo al migrar entre versiones.
Otra opción muy práctica es make localmodconfig, que genera una configuración basada en los módulos que tienes cargados ahora mismo (lo que ve lsmod). Es ideal para afinar hacia tu hardware actual, aunque si compilas para otra máquina tendrás que revisar a mano opciones adicionales.
Si necesitas volver al punto de partida, make defconfig genera la configuración por defecto para tu arquitectura. Y si quieres ver las alternativas de frontend, además de menuconfig están make nconfig (ncurses moderna), make xconfig (Qt) o make gconfig (GTK), útiles si prefieres interfaz gráfica.
En Gentoo, conviene asegurarse de que el enlace /usr/src/linux apunte a las fuentes correctas con eselect kernel list y eselect kernel set. Si usas kernels empaquetados de la distribución (distribution kernels), obtendrás configuraciones seguras por defecto, reduciendo riesgos en sistemas críticos.
Compilación e instalación: comandos seguros y buenas prácticas
Tras guardar tu .config, lanza la compilación con make -j$(nproc) para usar todos los núcleos de CPU. Dependiendo de tu hardware y del número de opciones seleccionadas, el proceso puede tardar desde decenas de minutos hasta más de una hora.
Si habilitaste funcionalidades como módulos, instala después con make modules_install; esto copiará los módulos a /lib/modules/$(versión). Luego, make install colocará el kernel y ficheros asociados en /boot y, en muchas distros, actualizará la entrada del gestor de arranque automáticamente.
Para generar el initramfs (necesario cuando usas ciertos módulos, por ejemplo, controladores de almacenamiento o ZFS/NVIDIA), en Gentoo puedes usar genkernel –install initramfs, y en otros entornos herramientas como dracut o update-initramfs. No olvides actualizar GRUB si tu distribución no lo hace sola.
En Debian y derivados es habitual ejecutar update-initramfs -u y actualizar GRUB (por ejemplo, con update-grub) o grub-mkconfig -o /boot/grub/grub.cfg. En sistemas con múltiples kernels, mantener nombres diferenciados (por ejemplo, añadiendo una etiqueta en EXTRAVERSION) ayuda a no sobrescribir versiones estables que aún necesitas.
En Debian y derivados es habitual ejecutar update-initramfs -u y update-grub o grub-mkconfig -o /boot/grub/grub.cfg. En sistemas con múltiples kernels, mantener nombres diferenciados (por ejemplo, añadiendo una etiqueta en EXTRAVERSION) ayuda a no sobrescribir versiones estables que aún necesitas.
Activar controladores habituales: dónde encontrarlos en el menú
- Para tarjetas de red Ethernet: ve a Device Drivers > Network device support > Ethernet driver support y elige el controlador del chipset correspondiente. Puedes integrarlo o dejarlo como módulo si no es vital para el arranque.
- Para Wi‑Fi: consulta Device Drivers > Network device support > Wireless LAN y marca el driver concreto (Atheros, Intel, Broadcom, etc.). Con frecuencia es práctico compilarlo como módulo para facilitar actualizaciones o pruebas.
- Gráficos: entra en Device Drivers > Graphics support. Para NVIDIA con Nouveau o GPUs AMD con amdgpu, marca el soporte correspondiente; en equipos híbridos, revisa opciones de conmutación. Es buena idea leer la ayuda de cada driver para decidir entre módulo o integrado.
- Sonido: pasa por Device Drivers > Sound card support > Advanced Linux Sound Architecture (ALSA). Elige el controlador específico de tu tarjeta y habilita el soporte general de ALSA. Si no estás seguro, dejarlo como módulos da más flexibilidad.
- Cámaras web: accede a Device Drivers > Multimedia support, habilita “Cameras/video grabbers” y dentro de “Media USB Adapters” activa USB Video Class (UVC) si tu webcam es UVC estándar.
- Pantallas táctiles: entra en Device Drivers > HID support > Special HID drivers y habilita HID Multitouch para paneles multitáctiles comunes.
Filesystems, seguridad y virtualización: elecciones clave
En File systems podrás activar EXT4 (con cifrado si lo necesitas), XFS, Btrfs, NTFS, VFAT/EXFAT, ISO/UDF, y sistemas en red como NFS o CIFS. Para el sistema de archivos de tu raíz de arranque, acostumbra a integrarlo en el kernel para evitar depender de módulos en el initramfs.
En seguridad, valora opciones como SELinux, claves del kernel (KEYS), o tecnologías de integridad como EVM. Algunas funciones pueden impactar rendimiento, pero ofrecen capas adicionales de protección en entornos sensibles.
La sección Virtualization incluye KVM y otros elementos necesarios para hipervisores. En CPUs modernas, habilitar KVM y los flags específicos de Intel/AMD suele ser trivial y muy beneficioso para máquinas virtuales.
En criptografía (Cryptographic API), puedes activar algoritmos acelerados por CPU (SSE2/SSSE3/AVX/AVX2) si tu hardware los soporta. Esto acelera operaciones de cifrado, compresión y protocolos variados.
Kernel para Docker y orquestadores: opciones imprescindibles
Si planeas ejecutar contenedores (Docker, Docker Swarm, etc.), asegúrate de habilitar namespaces y cgroups. Entre las opciones habituales: CONFIG_NAMESPACES, CONFIG_NET_NS, CONFIG_PID_NS, CONFIG_IPC_NS, CONFIG_UTS_NS y CONFIG_CGROUPS con sus subcomponentes (CPUACCT, DEVICE, FREEZER, SCHED, CPUSETS, MEMCG).
Para redes de contenedores, son clave CONFIG_VETH (virtual ethernet), bridge y netfilter. Por ejemplo: CONFIG_BRIDGE, CONFIG_BRIDGE_NETFILTER, CONFIG_NETFILTER_XT_MATCH_CONNTRACK, CONFIG_NETFILTER_XT_MATCH_ADDRTYPE, CONFIG_NETFILTER_XT_MATCH_IPVS, CONFIG_NF_NAT y objetivos como CONFIG_IP_NF_TARGET_MASQUERADE. Muchas de estas opciones puedes compilarlas como módulos.
El driver CONFIG_IPVLAN es habitual en escenarios avanzados de redes de contenedores. Si dudas, usa la búsqueda con “/” y valida dependencias. Compilar como módulo te permite cargarlo solo cuando lo necesites.
Existe un script popular para verificar la compatibilidad del .config con Docker (check-config.sh). Tras darle permisos y apuntarlo a tu .config, te indicará qué falta para una experiencia completa con contenedores.
Kbuild y toolchains: avisos importantes
El sistema de construcción del kernel (Kbuild) permite parametrizar el build con variables de entorno. Por ejemplo, LLVM=1 compila con Clang/LLVM. Pero cuidado: no mezcles herramientas de GNU con LLVM de forma cruzada (por ejemplo, CC=gcc con LD=ld.lld), porque romperás el build de formas nada obvias.
Si quieres compilar íntegramente con LLVM, define LLVM=1 o usa CC=clang y el resto de binutils coherentes (ar, nm, ld, etc.). Revisa siempre la documentación del kernel que estés usando, porque ciertos flags u optimizaciones agresivas pueden no ser recomendables en producción.
En ramas muy antiguas (como 2.4) se pedían pasos como make dep o make clean antes de construir; hoy no suele ser necesario, pero si vienes de configuraciones previas problemáticas, make mrproper devuelve el árbol a un estado limpio. Haz copia de tu .config antes de limpiar.
Para distinguir kernels personalizados, muchos administradores añaden una etiqueta en EXTRAVERSION (Makefile) o usan nombres de imagen únicos. Esto evita sobrescribir sin querer el kernel estable con el que arrancas cada día.
“make: *** No rule to make target ‘menuconfig’. Stop.” ¿Por qué ocurre?
Ese error aparece cuando ejecutas make menuconfig fuera del árbol de fuentes del kernel o en un proyecto que no incluye la infraestructura de Kconfig/mconf. El objetivo “menuconfig” lo proporciona el Makefile del kernel junto a los scripts correspondientes; si no estás en ese árbol, no existe tal regla.
Soluciones típicas: asegúrate de estar en /usr/src/linux (o en la carpeta de la versión descomprimida) y que haya un Makefile del kernel con el objetivo “menuconfig”. Si lo que quieres es usar Kconfig en un proyecto pequeño propio (por ejemplo, un “hello‑world” con Kconfig), necesitas incorporar las herramientas de scripts/kconfig (o usar paquetes como kconfig-frontends) y un Makefile que invoque correctamente mconf/nconf. Sin esa infraestructura, el comando no sabrá qué hacer.
Conclusión práctica: menuconfig es del kernel; no lo confundas con Makefile genérico. Para “jugar” con Kconfig en un proyecto mínimo, trae las dependencias adecuadas o desarrolla tu propio flujo con las utilidades de Kconfig compiladas aparte.
Descarga de fuentes: mainline, stable, longterm y linux-next
Puedes obtener el kernel desde el gestor de paquetes de tu distribución o desde la web oficial. En kernel.org verás ramas Mainline (últimas novedades y parches recientes), Stable (probada para uso diario) y Longterm (LTS, ideal para empresas o quien prioriza estabilidad), además de linux-next para seguir lo que viene.
Si descargas un tar.xz, descomprímelo y entra en la carpeta para trabajar ahí. No es obligatorio compilar en /usr/src; el build funciona en cualquier ruta siempre que tengas las dependencias instaladas (compiladores, headers, binutils, etc.). En Debian/Ubuntu, un metapaquete como build-essential y utilidades afines suelen ser necesarios.
En Gentoo, “emerge -s sources” te lista paquetes de fuentes (por ejemplo, gentoo-sources). Al instalar con emerge -a gentoo-sources, se crea el árbol en /usr/src y puedes seleccionar la versión activa con eselect kernel. Cambia el enlace simbólico /usr/src/linux a la versión deseada antes de configurar y compilar.
Recuerda que, si usas herramientas como genkernel para initramfs, el enlace /usr/src/linux debe apuntar a las fuentes correctas. De lo contrario, podrías generar un initramfs incompatible con el kernel que acabas de compilar.
Comparar configuraciones y limpiar el entorno
Cuando actualizas de versión, make oldconfig te guía por lo nuevo; make olddefconfig acepta los valores por defecto de lo añadido. Para comprobar qué cambió respecto al defconfig de la arquitectura, puedes generar un defconfig por un lado y comparar con diff frente a tu .config.
Si has trasteado mucho y algo no encaja, considera ejecutar make mrproper para empezar limpio. Ojo: elimina artefactos de compilación y la configuración, así que salva tu .config antes. Si el árbol está sucio por builds viejos, una limpieza a tiempo ahorra fallos extraños.
Una práctica recomendable es guardar versiones de .config con nombres (por ejemplo, .config-01, .config-02…) antes de sobreescribir el activo. Así podrás regresar a una configuración estable mientras pruebas cambios en paralelo.
Si usas controladores externos (como NVIDIA o ZFS), reconstruye módulos externos y regenera el initramfs tras instalar el nuevo kernel. Es la mejor manera de evitar arranques con funcionalidad ausente o pantallazos negros por un driver no emparejado.
Dominando la búsqueda con “/”, entendiendo el significado de Y/M/N y su notación, y aprovechando flujos como olddefconfig o localmodconfig, configurar y compilar el kernel deja de ser un laberinto. Con una base de .config conocida, una limpieza sensata del árbol y cuidado con las dependencias, tendrás un kernel afinado a tu hardware, listo para producción o para experimentar con las últimas funciones sin perder el control del sistema.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.
