Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/07/2012, 22:47
Avatar de VTacius
VTacius
 
Fecha de Ingreso: junio-2010
Mensajes: 90
Antigüedad: 14 años, 4 meses
Puntos: 2
Algunas ideas para quien quiera compilar un kernel

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 original
  1. ncurses
  2. ncurses-devel
  3. binutils-devel (O el que sea que en tus distro provea gcc, glibc-devel, glibc-headers o lo que haga falta para compilar)
  4. 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
  1. 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
  1. 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
  1. cd /usr/src/
  2. tar -xjvf /usr/src/kernels/linux-3.0.3.tar.bz2
  3. cd linux-3.0.3

Empezamos con el trabajo duro.
Código BASH:
Ver original
  1. make menuconfig
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 original
  1. General Setup
  2. Local version - append to kernel release //Acá se coloca un nombre corto y descriptivo
  3. Automatically append version information to the version string  //Esta se habilita, al contrario de las demás
  4.  
  5. Enable the block layer
  6.         Partition Types  //Deshabilite todas aquellas que no se refieran especificamente a Windows
  7.  
  8. Processor type and features
  9.         Enable MPS table //No lo quite la ultima vez. Espero probarlo un rato de estos. Para cualquier valiente con un procesador moderno
  10.         Support for extended (non-PC) x86 platforms
  11.         Paravirtualized guest support
  12.         AMD IOMMU support
  13.         AMD MCE features
  14.         Dell laptop support
  15.         Old style AMD Opteron NUMA detection
  16.         AMD microcode patch loading support
  17.  
  18. Networking support
  19.         Wireless
  20.                 cfg80211 - wireless configuration API
  21.                 Wireless extensions sysfs files
  22.         WiMAX Wireless Broadband support
  23.         RF switch subsystem support
  24.         Plan 9 Resource Sharing Support (9P2000)
  25.         Phonet protocols family
  26.         IEEE Std 802.15.4 Low-Rate Wireless Personal Area Networks support (EXPERIMENTAL)
  27.  
  28. Device Drivers
  29.         Block devices
  30.                 Normal floppy disk support
  31.                 Compaq Smart Array 5xxx support
  32.                 ATA over Ethernet support
  33.         Misc devices
  34.                 SGI IOC4 Base IO support
  35.                 TI Flash Media PCI74xx/PCI76xx host adapter support (EXPERIMENTAL)
  36.                 Channel interface driver for the HP iLO processor
  37.                 Intersil ISL29003 ambient light sensor
  38.                 Taos TSL2550 ambient light sensor
  39.         Multiple devices driver support (RAID and LVM)
  40.                 RAID support
  41.         IEEE 1394 (FireWire) support
  42.                 Desactiva todo sin piedad
  43.         Macintosh device drivers
  44.         Network device support
  45.                 Fibre Channel driver support
  46.                 ATM drivers
  47.                 Wireless LAN  
  48.                 USB Network Adapters
  49.                         Borra todo, la verdad es que no nos interesa
  50.         Input device support
  51.                  Mice
  52.                         Serial mouse
  53.                         Podían aparecer producto Apple
  54.                 Tablets
  55.                 Touchscreens
  56.                 Miscellaneous devices
  57.                         Solo dejas PC Speaker support y  User level driver support
  58.         Character devices
  59.                 HSDPA Broadband Wireless Data Card - Globe Trotter      
  60.                 AMD HW Random Number Generator support
  61.                 VIA HW Random Number Generator support
  62.                 TPM Hardware Support    
  63.                         Borras todo, excepto el que no se deje.
  64.                 Telecom clock driver for ATCA SBC
  65.         I2C support//Esta vez mejor lo deje por cualquier cosa
  66.         Hardware Monitoring support
  67.                 Borras todo el que te ponga mala cara
  68.         Sonics Silicon Backplane
  69.                 Desactiva todo lo que puedas que es solo para sistemas embebidos
  70.         Multifunction device drivers
  71.                 Support for Silicon Motion SM501
  72.                 Support Wolfson Microelectronics WM8400i
  73.         Multimedia support
  74.                 Remote Controller adapters
  75.         Graphics support
  76.                         Solo deje el que pone INTEL
  77.         USB support
  78.                 USB runtime power management (autosuspend) and wakeup
  79.                 Support WUSB Cable Based Association (CBA)
  80.                 Elan U132 Adapter Host Controller
  81.                 SL811HS HCD support
  82.                 Wireless USB Host Controller Interface (WHCI) driver (EXPERIMENTAL)
  83.                 Freecom USB/ATAPI Bridge support
  84.                 ISD-200 USB/ATA Bridge support
  85.                 Lexar Jumpshot Compact Flash Reader
  86.                 Support for Rio Karma music player
  87.                 Siemens ID USB Mouse Fingerprint sensor support
  88.                 Apple Cinema Display support    
  89.         InfiniBand support
  90.                 Hardware bien específico, yo desactive todo
  91.         Staging drivers
  92. Nouveau (nVidia) cards Esta opcion ya no aparece en kernel 3.4.4
  93.                 Desactivar los drivers para Android desde kernel 3.4.4
  94.         X86 Platform Specific Device Drivers  
  95.                 Todo pone cosas relacionada con Laptop
  96.         IOMMU Hardware Support //Por esta vez se lo dejamos
  97.  
  98. Kernel hacking  
  99.         Kernel debugging  //Esta parte es una perla de importante
  100.         Remote debugging over FireWire early on boot
  101.  
  102. Virtualization  
  103.         KVM for AMD processors support  
  104.         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
  1. 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
  1. en /root/rpmbuild/RPMS/x86_64/
  2. están
  3. kernel-3.4.4_ilaria-1.x86_64.rpm
  4. kernel-headers-3.4.4_ilaria-1.x86_64.rpm
  5.  
  6. Y en
  7. /root/rpmbuild/RPMS/
  8. esta
  9. 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
  1. rpm -ivh --replacefiles /root/rpmbuild/RPMS/x86_64/kernel-3.4.4_ilaria-1.x86_64.rpm
  2. rpm -ivh /root/rpmbuild/RPMS/x86_64/kernel-headers-3.4.4_ilaria-1.x86_64.rpm
  3. 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.