HACK THE SYSTEM: Como compilar un kernel y no morir en el intento | Todas las distro

RSS

 Seguime por RSS

13 nov 2012

Como compilar un kernel y no morir en el intento | Todas las distro

Dado que algunos comentarios en el post hacian referencia a no saber compilar un kernel, es que decido hacer este post.

Segun algunas wikis o FAQ, como la de Ubuntu, dirán, que si realmente necesitas compilar un kernel, porque si, porque no, y muchos etc que basicamente desalientan al usuario a hacerlo.

Es uno de los motivos por los cuales me distancie de Ubuntu y su comunidad, pero no viene al caso extenderme sobre ello en este post. Así que daré mis razones porque si, porque no.

Porque no deberias compilar un kernel?

1.- El kernel que tienes funciona bien, cumple con las espectativas y cubre todo tu hardware, ademas, si usas distro como RHEL o Debian, el kernel que compiles, puede ser inferior, y... ademas deberás compilar uno cada vez que salga una version nueva del mismo.
2.- Puede que tu sistema no inicie y si no sabes usar chroot desde un liveCD, bueno, la jodiste, a menos que busques la entrada de como recuperarlo en este mismo blog
3.- Si tienes un CPU poco potente, es una tarea que puede demorar horas y horas (por ejemplo, un Athlon XP 1.8Ghz de 1 core, puede demorar 3hs)
4.- No te gusta leer ni aprender, ni entender lo que estás haciendo

Porque si deberias compilar un kernel?

1.- Quieres un kernel mas nuevo con funciones nuevas, que las puedes leer en LWN.net, kernelnewbies, h-online, donde dices "ey justo eso necesita mi pc nuevita, las instrucciones del nuevo AMD FX, o sus APU, etc.
2.- Padeces versionitis
3.- Mejorar cosas en cuanto a rendimiento comparado al kernel de stock, como aplicar parches, compilarlo con mas o menos HZ, con o sin real time, etc
4.- Quitar la una enormidad de modulos y cosas que no usas para asi hacerlo mas pequeño
5.- Elegir el modelo de tu CPU, mother, y otros componentes, y quitar TODO lo que no es de tu PC, dando asi, una mayor, eficiencia, poco notable, pero, notable al fin
6.- Aplicar parches como grsec, tux on ice, ck, etc
7.- Que soporte tu nueva placa wifi o tu sintonizador de TV digital por aire
8.- Aprender?, creo que es el mejor motivo

Nadie nace sabiendo y mucho menos en estas cuestiones, tampoco se pretende (ojo, el que quiera me parece excelente), que sea un experto en kernels, pero si, que puedan el día de mañana, compilar un kernel a medida para un sistema X dado, en funcion de lo que se necesita, como ser, Gentoo Hardened.

Primero que nada, para los mas nuevos, el kernel es el nucleo del sistema, que maneja el hardware, digamos, el que hace de cartero entre el firmware y los programas, gestiona memoria, etc.

Cuantas formas de compilar existen?

Muchas, pero, ordenemos las cosas:

1.- La debian way, que consiste en usar el paquete make-kpkg creando asi un .deb redistribuible (no lo recomiendo, crea mil enlaces simbolicos y suele tener errores)
2.- La Fedora o RHEL way, creando un rpm redistribuible
3.- La vieja escuela, usando make a pelo (luego puede de esa misma compilacion, crear un rpm, en este mismo blog podrán ver como, aquí)

Que metodo aprenderé aquí?

La vieja escuela, hacia falta aclarar? :P

De donde saco el kernel?, y sus parches?

Primero que nada, vamos a establecer de donde, como y porque usar tal o cual kernel y cual usan las distro.
El kernel como se lo conoce, proviene de http://kernel.org, luego cada distro, lo modifica a gusto en sus configuraciones (como Arch que lo hace real time, por eso dicen que es la distro mas rapida, pero el secreto es el kernel, NADA MAS), agrega parches para hacer funcional cosas propias, como AppArmor, SELinux, o simplemente bugfixes que consideran necesarios para no estar ofreciendo updates del mismo cada 2 meses, mas allá de eso, nada mas.
Cuando un kernel se compila, extrayendo sus fuentes de kernel.org, se le llama Vanilla, y cuando se le aplica parches o es de una distro, se le llama kernel de X distro. En Ubuntu, le agregan el sufijo -generic, dado que es un kernel de uso general, lo cual, es el mismo que en otras distro, solo que, ellos prefieren aclararlo.
OpenSUSE por ejemplo, posee kernel Xen, Desktop y Server, ya previamente modificada la configuracion del mismo.

Que necesito para compilarlo?

Depende la distro, al metapaquete le llamen build essentials, como es el caso de Debian y derivados, pero lo que realmente se necesita es:

make
gcc
ncurses-devel
ncurses
tar

Así que acorde a tu distro, instala esas cosas.
Además de ello, necesitas el codigo fuente, que no es mas ni menos que los .tar.xz (antes eran .tar.bz2) que puedes descargar de http://kernel.org.

Cual elijo?

En kernel.org, verán una variedad de kernels, básicamente, se divide en algunas ramas. Los oldstable, que son los 2.6.32.x, usados en servidores o distros servidor, que son kernel casi sin fallas, pero, con ausencia de muchas caracteristicas de kernel nuevos.
La rama latest stable, que es kernel mas nuevo, que es estable.
La rama media, que son por ejemplo los 3.4.x y 3.2.x, que son estables, de soporte extendido, pero algo mas nuevos que los 2.6.32.x, aunque, cada cambio que se aplica al kernel mas nuevo, se aplica a ellos tambien, siempre y cuando lo amerite, para eso, se recomienda, leer el changelog si están interesados en los cambios y asi compararlos con el mas nuevo.
Mas información sobre el tema: Kernel Releases

Desde *mi* punto de vista, nunca es lo mas aconsejable, compilar el ultimo, mas que nada porque se actualiza de forma muy constante, y esto conlleva a recompilar cada 2 meses o 3 (dado que siempre partimos de un .config anterior y de una rama a otra, este cambia en opciones), por lo tanto, recomiendo 3.2.x o 3.4.x, que son muy nuevos pero no se actualizan tanto.
OJO, si necesitas algo que si o si está en el último kernel, bueno, no queda otra :P

Empezando...

Primero que nada, luego de haber seleccionado uno de nuestro gusto, nos logueamos como root, y nos metemos en /usr/src/ (cd /usr/src), donde con wget, axel o aria2c, bajaremos el .tar.xz
Una vez finalizado esto, pasaremos a descomprimirlo, con este comando:

# tar Jxvf kernel-3.4.11.tar.xz

Noten la J mayuscula, eso es para .tar.xz, en los .tar.bz2 es: tar jxvf (J minuscula)

Luego de una extensa salida, se creará un directorio llamado linux-3.4.11 en este caso, asi que ingresamos en el, con el comando cd.

Una vez allí, necesitamos partir de una base, una configuracion que sabemos que funciona, asi que, copiamos la config de nuestro kernel de /boot (generalmente se ubica alli), a donde estamos parados con el nombre .config de esta manera:

# cp /boot/config-xx-xx-xx- . && mv config-xx-xx-xx .config (el punto no esta de más luego de xx-, un espacio y . al final de un cp es copiar donde estoy parado)

El archivo .config, es que el contiene todos los seteos del kernel, entonces, a partir de uno existente, vamos a modificar valores.

El paso siguiente, es:

# make menuconfig

Lo cual nos abrirá un bonito menu en ncurses, para poder ir configurando cosas, que se verá mas o menos asi:


No voy a adentrarme en cada configuracion, solo les diré, que, de por si, ese .config, va a funcionar.

La tarea ahora, es, setear el tipo de CPU, la marca del mismo, descartar cosas que no usen, tanto en hardware, devices, e incluir las que si usan, de preferencia como * y no como M (metidos y no como modulos, asi tendremos un initramfs mas chico).

Las cosas se marcan o desmarcan con el uso de la barra espaciadora, y hay que diferenciar algo, las cosas incluidas como *, son las que iran empotradas en el kernel, es decir, NO pueden sacarse y tampoco requieren estar en initramfs, y las que se colocan como M, serán colocadas como modulos, es decir, está la ruta creada, el modulo .ko bajo /lib/modules/versiondekernel/ pero se carga solo si el hardware esta presente, asi que, si tienen alguna duda sobre algo, lo dejan como M (modulo).

Ventajas?, bueno a ver, un kernel que solo funcionara en una PC, que no se le cambiara nada de hardware, cuanto mas cosas se le quiten que no se usen, mejor, y, las cosas de mayor uso, como ext4, los driver de sata, etc, si estan como *, el acceso sera mas rapido.

La frecuencia de Timer Frequency, siempre ponerla en 1000HZ, y el preemption model, dependiendo el uso, si es un server, como lo indica el menu... server, desktop o low-latency desktop, que es el usado por ArchLinux, lo que da un kernel que al hacer uname -a, devuelve esto:  PREEMPT

Un valor interesante, es "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)", el cual, si leen el help (cada item tiene un help bien explicado), verán de que hablo.
Tambien recomiendo visitar la seccion Kernel Hacking del menú y leer los help, encontrarán cosas interesantes, asi como defininir su CPU, y la marca, es decir, exploren TODOS los item y sub-item, eso si, jamas quiten el soporte de archivos que usan, como ext2-3-4, o el que sea que usen.

Algunas opciones para recomendar, son la de "Optimize for size", o predefinir el modelo de cpufreq, para no tener que usar el demonio cpupower o similares, yo lo uso en ondemand por default, asi, el kernel eleva la frecuencia del CPU en base a lo que necesita, y no requiero del paquete cpufre-utils o cpupower.

Una vez que todo este a su gusto, salen, al salir les preguntará, si desean salvar la configuracion, le dicen que sí.

Ahora, sumando 1 al numero de cores reales que poseen, van a ejecutar make. Si poseen 2 cores, será 3 el valor total, asi:

# make -j3

Eso va a crear el bzImage y los modulos, una vez que termina el proceso, sin errores, el próximo paso es:

# make modules_install

Lo cual instalará los modulos con la version del kernel bajo /lib/modules/versiondekernel

Solo resta instalar le kernel. En el caso de Fedora y Red Hat o clones, por cumplir con la LSB (el formato RPM), solo deben hacer:

# make install

Lo cual, copiara en bzImage a /boot, y creará el initramfs usando dracut en el caso de Red Hat based.

Para Debian y derivados, el comando para crear el initramfs, es:

# mkinitramfs -k -o /boot/initramfs-3.4.11.img (en el caso de un 3.4.11)

En el caso de ArchLinux, el comando es mkinitcpio:

# mkinitcpio -g /boot/initramfs-3.4.11.img -k 3.4.11 (En ArchLinux, se crea el initrd a partir del kernel dado, mkinitcpio examina y encuentra el parametro que se le da, si se compiló un 3.4.18 debe ir donde dice 3.4.11, 3.4.18, y asi con cada version.

Bueno, ahora ya tenemos todo, chequeamos con un ls -l /boot, debe estar, el kernel nuevo, su initramfs, su System.map y es todo.

En el caso de GRUB 0.97 o mejor conocido como GRUB 1, se edita el mismo, con nano o lo que elijan, en la ruta /boot/gru/menu.lst, donde el valor default, se cambia por 0, que es el primer kernel en la lista.

Siempre que compilemos, el kernel quedará como primero en la lista pero GRUB debe ser modificado, sino, iniciará con el kernel viejo.

En el caso de GRUB2, el procedimiento es:

Debian based:

# update-grub2

Red Hat based:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Luego de todo esto, solo resta reiniciar, si todo salio bien, el sistema iniciará, debemos chequear que tome toda la RAM, luego mirar posibles errores en dmesg, asi:

# dmesg|more

Que, ahi esta la broma, cada error es informado, asi que podemos recompilar una y otra vez, hasta depurar y que queda, perfecto!, ese .config perfecto lo salvamos en /boot/config-3.4.11 con ese nombre por ejemplo, y cada vez que haya un update de kernel, en http://kernel.org, usamos ese config previo.

En el caso de Fedora y RHEL, existe un tip, en /etc/dracut.conf, en la linea donde dice: hostonly=, colocar hostonly="yes", y descomentar la linea si lo estaba, asi, el initramfs, sera mucho mas pequeño, pero, nuestro disco no será portable, es decir, si lo sacamos y colocamos en otra pc, quiza no inicie, pero, ganamos unos segundos en el booteo.

El tema de los parches, recomiendo si es que nunca han compilado un kernel, lo dejen para mas tarde, cuando esten "cancheros" en el tema, dado que a veces pueden romper algo. Para el que quiera experimentar, man patch

Espero que sea exitosa su compilación, y que aprecien el valor de poder hacer esto en un sistema libre, en OSX o Windows, esto, no es posible bajo ningún punto de vista.

51 comentarios:

  1. Como bien dices es mejor tener el núcleo por defecto puesto que recompilarlo da bastante trabajo y sus beneficios son mínimos, a no ser como comentas que tengas que conectar algún soporte físico " Que soporte tu nueva placa wifi o tu sintonizador de TV digital por aire "

    Para un uso normal el que te instala por defectos tendria que sobrar.

    ResponderEliminar
    Respuestas
    1. Si, aunque, en entornos no productivos, en realidad, no da mucho trabajo. Partiendo de un .config ya refinado como el que yo me guardo en un pendrive, es nada mas que bajar los fuentes, descomprimir, mirar que este todo bien, y es mas, puede hacerse automatizada la tarea: make -j3 && make modules_install && make install y luego modificar grub. No es mi caso el de soporte externo o hardware, pero debo decir que el 3.4.18 me funciona mas rapido en la laptop que el de stock, incluso mas rapido que los 3.2.x, tanto vanilla como los de Debian con sus parches. Asi que, cada tanto compilo alguno cuando hay una actualizacion. Ademas de claro, ser mas pequeño y solo para la laptop, con lo necesario, ni de mas ni de menos.

      Eliminar
  2. Muchas gracias, SynFlag. Voy a tener que mirarlo muy detenidamente, por ejemplo no tengo ni idea del chroot, lo tendré que buscar en el blog, pero me animaré a compilar uno y probar SL con él.
    Para los que nos cuesta leer en inglés, este tipo de posts son muy útiles.

    ResponderEliminar
    Respuestas
    1. Me incluyo, detesto el inglés, y lo leo cuando necesito aprender algo, aunque inglés técnico entiendo.
      Lo de chroot SOLO se usa en caso de que algo falle, nada mas, te paso la entrada: http://hackingthesystem4fun.blogspot.com.ar/2011/06/recuperar-grub2-teniendo-en-distintas.html

      Pero es solo para grub2 en caso de romperlo. SL usa GRUB 0.97, y en caso de que algo salga mal, puedes siempre, bootear con el kernel anterior :D, van a aparecer en la lista

      Eliminar
  3. graciass por tus conocimientoss =)

    ResponderEliminar
  4. hola perdona mi ignorancia después de compilar el kernel se tiene que poner el parche, o no es necesario?

    gracias

    ResponderEliminar
    Respuestas
    1. Hola tty. Los parches se añaden con el comando patch antes de la compilación, claro está que son modificaciones en el código fuente del kernel, por tanto, de nada sirve aplicarlos a algo que no se va a compilar y ya ha sido compilado.

      Eliminar
  5. Hola SynFlag, uso Gentoo desde hace varios años con las satisfacciones y dolores de partes pudendas que esto implica. Unos de los motivos de recompilar el kernel es -en mi caso- la ##$%& placa de wifi broadcom 4313, que usa el brcmsmac como modulo y los drivers para i915 y derivados de video-intel. Usar un config viejo a veces me da resultados de un kernel a otro, pero la mayoria de las veces opto por hacer todo de cero (en realidad del config por defecto) ya que aparecen (y desaparecen) muchas opciones en estos drivers. Una cosa que si a lo mejor tenes idea es porque no figura los core-i3 al i7 entre las opciones de procesadores (uso xeon como lo que mas se acerca)?. Saludos

    ResponderEliminar
    Respuestas
    1. Hola Martín Lopez,

      Mirá, usando el mismo .config dentro de mismo branch, como ser 3.2.x está bien, yo vengo con el 3.4.x desde que aparecio y no he tenido problemas. El tema es cuando cambia mucho, si, lo mejor es partir de cero, pero, se puede usar de todos modos, solo que, repasando todas las opciones, dado que a veces cambian de lugar y hay que volver a tildar modulos u opciones de kernel.
      Lo de los core iX, en realidad, usando core2duo/Xeon estaría bien, ahora, si queres realmente hacer un hack, yo lo hice en muchas oportunidades, podes meter los flag en el makefile, asi los lee el gcc al compilar, modificando un archivo, /usr/src/linux-3.4.24/arch/x86/Makefile.cpu, donde hacés podés modificar los valores, esto luego de haber hecho el make menuconfig, y agregarle cosas, leyendo el manpage de gcc, donde podés añadir cosas, algunas agregan basura, otras no, y te digo, compilando unos 10 kernel, sacando y poniendo cosas te vas a dar cuenta si mejora o empeora algo, o si mete basura el gcc, por el tamaño final del vmlinuz.
      Por ejemplo: cflags-$(CONFIG_MCORE2) += -march=i686 $(call tune,core2)
      El core2duo usa esos flag. En la guia de Gentoo, hay una buena explicación de que flags usar y cuales no son recomendables, para no meter basura, es decir, hasta donde es prudente meter, en el make.conf.
      De todos modos, si usas Gentoo, no necesitás modificar Makefile.cpu, con tocar el make.conf, basta y sobra, asi de paso no solo lo aplicás al kernel sino a todo, que es donde vas a notar la diferencia, aunque en algunos codigos podes joder el binario, asi que, podés, meter todo lo que veas que te mejora al rendimiento en Makefile.cpu, modificarlo en realidad, y luego al make.conf de Gentoo los que Gentoo indica como seguros para no romper nada.
      Lo de la placa wifi, http://www.broadcom.com/support/802.11/linux_sta.php ahi te bajás 32 o 64 según sea, y compilas el modulo y listo.
      Espero haberte ayudado.

      Eliminar
  6. Mi primera compilación en SL (antes había compilado en ubuntu y arch) Muy bien explicado para los que no somos informáticos. Sólo necesito un kernel de la serie 3 por un dac-usb (convertidor analógico-digital de audio) que no me funciona con el kernel de serie. Tambien tengo instalado el kernel-lt de "elrepo". Lo único que he modificado en el menuconfig ha sido lo del realtime y seleccionado mi procesador. El kernel es el mismo que el de "elrepo" y lo noto todo un poquitín más fluido. Luego instalé los drivers privativos de nvidia sin ningún problema. Gracias por tus aportes.

    ResponderEliminar
    Respuestas
    1. De nada, para eso era el post, era la idea y mision. Llegar a cualquiera que no sea informatico y darle las herramientas para armar su kernel.
      Si, siempre compilo en real time y seleccionando mi CPU, ademas de sacar los demas, fs que no uso, etc, dejandolo chiquito, y se nota un poco la diferencia, sobre todo en video, los FPS en juegos aun mas.
      La rama 3.4.x la verdad es que anda muy bien, no he tenido 1 solo problema desde que la uso y eso fue apenas salio.

      Saludos

      Eliminar
    2. Y ¿que opinas de los parches de kon colivas? En arch utilizo el kernel-ck precompilado del repositorio de Graysky y no sé si es efecto placebo pero en multiarea me parece que aumenta el rendimiento sobre todo cuando estoy codificando video o audio. Leyendo algún post demasiado avanzado para mí parece que en realidad los beneficios son casi imperceptibles y los benchmarks no muestran resultados definitivos.

      Eliminar
    3. Conozco el parche y lo usaba. Desde que se aplico cgroups y el famoso parche de las 200 lineas, alla por el 2.6.38, el parche -ck dejo de ser tan tan notorio al compilar en modo real time. Antes de eso era MUY notorio, luego de eso no tanto, y la verdad es que, si bien acelera mucho las cosas dado que el scheduler es otro, no CFQ por defecto, o deadline, noop, en algunas circunstancias puede generar que algunas aplicaciones no respondan, sobre todo si estas en paralelo haciendo fuertes escrituras a disco y mientras una aplicacion de gran demanda pretende usar todos los recursos.
      A menos que uses un disco SSD claro está.

      Eliminar
    4. Gracias por la aclaración.

      Eliminar
  7. robe.venegas.m@gmail.com14 abr 2013, 23:01:00

    cómo lo compilo para una apu de amd ?

    ResponderEliminar
    Respuestas
    1. Supongo que te referis a la seccion marca de CPU, por supuesto ponés AMD y sacás las demás. Andá probando (nunca tuve un APU asi que no probé el seteo optimo) y por el tema de turbo core, se maneja por cpufreq-utils asi que en en la seccion ACPI deja como modulos (va a cargar el que corresponda) los modulos de powersave, performance, etc. Luego en la seccion de video, tiene una parte de graficos hibridos, no recuerdo ahora como se llama, pero lee los help que varios dicen "amd APU".
      Mi consejo es que partas como digo en el post, de un .config que te funcione y vayas sacando las cosas que sabes a ciencia cierta que no usas, como placas de sonido, de video, marcas de cpu, funciones de ECC de server, etc.

      Eliminar
  8. Hola, espero que aun sigan habilitados los comentarios o que aun se pueda resopnder mi duda.
    Son como ya 2 meses que vengo utilizando LINUX, para ser mas especifico GNU.LINUX Ubuntu.

    Bien, realize todo el procedimiento que describes y todo fue bien.
    Sin emargo al querer iniciar desde el kernell ya compilado no puedo hacerlo.
    Me sigue apareciendo el kernell que viene por default.
    Incluso con un 'uname -r' verifico que el kernel que estoy corriendo es el de la distro y no el que yo he compilado.
    Necesito una ayuda ya que he intentado varias cosas y no lo logro.
    AYUDAAA!!!! XD

    ResponderEliminar
    Respuestas
    1. Es que necesitas correr grub2-update si usa GRUB2 para que se actualice el menu del mismo.

      Eliminar
  9. tengo este problema

    configuro todo con make menu config

    cuando estoys listo para compila, me empieza a preguntar todo lo que configure anteriormente de nuevo :(

    ake[2]: se ingresa al directorio `/usr/src/linux-3.9'
    scripts/kconfig/conf --oldconfig Kconfig
    *
    * Restart config...
    *
    *
    * CPU/Task time and stats accounting
    *
    Cputime accounting
    > 1. Simple tick based cputime accounting (TICK_CPU_ACCOUNTING)


    que puedo hacer ?

    ResponderEliminar
    Respuestas
    1. Es porque al salir, no pusiste save al final de la lista en el menu principal del make menuconfig, abajo de todo dice, save, y lo salva en un .config, vas a ver que no lo tenes :D

      Eliminar
    2. O sea, no estas salvando lo que seteas, solo presiona en save to config file y listo, vas a ver como si anda

      Eliminar
  10. como puedo modificar la parte grafica que le quito al momento de hacer la configuración

    ResponderEliminar
    Respuestas
    1. No entiendo la pregunta. La grafica que es el soporte para placas de video, modificarlo en que sentido?, es lo unico que logre entenderte.

      Eliminar
  11. Hola syn , una consulta logré compilar todo con éxito y quite cosas innecesarias pero luego de haberlo instalado el kernel pesa 2gb , eso no es normal en comparación con los 20 o 30 mb que pesa el kernel , ahora sabes ¿porqué pudo haber pasado ? , aclaro que cargué el .config del kernel 3.9.5 que viene en fc19.

    Gracias

    ResponderEliminar
    Respuestas
    1. 2gb?, es imposible, a menos que no hayas creado el initramfs o en el .config hayas sacado el soporte para tal, mas que le hayas sacado la compresion o esa seccion que dice optimizar tamaño.
      Es raro dado que, si el kernel pesa no se, 70mb, a 2GB, realmente es raro, me parece mas codigo basura de GCC, no se si usaste algunos flags de compilacion

      Eliminar
    2. gracias por responder syn c; y si es extraño de hecho el kernel 3.10.5 después de descomprimirlo pesa 480 Mb , eso ya es bastante, pero iré recompilando hasta dar con el peso ideal , total mas que nada esto lo veo como aprendizaje c:


      saludos !!

      Eliminar
    3. De nada, y intenta inicialmente compilar con el .config de tu distro y compara el peso con el que viene con la distro, misma version de kernel, mismo kernel, deberia dar mismo peso (excepto por los parches de la distro) o aproximado, si no es asi, es un bug de gcc.. en tu distro

      Eliminar
  12. Hola, la verdad que este tutorial es espectacular. Soy estudiante de Ingenieria Informatica, y estoy en 3er año. Hace un año que estoy en linux, el año pasado en Fedora y ahora en OpenSUSE, y me cuesta todavia adaptarme, pero me encanta. Tengo un par de preguntas para hacerte. Hace 1 mes me compré una notebook nueva, me trajo un intel core i5 3230m, 8gb de ram @ 1333, gpu integrada intel hd 4000, y otras cosas. Estoy teniendo un problema de gráficos, particularmente cuando simulo objetos generados en computación gráfica, por ejemplo, un cuadrado, cuando mantengo el clic apretado en algún punto del objeto y deseo moverlo (sobre su eje) con el mouse, este se mueve pero con "atraso" es decir, si lo muevo 4 segundos, cuando suelto el clic sigue moviéndose dos segundos mas o tres; y también otros problemas gráficos como bajos fps. Creo que esto se debe a un problema de drivers, pues en Windows 8.1 (tengo dual boot) estas cuestiones funcionan como deben ser y bien fluidos, digo esto para destacar que no son errores de programación. Quiero saber como solucionar esto, actualmente tengo la ultima version del kernel y sigue este problema, pero quiero saber si compilandolo manualmente se puede solucionar. De no ser asi, quisiera que me propongas alguna solución a lo que tengo, si es que se te ocurre. Un saludo!

    ResponderEliminar
    Respuestas
    1. Hola, me alegro que te haya interesado el post.
      El driver de Intel para Linux, es el modulo i915, el mismo cubre una variedad de placas diversas.
      Yo poseo una 4000HD en un p8600 con la placa en el chipset, puede ser que, o bien el driver este defectuoso para GPU integrados al CPU o bien seria bueno saber en que lo estas programando, porque la aceleracion grafica nativa de Linux es SOLAMENTE OpenGL, no otra cosa.

      Si lo estas haciendo con C++ o Qt, o similar y te pasa eso, seria bueno que reportes el bug en kernel.org o bien en la distro que estes usando.

      Podrias tambien probar compilar un kernel vanilla, el ultimo de kernel.org y ver que pasa, quien te dice que con los parches añadidos de cada distro no te quitan rendimiento.

      Tenes esos problemas de lag tambien en juegos sobre linux como OpenArena o Urban Terror?, si la respuesta es no, busca el problema en lo que programaste o el lenguaje, no en la placa de video.

      Eliminar
    2. Hola, agredezco la brevedad de tu respuesta. Lo programado está en C++, y lo curioso es que estamos usando OpenGL, el error no es de programación porque, como dije, el mismo testeo en Windows 8.1 funciona bien, es decir, el problema está en la distro de linux. Juegos no he probado todavía, pero estos errores los registro cuando quiero ejecutar gráficas con OpenGL, estoy segurisimo que no es error de programación, como dije, en Windows el mismo proyecto se ejecuta bien, y en otras notebook de amigos míos también. No se que me podrías sugerir para solucionar esto, si compilar el kernel vainilla, o si será un tema de drivers, aunque tengo entendido que dentro de GPU's lo que mejor se lleva con Linux es Intel, por eso es mas raro aun. Espero una respuesta, agradezco tu ayuda. Un saludo

      Eliminar
    3. Ejecuta en una consola, glxgears, y mira si las rueditas, maximizandolas, se mueven fluidas, luego, si eso anda bien, instala OpenArena, y juga en maxima resolucion, y a ver si tenes lag.
      OpenSUSE posee un kernel llamado lowlatency, podrias probar de instalar ese antes que compilar un vanilla si todo lo anterior dio bien, y si no se arregla, compilar un kernel vanilla de kernel.org, el ultimo estable para ver si es el kernel.
      Por otro lado te comento, openSUSE suele ser bastante conservador con la version de kernel, MESA y Xorg, cosas que infieren mucho en el rendimiento grafico y soporte a placas nuevas, te diria, que intentes algo mas actual, como Fedora dentro de lo facil, la version 20 en su rama MATE para no quitar rendimiento grafico con KDE o Gnome Shell y sino, si te animas, ArchLinux, que si bien es poco estable, siempre tienen la ultima version de TODO.

      Eliminar
    4. El glxgears me da 60FPS clavados, mas que eso no. Respecto a las distro, que me recomendas para cambiar? He usado fedora antes y me canse de que salgan versiones cada 3 meses, lo tengo en mi pc de escritorio con Mate y va medio lento (version 19). Si tienes que hacer un ranking de distros para cambiar, que me sugieres?
      1. Arch ?

      Que otras? Acabo de hacer el mismo testeo con un Live CD de Linux Mint 16 y el desempeño es aun peor. Mira, grabé un video para mostrarte lo que me sucede:

      http://www.youtube.com/watch?v=1ygymSbEwVA&

      Espero que te oriente un poco mas en lo que refiere al problema. Agradezco tu ayuda, saludos!

      Eliminar
    5. Interesante la falla que acusa, acumula ordenes y las ejecuta a posterior, como si tuviera lag en la entrada de datos. Entiendo que no te sucede en windows, pero no sera que en Linux toma todos los datos ingresados y al no poder mostrarlos en real time los deja al final y en windows solo descarta el exceso que no puede reproducir?.

      Mira, Fedora saca versiones cada 3 meses o un poco mas, pero cada una tiene soporte por 13 meses, no se quien te dijo algo distinto, yo estuve ayudandolos hasta hace un tiempo, hasta que por temas politicos y eticos me fui, y al finalizar el soporte actualizas via red a otra.

      Si lo que buscas es 100% rendimiento, no te puedo recomendar algo mas que Gentoo, donde todo se compila usando flags, con lo cual, todo esta optimizado para tu cpu y version de gcc.

      El tema es que no es facil ni mucho menos, Gentoo es complejo hasta que le tomas la mano.

      Fedora con MATE lento? mm que raro, es muy rapida Fedora.

      Probaste instalando el kernel low latency en openSUSE?. Mejoro algo?.

      Si buscas velocidad, te digo de entrada, que sea de 64 bit, no uses entornos como KDE sino algo como fluxbox o lxde, y en cuanto a distro, ya te dije, Gentoo, pero si no queres leerte todo el handbook, y queres probar algo alternativo, proba ArchLinux con el kernel que esta en AUR, con el parche de con kolivas para mejorar el real time, y luego me cuentas que tal va, tendria que andar muy rapido.

      Seria interesante que me pasaras el codigo de eso que ejecutas para correrlo en mi laptop, que usa CentOS 32 bit con kernel custom vanilla real time, y te digo como va o te grabo un screencast.

      Saludos

      Eliminar
    6. Hola de nuevo. Tras unos días de ausencia, tengo algunos comentarios para hacer respecto a la falla. Como falla en si, no lo es, desde ya tengo que modificar el titulo de ese video o suprimirlo. Estuve hablando con mi profesor, y me dijo que es un delay bastante frecuente que se da en linux, en cualquier distro (en algunas mas, en otras menos) porque linux implementa en forma diferente a windows una función de OpenGL para re-dibujar. Entonces, en la llamada a esta función, quizás Windows re-dibuja cada 10 pixeles barridos por el mouse (es un ejemplo burdo, para que entendamos) mientras que linux re-dibuja cada 5, lo cual se traduce en que en linux termina acumulando ordenes de ejecución y este es el resultado que vemos. La solución? No tiene una 100% efectiva, pero consiste en cambiar el llamado a esta función por otra que funciona en forma similar, que básicamente, primero acumula las ordenes y luego las ejecuta, en lugar de ejecutarlas pixel a pixel (o cada 5 pixeles en el ejemplo burdo) lo cual se logra el efecto deseado y el delay es casi imperceptible. Todos los dias se aprende algo nuevo.
      Dado por "solucionado" mi consulta, quiero que me comentes un poco mas acerca de las distros, estoy pensando en cambiar OpenSUSE, ya que nunca me gustó KDE y además no me terminó de convencer, por algo mas a mi estilo. Veo que Gentoo es una buena alternativa, pero estoy en la facultad y los tiempos me vuelan como para aprenderlo a usar bien como corresponde, lo dejaré para cuando mejore mi experiencia en linux y tenga mas tiempo para dedicarle. En el mientras, quiero saber que me recomiendas, en estos días le estuve echando bastante el ojo a Manjaro (basado en Arch) con XFCE, he leído muy buenos comentarios de esta distro, por lo que la tengo en la mira.
      No tengo tanta experiencia en linux, llevo a lo mejor poco menos de un año, empece con Fedora, y ahora en Suse, pero todavía no termino de encontrar MI distro. El uso que le voy a dar es para programar, principalmente, y también para uso cotidiano (escuchar música, etc), y me gustaría que sea bastante actualizada. No se si Manjaro cumple con esto ultimo, pero de no ser que actualice su kernel por repositorios, te parece mejor compilarlo a pata o que venga por repo ya masticado? Nunca compile el kernel de linux, y bueno, el temor siempre está jajaj. Me gustaría saber que opinas de esta distro, o bueno alguna otra que creas conveniente para mi, a Archlinux la veo también, pero no se si es un tanto complicada para instalar y usar como se dice en la web, o es demasiada alaraca que se hace en la comunidades.
      Espero que no sea molestia mi comment, saludos!

      Eliminar
    7. Muy interesante lo que te comento tu profesor, desde ya te agradezco que lo compartas aca, dado que no lo sabia. Si puedo decirte que los juegos no tienen ese delay, no se como es que manejan esa forma de usar OpenGL que tiene linux a las ordenes.
      Si te puedo decir, que eso en un futuro proximo va a cambiar, consultale a tu profesor, dado que Wayland, el gestor grafico que reemplazaria a X.org, fue pensado para eso justamente, el que lo creo, dijo, nunca mas un redibujado lento, un flick, nada, todo fluido, y de hecho podes verlo en videos que asi se ve. X.org es anciano y muy pasado de moda a lo que es Linux realmente, pero, es lo que hay por ahora.

      Manjaro usa los mismos paquetes de los repos de Arch solo que son un poco mas conservadores, es decir, van 1 o 2 versiones por detras, justamente, porque Arch, basa su QA en que ningun usuario reporte un bug, y de ahi pasa a estable, asi es como estan llenos de bug en el dia a dia, tornandose una distro para gente que le gusta vivir reparando el sistema, pasate por bugs.archlinux.org y lo veras.

      Asi que si, manjaro si te gusta XFCE es una buena opcion, si usaste fedora, ya conoceras sus spins, xfce, lxde, gnome shell (el oficial), kde y mate.

      La verdad es que para programar y para todo lo demas, cualquiera cumple. Lo que cambia es, la cantidad de software, el QA, la forma de administrar paquetes y por ende la estabilidad.

      Si buscas algo nuevo, lo ultimo al dia, te recomiendo Arch, pero, cuando algo no ande... no llores... sino Fedora, que tiene un poco mas de QA, y si buscas algo super estable que nunca te de problemas, Slackware, Debian o CentOS (en el caso de centos, para desktop recomiendo Stella, podes ver el analisis en los ultimos post).

      El tema de la distro de uno, es muy personal, yo me siento muy a gusto con yum, el package manager de centos y fedora, y me siento mas que a gusto con centos ahora que le tome la mano a usar repos de terceros sin romper nada, si hubiera conocido Stella antes, hubiera usado eso. Me encanta no tener problemas nunca y que todo funcione sin problemas, en otras distro, siempre, pero siempre, tenes algun bug que reportar, la verdad, que no tendre todo lo mas nuevo, como el gcc que poseo el 4.4.7 pero se que todo funciona a la primera y me pongo en duda a mi si algo no sale antes que al sistema.

      Slackware con XFCE me gusta mas que manjaro para serte sincero, es mas estable Slack, esta mejor probado, fijate en la lista de paquetes si tenes todo, dado que sino tenes que compilar con slackbuilds, pero, es raro que no tengas algo en la lista, eso si, dudo que slackware se te cuelgue o te de problemas, y no esta inflado, o sea, viene con lo justo, no mas.

      Eliminar
    8. Bien, estoy entre Slack y Manjaro, pero son cosas muy diferentes. Quiero algo que no me haga renegar (en lo menor posible, siempre se reniega), por lo que entonces Arch lo descarto. Fedora lo usé siempre (desde la 17 a la 19) y siempre tuve el mismo problema con esta distro: a medida que pasa el tiempo, se pone cada vez mas pesada la gestión de actualizaciones por consola, a tal punto que hacer un update con yum me llevaba unos 10minutos o más. Es decir, apenas instalaba la distro, actualizaba rapidisimo. Pero al mes, yum ya se ponia lento, y a los 2 meses ni te cuento, inusable; si te decidías a hacer un sudo yum -y update te tenias que ir 15min y recién volver. Y no me tardaba en el tema de la descarga e instalación. Sino al comienzo, en el chequeo de repositorios, luego de poner sudo yum update, se quedaba congelaba 3 minutos sin hacer nada, y después le dedicaba 5 minutos al chequeo de repos (lentismo) y despues recien arrancaba.
      Si no fuese por ese tema, volvería a Fedora, ahora salió la 20 y la veo de lejos por lo comentado anteriormente. Siempre la usé con xfce pero con mate debería ir bien también. Slackware estuve ojeando un tutorial de instalación y es rústico jejej, hasta ahora siempre venia instalando distros en modo gráfico, y toparme asi con Slackware no me vendría mal para aprender un poco. Espero que para el uso no sea tan austero y solo en la instalación lo sea.
      Viendo que soy un poco novato con linux todavía, no se si encararía por Slack, pero quizás le daría otra oportunidad a Fedora o probaría con Manjaro, entre estas dos me late la idea

      Eliminar
  13. Hola, Slackware me gustaría probarlo, aunque tiene fama de muy complicado, lo cual me inhibe un poco. Hay que ver también cuán complicado es, algunos dicen que no es tanto y otros que es fácil, la verdad que carezco de una opinión fundada. No se como será para instalarle programas, o compiladores (instalarle gcc, g++, y todas las development-tools) si será mas sencillo o mas difícil que en otras distros. No tengo idea si soporta EFI y GPT, mi notebook tiene ese sistema de arranque y de tabla de particionado, lo cual si soporta estas dos ultimas si podré instalarlo. Tengo windows 8.1 instalado porque hay aplicaciones que inevitablemente tengo que usarlas, por lo cual si lo instalo necesito que pueda respetar un dual-boot con Windows 8.1.
    Si cumple con todo lo anterior lo instalaría, y sino iría por Fedora 20 xfce o mate+compiz; o Manjaro, quizás si sabes si slackware soporta todo lo anterior escrito lo instalaría.
    Si tienes idea dime que tal es Slack en el tema del uso, si voy a estar media hora para configurar algo o instalar algún programa o no, si es demasiada fama de expert que tiene. Saludos, espero tu comentario!

    ResponderEliminar
    Respuestas
    1. Mira, primero te comento que slack en la instalacion full, instala TODO lo necesario para developer y server, lo unico que se añade o compila son cosas como chrome, etc, firefox viene. Al terminar la instalacion basada en ncurses, tenes que añadir tu usuario dado que el viene que por defecto es el root, cambiar el runlevel a 5 para inicio grafico, pero mas alla de eso, nada es complicado, las updates son muy sencillas.

      Por otro lado, te comento que si nunca te mandas a una distro mas complicada, nunca vas a aprender mas, y Slackware es ideal, dado que la falla por lo general es uno no la distro, como te pasaria si con Arch que no sabes si sos vos o la distro.

      Lo que me comentas de fedora, tiene solucion, es cuestion de hacer yum clean all y luego borrar las DB de yum, y listo, por eso es que se pone lento, si la usabas y no tenias problemas, te diria que la vuelvas a usar, pero si realmente queres aprender, te diria que le des una oportunidad a Slackware 14.1.

      Cosas dificiles en slack?, skype, chrome, pero tampoco nada del otro mundo, mira:

      http://www.taringa.net/posts/linux/16280310/Instalacion-de-Skype-4-0-0-8-en-Slackware-14-de-64-bits.html

      Yo que vos, por velocidad, simplicidad y estabilidad, dado que de dedicas a developer, usaria Slack, y el tema de GPT asi como EFI estan cubiertos, no asi el tema del firmado digital para iniciar en windows 8, si tenes el secure boot activo, sacalo, si no podes, porque no queres sacar win8 y poner el 7, instala fedora que ya viene con la firma digital de Microsoft.

      Eliminar
  14. Listo, ya estoy decidido entonces, voy a entrar al mundo de Slackware. Si, ahora con Opensuse tuve que desactivar Secure Boot, asi que nada cambia, los parámetros de instalación son medianamente los mismos. He visto varios tutos para instalarlo, como este:
    http://www.taringa.net/posts/linux/4493273/Como-instalar-slackware-By-32ka.html
    y este
    http://www.taringa.net/posts/linux/13015522/Instalar-Slackware-linux.html
    Para instalarlo, y ahora que las lei un par de veces no asusta tanto. Respecto a EFI, antes que use fedora y ahora Suse, tuve que instalar grub en la partición EFI de Windows (la clásica partición de 250mb aprox) que tiene el flag para boot; por lo que tengo entendido Slack no usa grub pero si usa LILO, lo cual vi que se configura mas o menos igual, excepto que en la screen que se ve en el tutorial de By 32ka que dice "SELECT LILO TARGET LOCATION" ahi en teoría (en esta ultima versión 14.1) debería haber una categoría EFI, y en la imagen siguiente debería seleccionar esa partición efi de 250mb.
    Yo soy mas de particionar y formatear con gparted antes de instalar una distro, de modo que la configuración que hace en el tuto de 32ka con cfdisk la debería saltear, cierto?
    Ademas, siempre hablando del mismo tuto, en la sección EXPERT LILO INSTALATION deberia hacer ADD de Windows al lilo.conf y seleccionar la partición donde esta Windows 8.1, asi en la pantalla para seleccionar el sistema operativo aparezca windows y slack. en el Mouse configuration, que debería seleccionar para mi notebook? la primer categoria ps2? El 90% de las veces que la uso es con mouse por usb, pero quiero que me ande el touchpad también.
    Bueno SynFlag agradezco mucho tus comentarios y ayudas, me han venido barbaro para adentrarme mas en este mundo. Posiblemente en unos días vuelva aquí a comentarte que tal me fue con la instalación de Slackware. Saludos!

    ResponderEliminar
  15. Buenas, tengo un incognita: compile el kernel de linux, tenia el 3.2 que trae el wheezy 7.5...para una tarea me baje el 3.14.5 y lo compile, el objetivo de mi tarea es que este kernel pese menos que el kernel anterior (3.2.0-4) pero pesa más: el viejo (2.5), el nuevo (3.7), que debo hacer para reducirle el tamaño para que quede mas liviano? si es quitarle modulos que no necesito..como saber cuales son los que no necesito? tengo una laptop sencilla sin bandeja de cd/dvd solo wifi, bluetooth, camara (Y)

    ResponderEliminar
  16. Siempre va a pesar mas porque es mas nuevo, solamente compara lo que pesa el .tar.xz que bajas 3.14 respecto a un 3.2.x, el tema es que, sacandole modulos y demas, vas a achicarlo pero el hueco (por decirlo asi) donde iba ese modulo, va a quedar, o sea, no busques hacerlo mas chico porque no es ese el fin total sino el rendimiento.


    Lo que podes hacer es bajar un 3.2.59, tomar el .config de Debian, e ir sacando cosas que no uses, como saberlo?, antes de compilar poner lsmod y vas a ver que modulos estas usando, deja solo esos, el resto sacalos.

    ResponderEliminar
  17. Gracias por tomarte la molestia SynFlag.. fijate que la tarea consiste en eso: dejar mas liviano el nuevo kernel (3.14.5) que el que teniamos (3.2.0_5)...y es que fjate que el .config del 3.2.0 se lo pase al 3.14.5 y tienen casi los mismos modulos excepto los non-free( wifi y eso) lo que voy hacer es...informarme de cada modulo del nuevo kernel usando el comando que me dijiste y depende para que sirva..lo quito dejandolo lo mas funcional posible...crees que ayude?

    ResponderEliminar
  18. Si claro que si pero te repito, no esperes que un 3.14 pese menos que un 3.2, porque la estructura del 3.24 ya fue pensada para albergar mas modulos, podras no compilarlos, pero el "hueco" para el mismo, si bien queda anulado, esta en el codigo.

    ResponderEliminar
  19. Alejandro Corsal7 ago 2014, 20:57:00

    hola SynFlag !! Tengo una PIPO U9T (Android 4.4.2) ya le hice root , he tratado tantas veces de instalarle una USB webcam pero siempre me sale un mensaje q no tiene el UVC driver, se que eso deberia estar dentro del modulo V4L2, no quiero arriesgarme a ponerle un nuevo kernel pero si quiero modificar el q tiene para insertar (O ESCRIBIRLE) el modulo V4L2(si es q lo tiene) y activar el uvc driver,es la unica manera de hacer funcionar la camara y otros dispositivos de captura de video, de verdad te agradecere enoooormemente si me ayudas a modificar el kernel o si es q hay algun kernel con las caracteristicas de video activadas con el cual siga funcionando bien mi tableta.
    Desde ya MUCHAS GRACIAS MASTER !!!!!

    ResponderEliminar
  20. alejandro corsal7 ago 2014, 21:03:00

    hola SynFlag !! Tengo una PIPO U9T (Android 4.4.2) ya le hice root, empotrada en el panel de mi auto , he
    tratado tantas veces de instalarle una USB webcam para ver atras cuando parkeo, pero siempre me sale
    un mensaje q no tiene el UVC driver, se que eso deberia estar dentro del
    modulo V4L2, no quiero arriesgarme a ponerle un nuevo kernel pero si
    quiero modificar (o compilar) el q tiene para insertar el modulo
    V4L2(si es q lo tiene) y activar el uvc driver,es la unica manera de
    hacer funcionar la camara y otros dispositivos de captura de video, de
    verdad te agradecere enoooormemente si me ayudas a modificar el kernel o
    si es q hay algun kernel con las caracteristicas de video activadas con
    el cual siga funcionando bien mi tableta.
    Desde ya MUCHAS GRACIAS MASTER !!!!!

    ResponderEliminar
  21. alejandro corsal8 ago 2014, 9:39:00

    Hola hice una consulta en este foro pero no aparece ,talvez no el lugar correcto,me podrian decir adonde encuentro mi consulta a cerca de como compilar el kernel de mi tablet?, muchas gracias

    ResponderEliminar
  22. No aparece?, se moderan, no aparecen al instante, nada mas. En tablet, es android, nada que ver con esto. Se maneja de otra forma todo, empeza por el android SDK, y no te puedo ayudar porque nunca me puse en el tema.

    ResponderEliminar
  23. Josseline Perdomo20 sept 2014, 18:28:00

    Hola! Me mandaron un proyecto en la universidad que consiste en aplicar el parche RT-preemp (https://rt.wiki.kernel.org/ind... a la versión 3.14.12 del kernel Linux en una máquina virtual (uso VirtualBox) el problema es que al arrancar me aparece este mensaje "[0.0000000] tsc: fast TSC calibration failed" tanto en Lubuntu como Xubuntu 14.04 tarda un poco en el booteo pero de resto arranca normalmente, me gustaría poder quitar este mensaje en el arranque ya que (aparte del hecho de que tarda demasiado) se que probablemente se deba a una falla en el proceso de compilación o algo, he estado buscando información y no he encontrado ninguna solución al respecto. Por favor podías ayudarme? Saludos.

    ResponderEliminar
  24. Ese mensaje es normal y sucede siempre en VirtualBox, quizas en una PC real o bien otro emulador como KVM o Vmware no suceda, te digo porque me pasa siempre con kernel real time y no real time asi que despreocupate Josseline.

    Añadi en el cmdline de Ubuntu que anda por /etc/default/grub esto:

    clocksource=acpi_pm

    Luego regenera el initramfs con grub-update o update grub creo que es y deberia irse el mensaje

    ResponderEliminar
  25. hola Synflag lamentablemente robaron la tablet de mi auto,pero ya compre otra : CUBE 7 octacore 2gb de ram android 4.4.4 pero tampoco funciona mi webcam logitech c130, aun nose como compilar un kernel para insertar el uvc driver, te garadeceria muchisimo si me pudieras guiar. desde ya MUCHAS GRACIAS por leer

    ResponderEliminar
  26. La tablet posee camara, porque no usas esa?. O le estas metiendo una camara externa por USB?, eso no funciona a menos que la tablet posea OTG y soporte camaras.

    ResponderEliminar

Dejá tu comentario