Compilando o Kernel otimizado para o seu processador no Ubuntu!

Iniciado por galactus, 22 de Abril de 2011, 09:49

tópico anterior - próximo tópico

galactus

Citação de: 4d4c47 online 01 de Maio de 2011, 05:40
Pô cara, ficou massa demais o tutorial,

valeu por ter lembrado aé de nois...

muito bom mesmo.

passei um tempo longe da internet, mas agora estou de volta, to começando a testar o 2.6.38,

logo logo me reconecto no espiroto dos kernels do forum,

valeu.

Grande 4d4c47 !  Você tava sumido mesmo cara!  Qué isso, como eu disse o tuto não é só meu!  Que bom que gostou!  Estou no aguardo do 2.6.38 do Hqxriven!
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

mariojuniorjp

Agora vem a pergunta NOOB: Qual o comando para iniciar a compilação do kernel?  ??? ??? ;D


xluisfernando

Galactus

Antes de "colocar a mão na massa" com as instruções do seu tutorial, estou pesquisando e estudando o funcionamento do sistema, até para fazer as configurações corretas. A minha dúvida se refere aos kernel-headers e header-files.

Pelo que entendi, resumindo de maneira didática para uma usuário iniciante como eu, os Kernel-headers, seriam os cabeçalhos do Kernel que está sendo usado pelo sistema, com partes do código fonte do mesmo. Esses cabeçalhos seriam utilizados sempre que o compilador precisa ao compilar um determinado programa, pois contém o código para as funções de baixo nível (específicas) do kernel, que são necessários para que os módulos se acoplem.

Já os header-files seriam os arquivos de linguagem C com os scripts para execução dessas funções.

Assim, ao compilar um kernel otimizado a partir do código fonte de uma versão mais atual que a suportada pelo sistema, sem o kernel-headers e os headers-files, acredito que o sistema ficaria "congelado", impedido de receber a instalação de novos pacotes.

Então, pesquisando na rede e procurando estudar e compreender essas informações, encontrei um artigo do Carlos E. Morimoto que trata da compilação para Debian: http://www.hardware.com.br/guias/debian-desktops/compilando-kernel-debian.html

Nesse artigo, Morimoto esclarece:
CitarSe você quer que sejam gerados também pacotes com o fonte e os headers do kernel, use o comando:

# make-kpkg --revision=meu.0.1 kernel_image kernel_source kernel_headers

Neste caso, serão gerados três pacotes no total, contendo o "kit completo" do kernel, incluindo os headers e também o código-fonte completo. Como comentei em outros tópicos, os headers são necessários para instalar drivers e módulos adicionais, por isso são sempre importantes. Ele é especialmente importante se você pretende distribuir o kernel ou instalá-lo em várias máquinas.

O pacote com o fonte permite que outras pessoas recompilem o seu kernel, aplicando patches adicionais ou alterando a configuração.

Acredito que esse comando pode ser uma solução para o problema que estou pensando (imaginando) e gostaria de saber sua opinião sobre a utilização do mesmo.

Como já disse, pretendo sim compilar um kernel otimizado para meu Eee PC 1000HA, a partir de uma versão de kernel que é bem superior ao padrão que se adota no Ubuntu 10.04. Como imagino que esse kernel ficaria como o principal a ser carregado, pretendo utilizá-lo por um bom tempo e nesse tempo, eventualmente poderia adicionar um ou outro pacote ou aplicativo, que no meu entendimento poderia não funcionar caso não exista os cabeçalhos desse kernel.
Samsung Ativ Book i3 - Ubuntu 20.04LTS

galactus

xluisfernando, suas informações estão corretas, e o tutorial do Morimoto, que são sempre ótimos, mostra a opção completa para compilar o kernel! Aliás, no primeiro tutorial do kernel do Hqxriven, ele compilava também o kernel_source, que depois ele retirou não sei o motivo!

Se você for ficar compilando drivers de placa de vídeo, o módulo do Virtualbox ou do Vmware entre outros, você vai precisar do kernel_source! Portanto, use a linha completa do Morimoto: kernel_image kernel_source kernel_headers ! A compilação vai demorar mais para criar o source, mas vai te poupar muita dor de cabeça depois!

Um exemplo prático é o do Virtualbox! Se você for usar um kernel experimental, mesmo com a ferramenta do dkms, ele procura os fontes do kernel que você está usando no momento da instalação, se ele não o encontra a instalação do virtualbox é abortada! Daí você só consegue usar o virtualbox com o kernel oficial do Ubuntu! Você é obrigado a fazer e instalar o kernel image, senão o sistema nem inicia!  Mesmo com o headers "quebrado", o sistema sobe, mas algum hardware não vai funcionar! 


Siga o tutorial do Hqxriven mesmo, o link que o Andry colocou logo acima: http://ubuntuforum-br.org/index.php/topic,29799.msg375471.html#msg375471
E acrescenta na linha: make-kpkg --initrd --revision=x86 kernel_image kernel_headers modules_image , o kernel_source! Vai ficar assim:

#make-kpkg --initrd --revision=x86 kernel_image kernel_source kernel_headers modules_image

Espero ter ajudado mais que complicado!
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

Andreson Goveia

Eu fiz a compilação de acordo com o que o HQ colocou no tutorial e tenho instalado o Virtual box e funciona perfeitamente.
(aqui não compilou o kernel_source).
Então fiquei sem entender :-\ :-\

Gunss

o modules_image adiciona no .deb os modulos compilados?

galactus

#37
Citação de: Andry online 01 de Maio de 2011, 22:48
Eu fiz a compilação de acordo com o que o HQ colocou no tutorial e tenho instalado o Virtual box e funciona perfeitamente.
(aqui não compilou o kernel_source).
Então fiquei sem entender :-\ :-\

Eu também!  Você instalou o virtualbox usando o kernel do Hqx ou o genérico do Ubuntu?

No trabalho eu não consigo instalar o virtualbox sem o source do kernel! Dá erro!
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

Andreson Goveia

Citação de: galactus online 02 de Maio de 2011, 00:57
Citação de: Andry online 01 de Maio de 2011, 22:48
Eu fiz a compilação de acordo com o que o HQ colocou no tutorial e tenho instalado o Virtual box e funciona perfeitamente.
(aqui não compilou o kernel_source).
Então fiquei sem entender :-\ :-\

Eu também!  Você instalou o virtualbox usando o kernel do Hqx ou o gnérico do Ubuntu?

No trabalho eu não consigo instalar o virtualbox sem o source do kernel! Dá erro!
Ubuntu generic

Lembrei que quando eu compilei já estava instalado, mas funcionou normal.
Estou no Kubuntu 11.04 64Bits, instalei via ppa

deb http://download.virtualbox.org/virtualbox/debian natty contrib

Key
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -

Edit:

A agora me veio na mente o que pode estar ocorrendo.
Deve ser por que é o mesma "versão do kernel", o do ubuntu é 2.6.38-8...-generic, o meu é 2.6.38.4

Pode ser por isso.
Já no ubuntu 10.10 a versão é a 2.6.35(ubuntu) e as compilações que você fazem é do 2.6.38 certo??

galactus

Citação de: Andry online 02 de Maio de 2011, 01:01
Citação de: galactus online 02 de Maio de 2011, 00:57
Citação de: Andry online 01 de Maio de 2011, 22:48
Eu fiz a compilação de acordo com o que o HQ colocou no tutorial e tenho instalado o Virtual box e funciona perfeitamente.
(aqui não compilou o kernel_source).
Então fiquei sem entender :-\ :-\

Eu também!  Você instalou o virtualbox usando o kernel do Hqx ou o gnérico do Ubuntu?

No trabalho eu não consigo instalar o virtualbox sem o source do kernel! Dá erro!
Ubuntu generic

Lembrei que quando eu compilei já estava instalado, mas funcionou normal.
Estou no Kubuntu 11.04 64Bits, instalei via ppa

deb http://download.virtualbox.org/virtualbox/debian natty contrib

Key
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -

Edit:

A agora me veio na mente o que pode estar ocorrendo.
Deve ser por que é o mesma "versão do kernel", o do ubuntu é 2.6.38-8...-generic, o meu é 2.6.38.4

Pode ser por isso.
Já no ubuntu 10.10 a versão é a 2.6.35(ubuntu) e as compilações que você fazem é do 2.6.38 certo??

Acredito que agora esclareceu tudo! Eu compilo ainda o 2.6.34, o ubuntu 10.10 usa o 2.6.35, o 11.04 usa o 2.6.38!  Se eu instalo o virtualbox com o 2.6.35, ele não funciona no 2.6.34!  E vice-versa!  Sou obrigado a executar o comando para recriar os módulos do kernel para o virtualbox quando mudo o kernel!
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

galactus

Citação de: Gunss online 01 de Maio de 2011, 22:57
o modules_image adiciona no .deb os modulos compilados?

O modules_image deveria criar .deb na pasta /usr/src/modules para cada sub-diretório! Isso serve para módulos de terceiros que não estão inclusos na árvore do kernel!

Dá uma lida:

http://man.he.net/man1/make-kpkg

http://newbiedoc.sourceforge.net/system/kernel-pkg.html#KPKG-KERNEL-PKG
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

vampire_thunder

#41
Citação de: galactus online 30 de Abril de 2011, 19:03

Pedido atendido!

Versão em PDF no final do Tuto!

Agora, rumo ao tuto do menuconfig!!!!  ;)

Eim? Tuto do menuconfig?

O parâmetro kernel_source cria o pacote deb com o código fonte, mas ao ser instalado, ele vai compactado para a pasta /usr/src. Então na prática não significa nada se não for descompactado.
Aqui eu sempre instalei o VirtualBox sem o source. Basta dar o comando "etc/init.d/vboxdrv setup" quando estiver no kernel compilado. O headers faz a função do source.

galactus

Citação de: vampire_thunder online 02 de Maio de 2011, 08:36
Citação de: galactus online 30 de Abril de 2011, 19:03

Pedido atendido!

Versão em PDF no final do Tuto!

Agora, rumo ao tuto do menuconfig!!!!  ;)

Eim? Tuto do menuconfig?

O parâmetro kernel_source cria o pacote deb com o código fonte, mas ao ser instalado, ele vai compactado para a pasta /usr/src. Então na prática não significa nada se não for descompactado.
Aqui eu sempre instalei o VirtualBox sem o source. Basta dar o comando "etc/init.d/vboxdrv setup" quando estiver no kernel compilado. O headers faz a função do source.

É ué, tuto sobre o menuconfig!  Explicando mais algumas coisas também!  O "povo" fica perdido com aquele monte de opções né!


Tá, então me explica isso aqui referente ao virtualbox:


Citarroot@Lubuntu64bits:/home/galactus# uname -a
Linux Lubuntu64bits 2.6.34-omnislash1.4.4 #1 SMP Fri Mar 18 15:01:18 BRT 2011 x86_64 GNU/Linux
root@Lubuntu64bits:/home/galactus# /etc/init.d/vboxdrv setup
* Stopping VirtualBox kernel modules                                                                                 [ OK ]
* Uninstalling old VirtualBox DKMS kernel modules                                                                           
Error! There are no instances of module: vboxhost
4.0.6 located in the DKMS tree.
                                                                                                                      [ OK ]
* Trying to register the VirtualBox kernel modules using DKMS                                                               
Error! Your kernel headers for kernel 2.6.34-omnislash1.4.4 cannot be found at
/lib/modules/2.6.34-omnislash1.4.4/build or /lib/modules/2.6.34-omnislash1.4.4/source.


* Failed, trying without DKMS
* Recompiling VirtualBox kernel modules                                                                                     
* Look at /var/log/vbox-install.log to find out what went wrong
root@Lubuntu64bits:/home/galactus#


CitarDKMS: add Completed.
You can use the --kernelsourcedir option to tell DKMS where it's located, or you could install the linux-headers-2.6.34-omnislash1.4.4 package.
Failed to install using DKMS, attempting to install without
Makefile:172: Warning: using /usr/src/linux as the source directory of your Linux kernel. If this is not correct, specify KERN_DIR=<directory> and run Make again.

make KBUILD_VERBOSE=1 SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 -C /usr/src/linux modules
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (      \
   echo;                        \
   echo "  ERROR: Kernel configuration is invalid.";      \
   echo "         include/generated/autoconf.h or include/config/auto.conf are missing.";\
   echo "         Run 'make oldconfig && make prepare' on kernel src to fix it.";   \
   echo;                        \
   /bin/false)

  ERROR: Kernel configuration is invalid.
         include/generated/autoconf.h or include/config/auto.conf are missing.
         Run 'make oldconfig && make prepare' on kernel src to fix it.

mkdir -p /tmp/vbox.0/.tmp_versions ; rm -f /tmp/vbox.0/.tmp_versions/*

  WARNING: Symbol version dump /usr/src/linux-2.6.38/Module.symvers
           is missing; modules will have no dependencies and modversions.

make -f scripts/Makefile.build obj=/tmp/vbox.0
/tmp/vbox.0/Makefile:172: Warning: using /usr/src/linux as the source directory of your Linux kernel. If this is not correct, specify KERN_DIR=<directory> and run Make again.
  gcc -Wp,-MD,/tmp/vbox.0/linux/.SUPDrv-linux.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include -I/usr/src/linux-2.6.38/arch/x86/include -Iinclude  -include include/generated/autoconf.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-stack-protector -fomit-frame-pointer -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -I/usr/src/linux/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -I/tmp/vbox.0/vboxdrv/ -I/tmp/vbox.0/vboxdrv/include -I/tmp/vbox.0/vboxdrv/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DCONFIG_VBOXDRV_AS_MISC -DRT_ARCH_AMD64 -DVBOX_WITH_64_BITS_GUESTS  -DMODULE  -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(SUPDrv_linux)"  -D"KBUILD_MODNAME=KBUILD_STR(vboxdrv)" -c -o /tmp/vbox.0/linux/SUPDrv-linux.o /tmp/vbox.0/linux/SUPDrv-linux.c
cc1: fatal error: include/generated/autoconf.h: Arquivo ou diretório não encontrado
compilation terminated.
make[2]: ** [/tmp/vbox.0/linux/SUPDrv-linux.o] Erro 1
make[1]: ** [_module_/tmp/vbox.0] Erro 2
make: ** [vboxdrv] Erro 2

Sendo que o kernel headers foi compilado e instalado! 
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

vampire_thunder

Mas é o VirtualBox da Oracle ou o OSE?

Vai ver que o motivo é realmente porque você está com uma versão mais antiga de kernel. Eu sempre compilei versões mais novas.

Ricardo_Branco

Galactus...
Olhando o forum do Arch achei um link... se quiser avaliar para ver se ajuda no tuto do menuconfig...

CitarEstou vendo como funciona o menuconfig.
E encontrei esta documentação..

http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html

http://forum.archlinux-br.org/viewtopic.php?id=2755