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 original
ncurses 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 original
linux-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 original
mv linux-3.4.4.tar.bz2 /usr/src/kernels/
Te mueves hacia allá, descomprimes y te metes al directorio resultante
Código BASH:
Ver original
cd /usr/src/ tar -xjvf /usr/src/kernels/linux-3.0.3.tar.bz2 cd linux-3.0.3
Empezamos con el trabajo duro.
Código BASH:
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. Ver original
make menuconfig
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 original
General 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 original
make -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 original
en /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 original
rpm -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.