Componentes de un kernel Linux 2.6.18
Román Muñoz Roncal
15-02-2008
- Code maturity level options
- General setup
- Enable loadable module support
- Block Layer
- Processor type and features
- Power Management Options
- Bus options
- Executable file formats
- Networking
- Device drivers
- File systems
- Instrumentation support
- Kernel hacking
- Security options
- Cryptographic API
- Library routines
1. Code maturity level options
En esta sección, tenemos una única opción: "Prompt for development and/or incomplete code/drivers". Si la activamos, el interfaz nos mostrara las opciones marcadas "EXPERIMENTAL". Si no lo activamos, esas caracteristicas no apareceran. Si lo que queremos es un kernel especialmente estable, dejamos esto sin marcar. Si necesitamos cualquier caracteristica experimental, tendremos que marcarlo. Por ejemplo, si queremos usar un modem USB con nuestro ADSL, necesitaremos tener activado el soporte ATM, que está marcado "experimental", y por tanto no aparecerá si no activamos esta opción.
2. General setup
Marcaremos como minimo:
- Support for paging of anonymous memory (swap)
- System V IPC
- POSIX Message Queues
- BSD Process Accounting
- BSD Process Accounting version 3 file format
- Kernel log buffer size. 14=buffer de 16 KB
Otras opciones:
- Initial RAM filesystem and RAM disk support. Por defecto el arranque de Linux se hace desde un disco RAM que carga un sistema minimo con los modulos necesarios para acceder al disco duro. A partir de aqui se pasa el control a init y se realiza un arranque "normal". Si compilamos un kernel destinado a la distribucion, lo normal es usar este disco RAM inicial.
- Optimize for size. Por defecto el kernel se compila con -O2, esta opcion hace que se compile con -Os, lo que añada optimizaciones a -O2 para lograr un kernel mas pequeño. Funciona correctamente a condicion de usar un compilador actualizado.
3. Enable loadable module support
Activamos esta opcion si queremos un kenel con modulos. Una vez activada podemos entrar en ella y activar:
- Module unloading. Esto permite descargar un modulo a condición de que no esté en uso. Incluso así, es posible que algunos modulos no puedan descargarse.
- Automatic kernel module loading.
4. Block Layer
Aquí podemos dejar todo desactivado, a menos que necesitemos soportar archivos y dispositivos de bloques mayores de 2 TB. Si que entraremos en la opcion "IO Schedulers" donde tendremos que escoger al menos uno y usarlo como scheduler por defecto. Para un sistema de uso general, la mejor opcion es CFQ
5. Processor type and features
- Symetric multi-procesing support. Soporte para SMP
- Subarchitectures Type. Generalmente será PC-compatible
- Processor family. Aquí podemos optimizar el kernel segun las características del procesador. Una vez que entramos en esta opción, podemos seleccionar un tipo de procesador. El kernel 2.6.18 tiene soporte específico para procesadores VIA C3-3 (Nehemiah); los kernels más modernos incorporan también soporte para el procesador VIA C7
- Generic x86 support. Optimizaciones genericas, usado cuando no se está seguro del tipo de procesador en que se ejecutará el kernel.
- HPET Timer support. Usa el HPET como reloj interno del kernel. Es mas preciso que los viejos 8254, pero solo funciona si lo soportan la plataforma y la BIOS.
- Preemption Model. Esta característica influye en la latencia. Para servidores, se recomienda dejarla en "No Forced preemption". Para escritorios, se usa "Preemptible kernel". Si hemos aplicado el parche -rt de Ingo Molnar, tendremos también una opción "Full preemption" que permitirá a nuestro equipo funcionar en tiempo real.
- Preempt the big kernel lock. Otra opción que influye en la latencia.
- Local APIC support on uniproccessors. Control fino de IRQs.
- Machine check exception. Sirve para lanzar avisos o detener la máquina en situaciones de sobrecalentamiento, etc.
- /dev/cpu/microcode. Permite actualizar el microcode de los procesadores Intel IA32. Hace falta el microcode, que no está en el kernel. Necesita que se active el soporte para "/dev file system" en la sección "File systems"
- /dev/cpu/*/msr. Proporciona acceso a los MSRs para procesos privilegiados.
- /dev/cpu/*/cpuid. Proporciona a los procesos acceso a las instrucciones CPUID para que sean ejecutados en un procesador específico.
- High Memory Support. OFF-> RAM <= 1 GB; 4GB-> RAM <= 4GB 64GB-> Impredecible en sistemas a 32 bit.
- Memory Model. Normalmente escogeremos "Flat memory". En máquinas NUMA podemos escoger "Discontiguous memory" o "Sparse memory"
- MTRR support. Activar esta opción puede acelerar las escrituras de nuestra tarjeta gráfica hasta un 250%
- Enable seccomp to safely compute untrusted bytecode. Permite aislar aplicaciones que pueden necesitar ejecutar bytecodes "no confiables". Hay que activar seccomp via /proc/<pid>/seccomp. Una vez hecho esto, al proceso sólo se le permite ejecutar un numero reducido de llamadas al sistema
- Compat VSD= support. No es necesario activar esta opción si nuestra glibc es version 2.3.3 o posterior. Debian Etch lleva la versión 2.3.6, por tanto esta característica no es necesaria.
6. Power Management Options
Opciones de manejo de energía. En general, APM se considera obsoleto. Lo lógico es activar las opciones ACPI como módulos, y también las de CPU frequency scaling. Sin embargo, puede haber aplicaciones que necesiten algún módulo legacy.
7. Bus options
Aquí podemos activar soporte para PCI, PCI Express, ISA, PCMCIA/CardBus...
8. Executable file formats
Tendremos que activar el soporte para binarios ELF. Los binarios a.out están anticuados y es muy difícil que nos topemos con alguno, por tanto podríamos dejar esto sin marcar. El soporte para binarios MISC es útil para ejecutar programas interpretados - Java, Python, .NET...
9. Networking
- Networking support. El soporte de red. Hay programas que necesitan este soporte incluso en maquinas que no estan conectadas a ninguna red. Los ejemplos mas conocidos son X-Window y syslog. Por tanto, "Networkin support" es una opcion a activar siempre. Si lo unico que necesitamos es un sistema capaz de conectarse a una red ethernet, tendremos que entrar en "Networking options" y activar al menos lo siguiente:
- Networking options
- Packet socket
- Unix Domain sockets
- TCP/IP networking
Podemos dejar todo lo demás desactivado.
- Otras opciones no imprescindibles:
- Packet socket: mmaped IO. Mejora el rendimiento de "Packet socket"
- TCP syncookie support. Para prevenir el ataque DoS "SYN flooding". Para que entre en vigor, hay que editar el archivo /etc/sysctl.conf y descomentar la linea correspondiente. Necesita que este activado el soporte para /proc y sysctl (que es el caso normalmente)
- Network packet filtering. Si necesitamos que el sistema pueda ejecutar iptables (cortafuegos-NAT) tendremos que activar esta opcion. Dentro de ella hay dos secciones principales:
- Core netfilter configuration: Se recomienda marcar todo como modulo, o al menos todo lo que está dentro de "Netfilter Xtables support"
- IP: Netfilter configuration: Se recomienda marcar todo como modulo
10. Device drivers
10.1. Generic Driver Options
- Select only drivers that don't need compile-time external firmware. Esta opción viene activada por defecto y normalmente podemos dejarla así. Casi con seguridad se trata de una medida para incordiar a los modulos privativos que puedan surgir.
- Prevent firmware from being built. No hay necesidad de reconstruir el firmware con el kernel, de modo que la dejamos activada.
- Userspace firmware loading support. Si compilamos un kenel fuera del kernel, por ejemplo para una wifi rara, necesitaremos activar esta opción en caso de que el modulo requiera un firmware para funcionar.
10.2. Memory technology devices
Soporte para dispositivos MTD.
10.3. Parallel port support
Soporte para puerto paralelo. Normalmente activaremos esta opción, así como "PC_style hardware" y "IEEE 1284 transfer modes"
10.4. Block devices
- Loopback device support. Necesario para montar un archivo (por ejemplo una imagen ISO) como si fuera un dispositivo de bloques (caso de una live o un sistema de archivos encriptado).
10.5. ATA/ATAPI/MFM/RLL support
- Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
- Include IDE/ATA-2 DISK support
- Include IDE/ATAPI CDROM support
- PCI IDE chipset support
- El driver correspondiente al chipset de nuestra placa madre, por ejemplo "Intel PIIXn" o VIA82CXXX
- Otras opciones:
- Generic/default IDE chipset support. Este modulo, que no ofrece un gran rendimiento, ofrece la ventaja de que vale para todo los chipsets IDE. Se puede utilizar en el disco RAM inicial para garantizar acceso a cualquier chipset IDE. De este modo se contiene el tamaño de este disco RAM inicial. Una vez que hemos accedido al sistema y cargado el modulo IDE correspondiente a nuestra placa, ide-generic puede ser descargado.
- Generic PCI IDE chipset support. Soporta algunos chipsets que en caso contrario podrian no funcionar correctamente
10.6. SCSI device support
- SCSI device support. Los dispositivos USB-storage necesitan esto. Además, conviene activar también "SCSI disk support", "SCSI CDROM support" y "SCSI generic support" para los casos en que tengamos hardware que pueda caer dentro de estos tipo por usar una librería SCSI. Es el caso de los dispositivos SATA. Una vez activado esto, deberíamos entrar en la sección "SCSI low level drivers" y activar los módulos para nuestra controladora SCSI, o nuestro hardware SATA, suponiendo que tengamos algo de esto.
- SATA/PATA. En el kernel 2.6.18, estos drivers están en la sección "Device Drivers->SCSI device support->SCSI low level drivers". En kernels más recientes, los modulos SATA/PATA tienen su propia sección debajo de "Device drivers". Si tenemos un disco SATA, necesitaremos uno de estos modulos para poder acceder al disco. La opcion mas comoda es marcar como modulos todos los SATA y dejar los PATA (experimentales) sin compilar. Si activamos los modulos PATA, deberemos desactivar los modulos IDE. Actualmente el cambio no merece la pena desde el punto de vista estabilidad. No está claro hasta que punto si merece la pena en lo que respecta al rendimiento.
El modulo Intel SATA/PATA, al tener las dos caracteristicas en una, resulta especialmente molesto. Sin el, no podremos arrancar una maquina intel con disco SATA (aunque ultimamente se empiezan a ver maquinas Intel que usan SATA AHCI). En las maquinas Intel con discos IDE, el PATA hace que los dispositivos que eran /dev/hd* pasen a ser /dev/sd*. Como resultado de este cambio, el arranque se interrumpe con el mensaje "waiting for root filesystem" y al cabo de tres minutos nos deja en un shell busybox. La manera mas rápida de solucionar esto es reiniciar la máquina, editar la linea de grub para que el parametro "root=" apunte a /dev/sda1, editar /etc/fstab para sutituir todos los "hd" por "sd" y editar /etc/boot/grub/menu.lst para hacer permanente el cambio en la linea de grub.
10.7. Multi-device support
Soporte RAID
10.8. Fusion MPT device support
Soporte SCSI para controladoras paralelas, fibre channel...
10.9. IEEE 1394
Soporte FireWire. En los kernel recientes viene activado por defecto un FireWire nuevo. Este FireWire (Juju) no es reconocido aún por la mayoría de aplicaciones que usan FireWire, de modo que es mejor desactivarlo y activar en su lugar el antiguo (que es el único disponible en los kernel 2.6.18)
10.10. I20
Arquitectura que permite dividir los modulos en dos partes, para usarlo necesitamos una tarjeta I20 en la máquina.
10.11. Network device support
Aqui podemos limitarnos a activar el modulo correspondiente a nuestra tarjeta de red. Otra opcion es marcar todo como modulo.
10.12. ISDN subsystem
Soporte para tarjetas RDSI
10.13. Telephony support
Soporte para tarjetas QuickNet
10.14. Input device support
Aqui tenemos modulos para controlar teclados, ratones, tabletas graficas, pantallas tactiles y hardware que se comunica via puerto serie (Hardware I/O ports)
- Hardware I/O ports
- Serial I/O support
- i8042 PC keyboard controller (en kernels recientes)
- Serial port line discipline
- Raw access to serio ports
10.15. Character devices
- Virtual terminal. no podremos hacer mucho en nuestro sistema si no tenemos al menos una consola virtual, por lo que nos aseguraremos de que esta opcion esta activada. Esta opcion selecciona automaticamente la opcion "generic input" en la seccion "input devices".
- Serial drivers
- 8250/16550 and compatible serial support. Soporte para puertos serie. Otras opciones permiten indicar número de puertos, opciones extendidas, etc.
- Parallel printer support. Soporte para impresoras de puerto paralelo.
- Support for user-space parallel port device drivers. Esta opción puede ser necesaria si usamos el puerto paralelo para recogida de datos de sensores, etc. No es necesaria ni para imprimir ni para usar un CDROM de puerto paralelo.
- IPMI. Soporte para sensores IPMI
- Watchdog Timer support. Esta opción da soporte para tener procesos que avisen/actuen al detectar un cuelgue. Necesita un demonio.
- Hardware Random Number generator code support. Generacion de numeros aleatorios
- Enhanced Real Time Clock Support. Util si tenemos una máquina SMP. Otras opciones que incrementan la disponibilidad/precisión del rtc son: "Generic /dev/rtc emulation" y "Extended RTC operation"
- Siemens R3964 line discipline. comunicacion sincrona con dispositivos que usen este protocolo.
- /dev/agpart. Soporte para tarjetas graficas AGP. Tendremos que marcar esta opción y a continuación, la que corresponda a nuestra placa madre.
- Direct Rendering Manager. Soporte DRI. Necesitaremos marcar esto y el modulo correspondiente a nuestra tarjeta grafica.
- HPET - High Precission Event Timer. Permite seleccionar uno de los timers soportados por HPET.
- Hangcheck timer. Similar a un watchdog, detecta cuelgues, pero no necesita demonio.
- TPM Hardware support. Soporte para dispositivos de seguridad
10.16. I2C support
Soporte para sensores de hardware, video4linux y en general cualquier dispositivo que use este protocolo o su subconjunto SMB (Serial management Bus). La politica mas sencilla seria compilarlo todo como modulo, excepto quiza las caracteristicas de debugging.
10.17. SPI support
Serial peripheral interface. Soporta dispositivos que usen protocolos como Microwire, SSP, SSI y PSP.
10.18. Dallas 1-wire support
Soporte para iButtons y otros dispositivos que manejan el protocolo 1-wire. Sin embargo, una alternativa probablemente mejor es dejar esto desactivado y usar owfs.
10.19. Hardware monitoring support
Controladores para los sensores hardware.
10.20. Multimedia devices
Soporte para dispositivos multimadia, sobre todo Video4Linux y los controladores de tarjetas capturadoras, sintonizadoras, webcams, etc.
10.21. Graphics support
- Console display driver support
- VGA text console. Necesario si queremos tener una consola de texto.
10.22. Sound
- Sound card support. Necesitamos activar esto si queremos que nuestra tarjeta de sonido funcione
- Advanced Linux Sound Architecture. Soporte ALSA. Es mejor que OSS, que ya se considera anticuado, y al mismo tiempo tiene emulación OSS. Normalmente aquí marcaremos todo para compilar como módulo, si es posible.
- Open Sound System. Está anticuado, y son muy pocas las aplicaciones OSS que no puedan usar la emulación OSS que ofrece ALSA. Normalmente lo dejaremos sin compilar.
10.23. USB support
Soporte USB. La opcion mas sencilla es compilar como modulo todo lo que se pueda. Si necesitamos arrancar desde un dispositivo USB, todos los modulos necesarios para acceder a ese dispositivo deberan estar en el disco RAM inicial, o compilados dentro del kernel.
- Support for host-side USB. Soporte para controladores USB. Necesitaremos activar esto y al menos uno de los controladores que apareceran al activarlo.
- USB device filesystem. Permite tener un listado de los dispositivos USB conectados en /proc/bus/usb/devices
- EHCI HCD support. Soporte para controladoras USB 2.0
- UHCI HCD support. Soporte para controladores USB 1.1 en placas Intel y VIA
- OHCI HCD support. Soporte para controladores USB 1.1 en placa no-Intel no-VIA
- USB Printer support. Soporte para impresoras USB.
- USB mass storage support. Soporte para dispositivos USB-storage. Debemos marcar
esta opción y las correspondientes a los diferentes dispositivos que aparecen al activarla. Estos dispositivos han de compilarse como dentro del kernel.
- The sahred table of common storage devices. Soporte para mas dispositivos de almacenamiento.
- USB serial converter support. Soporte para dispositivos USB que funcionan como dispositivos serie. Ademas de esto, deberemos activar el controlador necesario para cada dispositivo concreto, la opcion mas sencilla es compilarlos todos como modulos.
- USB DSL modem support. Soporte para dispositivos ADSL con conexion USB. Si en esta seccion no nos aparece ninguna entrada, es que no tenemos activado el soporte ATM: debemos ir a la sección "Networking->Networking options" y activar "Asynchronous Transfer Mode (ATM). Esta es una característica marcada como experimental, de modo que si no nos aparece, es que debemos ir a la sección "Code maturity level options" y activar "Prompt for development and/or incomplete code/drivers.
- USB gadget support. Soporte para aquellos casos en que el ordenador actúa como perifŕico de un dispositivo USB (algunos cable-modems CDC, dispositivos MIDI, etc)
10.24. MMC support
Soporte para el protocolo "multi-media card" Si necesitamos esto, activaremos esta opción y al menos "MMC block device driver"
10.25. LED devices
Soporte para lucecitas, tanto desde el kernel como desde el espacio de usuario.
10.26. InfiniBand support
Soporte InfiniBand
10.27. EDAC
Esta característica experimental informa de errores a nivel de memoria, cache, PCI, etc.
10.28. Real Time Clock
-RTC class. Soporte RTC. Si lo compilamos dentro del kernel, aparecerán un par de opciones más, una para ajustar la hora del sistema en el arranque y otra para indicar desde qué rtc queremos leer la hora. También tendremos que indicar desde qué sistema queremos acceder al rtc (normalmente "dev", y al menos el driver correspondiente a nuestro rtc (o meterlos todos como modulos)
10.29. DMA Engine support
Soporte DMA. Quita trabajo a la CPU, de modo que lo activamos, así como "Network: TCP receive copy offload". Si tenemos una maquina Intel, activamos también "Intel I/OAT DMA support"
11. File systems
Soporte para los distintos tipos de sistemas de archivo. En todos los casos, las opciones "extended attributes" activan el soporte para ACLs. Sin embargo, este soporte puede hacer que os programas para redimensionar particiones no funcionen. Normalmente estos "extended attributes" se dejan sin compilar.
11.1. Second extended fs support
Esta anticuado
11.2. Ext3 journalling file system support
Actualmente el filesystem por defecto en GNU/Linux. Si queremos que el kernel pueda acceder al disco duro, tendremos que compilarlo dentro o asegurarnos que una copia del módulo esta en el disco RAM inicial. Si el disco está formateado con otro filesystem, lógicamente esatas instrucciones tendrán que aplicarse al módulo correspondiente.
11.3. Reiserfs support
Sistema con journalling adecuado para grandes directorios con multitud de archivos pequeños.
11.4. XFS filesystem support
Otro sistema journalling, el más rápido según los benchmarks.
11.5. Inotify file change notification support
Sistema de notificación acerca de cambios, por ejemplo montados y desmontados de sistemas de archivos. Conviene activarlo.
- Soporte inotify para espacio de usuario. También conviene activarlo.
11.6. Quota support
Soporte para cuotas. Si activamos esta opción, tendremos que seleccionar también una de las dos que aparecerán, probablemente "Quota format v2 support"
11.7. Filesystem in userspace support
Soporte FUSE. FUSE es usado por el nuevo metodo de acceder y escribir en particiones NTFS. También lo usan softwares exóticos como owfs (para leer sensores conectados a una red 1-wire), etc.
11.8. CDROM/DVD filesystems
Soporte para ISO9660, Joliet, etc. Si necesitamos arrancar desde un CD, convendrá tener compilados dentro del kernel los siguientes módulos:
- ISO 9660
- Microsoft Joliet
- Transparent decompression extension (si queremos leer una imagen comprimida con zisofs)
- UDF (si necesitamos ller un CD/DVD escrito en packet mode o creado con una utilidad UDF)
11.9. DOS/FAT/NT filesystems
Soporte para sistemas de archivos de windows. Conviene tener al menos DOS y VFAT compilados como módulos; por ejemplo muchos pendrives USB vienen formateados con VFAT. Si escogemos VFAT, conviene indicar que el codepage es 850 y el iocharset es utf8; de este modo se evitan problemas de conversión de caracteres.
En cuanto al soporte NTFS, es el antiguo y no tiene soporte para escritura; mejor usar FUSE y NTFS-3G y dejar esto desactivado.
11.10. Pseudo filesystems
Soporte para los sistemas de archivos virtuales como /proc. Casi con seguridad, el módulo para soportar /proc ya habrá sido seleccionado por algún otro módulo; si no es así, debemos hacerlo nosotros. También conviene marcar "Virtual memory file system support", eso nos dará soporte para archivos temporales fuera del disco duro. Algunas aplicaciones modernas (sobre todo multimedia) esperan tener este soporte disponible.
11.11. Miscellaneous filesystems
Soporte para sistemas de archivos exóticos, por ejemplo de Macintosh o de Amiga, etc.
11.12. Network Filesystems
Soporte para sistemas de archivos en red. NFS es el estándar en GNU/Linux; si necesitamos acceder a redes windows convendrá activar también el soporte SMB, y si lo hacemos, convendrá indicar que el "Default NLS" es cp850 (y indicar que el NLS local por defecto es UTF8).
El soporte SMB va a ser declarado obsoleto en el kernel 2.6.25; por tanto quizá no esté de más usar el soporte CIFS en lugar de SMB.
11.13. Partition types
En un PC, con marcar "PC BIOS" debe ser suficiente.
11.14. Native Language support
Conviene marcar "utf8" en "Default NLS Option". Podemos marcar como módulos, aparte del NLS UTF-8, el ASCII, los codepages 437 y 850, y todos los NLS ISO 8859-*
12. Instrumentation support
Podemos dejar esto sin compilar, a menos que seamos desarrolladores del kernel
13. Kernel hacking
También podemos dejar todo esto sin compilar, a menos que seamos desarrolladores del kernel. Sin embargo, la opción "Magic SysRq key" permitirá que apaguemos la máquina correctamente en caso de un cuelgue, esto puede ser útil si estamos compilando kernels y tenemos cuelgues inesperados.
14. Security options
- Enable access key retention support. Retiene claves de acceso en el kernel, util si usamos sistemas de archivos encriptados o de red. Normalmente no lo activamos.
- Enable different security modules. Al contrario de lo que dice la ayuda del kernel, debemos activar esto y también la opción "Default Linux Capabilities" para tener las capacidades por defecto activadas. Conviene compilar esto como módulo.
15. Cryptographic API
Soporte para diversos estándares de encriptación. Lo mejor es marcar todo como módulos.
16. Library routines
Similar al apartado Criptographic API, en este caso las funciones de encriptación se aplican a módulos construidos fuera del kernel.