No soy un experto pero creo siendo la segunda vez que compilo un kernel con mediano éxito, bien me parece que debo compartir algunas cosas que he ido tomando de algunas partes.
Habrás mejores introducciona al trabajo, por lo que voy al grano. Realicé todo el trabajo desde CentOS 6.3
Te conviertes en root con su - o le antepones sudo a todos los comando, como mejor te parezca
Necesitaremos instalados un par de paquetes antes de empezar.
Código BASH:
Ver originalncurses
ncurses-devel
binutils-devel (O el que sea que en tus distro provea gcc, glibc-devel, glibc-headers o lo que haga falta para compilar)
rpm-build (O su equivalente para crear archivos empaquetados en tu distro)
Descargo de
www.kernel.org cualquier versión, supongo que preferirás la más reciente.
Código BASH:
Ver originallinux-3.4.4.tar.bz2 a la fecha que estoy escribiendo
Mueves el paquete al directorio adecuado según tu distro. Acá en CentOS
Código BASH:
Ver originalmv linux-3.4.4.tar.bz2 /usr/src/kernels/
Te mueves hacia allá, descomprimes y te metes al directorio resultante
Código BASH:
Ver originalcd /usr/src/
tar -xjvf /usr/src/kernels/linux-3.0.3.tar.bz2
cd linux-3.0.3
Empezamos con el trabajo duro.
Algo así como el paso equivalente al ./configure de cualquier paquete que configuramos, solamente que esta vez las opciones vienen en una pantalla la mar de bonita.
Este es básicamente el arte de todo esto, por el que podrá valer la pena o no el compilar.
Conocer el hardware es primordial, así como la capacidad que tengamos a futuro de agregar más hardware. En el menuconfig se encuentra una pequeña descripción para cada opción que puede llegar a ser bastante reveladora. En serio, el kernel mete tantas cosas que uno ni se imagina, al menos en mi caso eso paso.
Entre otras cosas, mi computadora funciona con lo básico. Un procesador Pentium Dual Core E2200, motherboard Intel, y tan solo una tarjeta PCI de red como extra. Ni tarjeta de vídeo ni nada.
Por tanto, fui quitandolas siguiente opciones. Y pues hasta el momento funciona:
Código BASH:
Ver originalGeneral Setup
Local version - append to kernel release //Acá se coloca un nombre corto y descriptivo
Automatically append version information to the version string //Esta se habilita, al contrario de las demás
Enable the block layer
Partition Types //Deshabilite todas aquellas que no se refieran especificamente a Windows
Processor type and features
Enable MPS table //No lo quite la ultima vez. Espero probarlo un rato de estos. Para cualquier valiente con un procesador moderno
Support for extended (non-PC) x86 platforms
Paravirtualized guest support
AMD IOMMU support
AMD MCE features
Dell laptop support
Old style AMD Opteron NUMA detection
AMD microcode patch loading support
Networking support
Wireless
cfg80211 - wireless configuration API
Wireless extensions sysfs files
WiMAX Wireless Broadband support
RF switch subsystem support
Plan 9 Resource Sharing Support (9P2000)
Phonet protocols family
IEEE Std 802.15.4 Low-Rate Wireless Personal Area Networks support (EXPERIMENTAL)
Device Drivers
Block devices
Normal floppy disk support
Compaq Smart Array 5xxx support
ATA over Ethernet support
Misc devices
SGI IOC4 Base IO support
TI Flash Media PCI74xx/PCI76xx host adapter support (EXPERIMENTAL)
Channel interface driver for the HP iLO processor
Intersil ISL29003 ambient light sensor
Taos TSL2550 ambient light sensor
Multiple devices driver support (RAID and LVM)
RAID support
IEEE 1394 (FireWire) support
Desactiva todo sin piedad
Macintosh device drivers
Network device support
Fibre Channel driver support
ATM drivers
Wireless LAN
USB Network Adapters
Borra todo, la verdad es que no nos interesa
Input device support
Mice
Serial mouse
Podían aparecer producto Apple
Tablets
Touchscreens
Miscellaneous devices
Solo dejas PC Speaker support y User level driver support
Character devices
HSDPA Broadband Wireless Data Card - Globe Trotter
AMD HW Random Number Generator support
VIA HW Random Number Generator support
TPM Hardware Support
Borras todo, excepto el que no se deje.
Telecom clock driver for ATCA SBC
I2C support//Esta vez mejor lo deje por cualquier cosa
Hardware Monitoring support
Borras todo el que te ponga mala cara
Sonics Silicon Backplane
Desactiva todo lo que puedas que es solo para sistemas embebidos
Multifunction device drivers
Support for Silicon Motion SM501
Support Wolfson Microelectronics WM8400i
Multimedia support
Remote Controller adapters
Graphics support
Solo deje el que pone INTEL
USB support
USB runtime power management (autosuspend) and wakeup
Support WUSB Cable Based Association (CBA)
Elan U132 Adapter Host Controller
SL811HS HCD support
Wireless USB Host Controller Interface (WHCI) driver (EXPERIMENTAL)
Freecom USB/ATAPI Bridge support
ISD-200 USB/ATA Bridge support
Lexar Jumpshot Compact Flash Reader
Support for Rio Karma music player
Siemens ID USB Mouse Fingerprint sensor support
Apple Cinema Display support
InfiniBand support
Hardware bien específico, yo desactive todo
Staging drivers
Nouveau (nVidia) cards Esta opcion ya no aparece en kernel 3.4.4
Desactivar los drivers para Android desde kernel 3.4.4
X86 Platform Specific Device Drivers
Todo pone cosas relacionada con Laptop
IOMMU Hardware Support //Por esta vez se lo dejamos
Kernel hacking
Kernel debugging //Esta parte es una perla de importante
Remote debugging over FireWire early on boot
Virtualization
KVM for AMD processors support
Por ahora he hecho la prueba de deshabilitar todo. Se supone que no lo necesita, a menos claro que si lo necesite
Como dije, esta parte no es guia definitiva. Tienes que irlo estudiando, valorando para tu caso específico.
Lo que sigue es crear el paquete. Prefiero crear los rpm, da un poco más de limpieza para estar manejando todo este lío... Y porque sinceramente, me confundía demasiado con eso de make install - make install_modules.
Código BASH:
Ver originalmake -j2 rpm-pkg //El jn se refiere al numero de procesadores, y funciona cada vez que usas make
En mi caso, cosa que me ha sorprendido, la creación de lo paquetes ha durado bastante menos de los que pensaba. 45 Minutos, lo juro.
Los paquete se crean en /root/rpmbuild/, por lo que solo hay que ir a traerlos. Digo, los guardas, por ahora basta tener a la mano para cuando los instales.
Código BASH:
Ver originalen /root/rpmbuild/RPMS/x86_64/
están
kernel-3.4.4_ilaria-1.x86_64.rpm
kernel-headers-3.4.4_ilaria-1.x86_64.rpm
Y en
/root/rpmbuild/RPMS/
esta
kernel-3.4.4_ilaria-1.src.rpm
Las header serán requeridas para compilaciones en general según tengo entendido. EL SRC es necesario para muchas cosas. Por ejemplo, al instalar VirtualBox (Xen no me quiere) puedan crearse los módulos necesarios gracias a él.
La instalación no es nada del otro mundo.
Código BASH:
Ver originalrpm -ivh --replacefiles /root/rpmbuild/RPMS/x86_64/kernel-3.4.4_ilaria-1.x86_64.rpm
rpm -ivh /root/rpmbuild/RPMS/x86_64/kernel-headers-3.4.4_ilaria-1.x86_64.rpm
rpm -ivh /root/rpmbuild/RPMS/kernel-3.4.4_ilaria-1.src.rpm
Con la novedad que el --replacefiles puede no ser necesario. En CentOS no me deja instalar porque los archivos del nuevo kernel entrán en conflicto con los que ya están.
El peligro de usar la opción -U en lugar de -i es que te puedes quedar sin un kernel usable, algo que es necesario por si este fallará.
Si ves en boot, ahora debes tener estos cuatro archivos.
config-3.4.4-ilaria
vmlinux-3.4.4-ilaria.bz2
vmlinuz-3.4.4-ilaria
System.map-3.4.4-ilaria
Falta initramfs. Lo creamos con el siguiente comando.
mkinitrd /boot/initramfs-3.4.4-ilaria 3.4.4-ilaria --preload mbcache:jbd:ext4:lvm2
Si no usas LVM no es necesario el lvm2.
Ahora solo falta que lo agregues al boot, cosa que edito otro día. En general estaré pendiente para ver si alguien ha intentado seguirla y ver como le ha ido. Además, por acá rondan personas con mayor experiencia en esta área que pueden aportarnos ideas y decir que esta mal.
Bien, que por ahora eso es todo.