Revisión de Compilando el kernel GNU Linux-libre de Lun, 04/30/2018 - 01:33

La revisión le permite rastrear las diferencias que hay entre distintas versiones de una entrada.

El kernel predefinido que viene con Trisquel es un kernel genérico cuyo objetivo es ejecutar el máximo número de configuraciones de hardware. Cuando usted compila su propio kernel, puede optimizarlo para "su propio" hardware y deja fuera todos los controladores que no necesita. También es muy educativo echarle un vistazo a las entrañas de GNU Linux-libre.

Primero haga una carpeta dentro de su directorio home para compilar allí el kernel:
mkdir ~/kernel_compiling/

Para saber qué kernel tiene el sistema, digite en un terminal
uname -r

Adquiera el código fuente del nuevo kernel en http://www.fsfla.org/ikiwiki/selibre/linux-libre/ y guardelo en la carpeta recién creada kernel_compiling.

Instalamos los paquetes necesarios para realizar la tarea:
sudo apt-get install kernel-package ncurses-dev bzip2 module-init-tools initramfs-tools procps fakeroot build-essential lzop unp bc

Si planea usar las herramientas de configuración gráfica, gconfig o xconfig, se necesitarán paquetes adicionales, respectivamente libgtk2.0-dev libglib2.0-dev libglade2-dev para gconfig o libqt3-mt-dev para xconfig. Podría haber también otras dependencias y si no están satisfechas será notificado una vez que intente invocar el configurador gráfico.

Vamos al directorio kernel_compiling, digitando en una terminal:
cd ~/kernel_compiling

Ahora extraemos el archivo del nuevo kernel, v.g.
unp linux-libre-3.18.8-gnu.tar.xz

Luego entramos a la carpeta del nuevo kernel:
cd linux-3.18.8

Ahora usted podría aplicar cualquier [https://es.wikipedia.org/wiki/Patch_(Unix) parche] que desee.

Entonces comenzamos la etapa de configuración. Esto requiere una gran cantidad de trabajo de su parte y tomará bastante tiempo. Hay muchas formas interesantes de seleccionar algunas de las opciones; usted podría querer leer el archivo README.
less README

EL localmodconfig es bastante laborioso, y probablemente necesita algunas agregar y quitar algunas cosas.

Tal vez se puede comenzar copiando el config del kernel que está usando actualmente.
make oldconfig

Entonces seleccione una de las herramientas de configuración interactivas
make config
(basado en texto, lineal)
make menuconfig
(basado en texto, interface ncurses)
make gconfig
(gráfico basado en GTK) (GTK=gnome toolkit)
make xconfig
(gráfico basado en QT) (QT=toolkit used in KDE)

Pienso que menuconfig es probablmente el más rápido, gconfig es el más bonito y xconfig tiene de lejos la mejor función de búsqueda.

*Y significa integrado al kernel y (teóricamente) siempre activo
*M significa compilado como un módulo y activado si se requiere
*N significa no incluido de ninguna manera

Es posible obtener información acerca de su procesador con
cat /proc/cpuinfo

To get info about the rest of your hardware, run
lspci
and
lsusb

Start with changing only the obvious things, the ones you're 300% sure of. You will repeat this process many times and will get to know the more esoteric ones... If this is your first time, don't be too bold! Once you're done, save changes and exit.

Clean the slate for kernel compiling
make-kpkg clean

You can get the current number of CPUs using the command
grep -c '^processor' /proc/cpuinfo

If you have a multiprocessor machine, you'll want to make all processors work, do e.g.
export CONCURRENCY_LEVEL=2

Documentation suggests using "a (small) integer".

Perform the actual compile, this will take anywhere from 10 minutes to 5 hours depending on your hardware and configuration choices (the more you selected, the longer it will take). Your presence is not required. You need to include kernel_headers if you later want to compile some other modules against your kernel.

make-kpkg --rootcmd fakeroot --initrd kernel_image kernel_headers

It then will give you all kind of chatter, warnings and notices during, it's quite normal. Only errors are serious, as in the process will halt. If you get an error about missing zlib.h, you need to install the zlib1g-dev package. If you get any other error, you probably need to install a related -dev package as a rule of thumb.

Once it's done through with no errors, goto the lower directory where the .deb we just created is
cd ..

If you didn't select kernel support for gzip type of initrd compression then you need to edit the COMPRESS parameter of initramfs.conf to match your selection. Gzip will be used for compressing the initrd unless you specify something else in initramfs.conf. If your kernel doesn't support the compression used to make the initrd, you'll get a kernel panic at reboot (indicated by hang + flashing caps lock).
sudo nano /etc/initramfs-tools/initramfs.conf

Install the .deb package(s)
sudo dpkg -i *.deb

Then it's the moment of truth, the smoke test! It's a good idea to have a live CD or live USB at hand now. Reboot and hold shift to show grub menu and select from the list the new kernel.

If it boots, nice, you made it, congratulations!

Checklist
* Network (Wireless and Ethernet)
* Audio
* USB Sticks
* CD/DVD Drives
* Any queer peripherals

If not, reboot and select another kernel from the menu. Back to the drawing board...

You'll want to polish the kernel more, go back to the directory you extracted the source into. If everything worked out pretty nicely, make a backup of your .config. If it failed spectacularly, you might want to load a working .config and start working from it again.

Then do some more configuring, and cleanup, recompile... repeat until! :)

Hints and tips:

* Check out the time command to clock your compiles to see how long it takes.
* You might want to nice your compile, so you can use your computer while it is compiling.
* Try patching your kernel with something, for example, http://tuxonice.net/
* I use xxdiff to compare different .config files.
* There's some good info available at http://kernelnewbies.org/FAQ

If you have questions or comments, please make a new thread in the [http://trisquel.info/forum/users forum].

Revisiones

04/30/2018 - 01:33
alejandro_blue