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

xluisfernando

Tenho estudado sobre a compilação de kernel, com o objetivo de otimizar o kernel 3.0 para meu Netbook Asus Eee PC 1000HA. Li este tópico e depois li o da compilação sem o Git. Confesso que as informações são densas e tenho tido dificuldades para entender algumas coisas...

Gostaria de saber se é viável utilizar os arquivos headers e image do kernel 3.0.0.8 do linux-lts-backport-oneric (lucid 10.04), disponíveis em http://www.ubuntuupdates.org/packages/show/364792 , numa compilação.

Minha intenção, por enquanto e para aprendizado, é utilizar um kernel já preparado para o ubuntu e otimizá-lo para o hardware que tenho, seguindo a configuração do processador e retirando os módulos que não se aplicam ao netbook em questão. Mas, não entendi se preciso fazer isso usando alguma coisa do código fonte e até o momento em que escrevo, o kernel.org está indisponível (ainda reflexo do problema de segurança).
Samsung Ativ Book i3 - Ubuntu 20.04LTS

vampire_thunder

Citação de: xluisfernando online 17 de Setembro de 2011, 00:26
Tenho estudado sobre a compilação de kernel, com o objetivo de otimizar o kernel 3.0 para meu Netbook Asus Eee PC 1000HA. Li este tópico e depois li o da compilação sem o Git. Confesso que as informações são densas e tenho tido dificuldades para entender algumas coisas...

Gostaria de saber se é viável utilizar os arquivos headers e image do kernel 3.0.0.8 do linux-lts-backport-oneric (lucid 10.04), disponíveis em http://www.ubuntuupdates.org/packages/show/364792 , numa compilação.

Minha intenção, por enquanto e para aprendizado, é utilizar um kernel já preparado para o ubuntu e otimizá-lo para o hardware que tenho, seguindo a configuração do processador e retirando os módulos que não se aplicam ao netbook em questão. Mas, não entendi se preciso fazer isso usando alguma coisa do código fonte e até o momento em que escrevo, o kernel.org está indisponível (ainda reflexo do problema de segurança).

Sim, funciona perfeitamente. Já testei no Lineduc, que segue o 10.04.

xluisfernando

#122
Se pretendo recompilar o mesmo kernel que estou usando (3.0.0-8), qual pacote tenho que baixar?

Li que para debian e derivados eu teria que usar o linux-source-x.x.xx. Como instalei esse kernel via ppa, imaginei que pudesse seguir o guia do Carlos Morimoto (http://www.hardware.com.br/dicas/recompilando-kernel-1.html), usei o comando
Citarxluisfernando@xluisfernando-desktop:~$ sudo apt-get install linux-source-3.0.0-8[sudo] password for xluisfernando:
Lendo listas de pacotes... Pronto
Construindo árvore de dependências      
Lendo informação de estado... Pronto
E: Impossível achar pacote linux-source-3.0.0-8
xluisfernando@xluisfernando-desktop:~$

Testei também usando linux-source-3.0.0, mas a resposta foi a mesma. Imaginei que, como instalei o kernel por ppa, esse pacote estivesse no repositório e acessando o site http://www.ubuntuupdates.org/packages/show/364792 não encontro isso.

Então, se pretendo compilar o kernel que já tenho instalado, preciso baixar o pacote linux-source dele, ou tem como usar o que já está instalado no sistema?

Edit: Os tutoriais tratam da compilação do código fonte do kernel pretendido, em tar.bz2, diretamente do kernel.org. Como nesse momento o site está em manutenção, pensei em usar os pacotes disponíveis em http://kernel.ubuntu.com/~kernel-ppa/mainline/. No entanto, como eles estão em .deb, não entendi direito como proceder. Devo simplesmente os desempacotar dentro de /usr/src/linux para começar a compilação?

Agradeço a compreensão, já que para muitos essa pergunta deve ser trivial...
Samsung Ativ Book i3 - Ubuntu 20.04LTS

galactus

xluisfernando, os arquivos fontes do kernel em tar.bz2 são para compilação!  A maneira difícil de ter o seu próprio kernel customizado. Você o descompacta para poder aplicar patchs, modificar o .config e compilar o mesmo ao seu gosto.

Os kerneis do repositório PPA são arquivos binários .deb, já estão compilados e prontos para instalação!  É como se fosse um .exe do Windows.

Portanto não há o que descompactar, apenas instale o mesmo.

Infelizmente o kernel.org está fora do ar por tempo inderteminado, por isso mesmo o Tio Linus migrou o kernel em desenvolvimento para o GitHub!

É exatamente por isso que estamos tentando aprender uma maneira de compilar o kernel sem o git todo! O Git ficou ótimo para quem desenvolve kernel, para manter tantas versões, mas para o usuário que só quer compilar uma versão específica do kernel é muita contra-mão!
Espero ter ajudado mais do que complicado!
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

Metalbobolic

Me auto-respondendo!!!

Realmente..compilar o kernel do linux, usando o arquivo .config do generic pae, sempre dar erro, na hora de instalar os modulos..não sei pq..não conseguir achar uma respostar viável....

Eu conseguir compilar o kernel 3.1-rc4, utilizando as .config do kernel oficial 3.1.0.301rc4

Apenas ativando o optimize for size e processador intel core 2

Aos poucos vou mexendo mais..

xluisfernando

#125
Citação de: galactus online 18 de Setembro de 2011, 14:33
xluisfernando, os arquivos fontes do kernel em tar.bz2 são para compilação!  A maneira difícil de ter o seu próprio kernel customizado. Você o descompacta para poder aplicar patchs, modificar o .config e compilar o mesmo ao seu gosto.

Os kerneis do repositório PPA são arquivos binários .deb, já estão compilados e prontos para instalação!  É como se fosse um .exe do Windows.

Portanto não há o que descompactar, apenas instale o mesmo.

Infelizmente o kernel.org está fora do ar por tempo inderteminado, por isso mesmo o Tio Linus migrou o kernel em desenvolvimento para o GitHub!

É exatamente por isso que estamos tentando aprender uma maneira de compilar o kernel sem o git todo! O Git ficou ótimo para quem desenvolve kernel, para manter tantas versões, mas para o usuário que só quer compilar uma versão específica do kernel é muita contra-mão!
Espero ter ajudado mais do que complicado!
Galactus

Então, quando o site kernel.org voltar a funcionar o esquema é baixar o pacote tar.bz2 do kernel pretendido, descompactá-lo na /usr/src/linux, aplicar os patches para debian para então importar as configurações do kernel instalado e por fim configurar e compilar. Certo?

Pensei em usar o trabalho já feito no kernel compilado para ubuntu para recompilar, otimizando para o meu hardware. De acordo com a referência do Carlos Morimoto http://www.hardware.com.br/dicas/recompilando-kernel-1.html eu poderia baixar o código fonte do kernel por meio do pacote linux-source, que "O pacote simplesmente copiará o arquivo linux-source-x.x.xx.tar.bz2 (com o código-fonte completo do kernel) para a pasta "/usr/src".

Mas, no caso da minha instalação 10.04LTS, a versão padrão do linux-source é a 2.6.32 e eu pretendo usar o 3.0.1 do repositório oneric (ainda não descobri como fazer com que o meu sistema tenha acesso ao repositório com esse pacote)

Edit: Pesquisando achei uma possibilidade: o pacote linux-source-3.0.0-9.14 do natty https://launchpad.net/~suraia/+archive/ppa/+sourcepub/1913892/+listing-archive-extra. Tentei adicionar o repositório, mas não consegui encontrar a linha apt. Então, pensei em tentar a opção de baixá-lo diretamente. O formato é .deb e pelo que entendi esse pacote copia o código fonte do kernel, já com os patches aplicados, para a pasta /usr/src. Só não sei se por ser de uma versão diferente haveria algum problema.
Samsung Ativ Book i3 - Ubuntu 20.04LTS

Gunss

Citação de: Metalbobolic online 18 de Setembro de 2011, 14:51
Me auto-respondendo!!!

Realmente..compilar o kernel do linux, usando o arquivo .config do generic pae, sempre dar erro, na hora de instalar os modulos..não sei pq..não conseguir achar uma respostar viável....

Eu conseguir compilar o kernel 3.1-rc4, utilizando as .config do kernel oficial 3.1.0.301rc4

Apenas ativando o optimize for size e processador intel core 2

Aos poucos vou mexendo mais..

O optimize for size não é a melhor saida. Deixar no -O2 é ideal.

Metalbobolic



nomade

nomade@nomade-PC:~$ cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family   : 15
model      : 4
model name   : Intel(R) Pentium(R) 4 CPU 3.06GHz
stepping   : 9
cpu MHz      : 3066.578
cache size   : 1024 KB
physical id   : 0
siblings   : 2
core id      : 0
cpu cores   : 1
apicid      : 0
initial apicid   : 0
fpu      : yes
fpu_exception   : yes
cpuid level   : 5
wp      : yes
flags      : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc pebs bts nopl pni dtes64 monitor ds_cpl tm2 cid cx16 xtpr lahf_lm
bogomips   : 6133.15
clflush size   : 64
cache_alignment   : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family   : 15
model      : 4
model name   : Intel(R) Pentium(R) 4 CPU 3.06GHz
stepping   : 9
cpu MHz      : 3066.578
cache size   : 1024 KB
physical id   : 0
siblings   : 2
core id      : 0
cpu cores   : 1
apicid      : 1
initial apicid   : 1
fpu      : yes
fpu_exception   : yes
cpuid level   : 5
wp      : yes
flags      : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc pebs bts nopl pni dtes64 monitor ds_cpl tm2 cid cx16 xtpr lahf_lm
bogomips   : 6133.27
clflush size   : 64
cache_alignment   : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:

Olá! Queria só uma opinião...
vale apena fazer no meu pc, tendo em vista as informações sobre meu processador?
Ubuntu Studio 22.04 LTS

xluisfernando

#130
Pessoal

Comecei a configuração para compilação do kernel 3.0 para meu netbook Eee PC 1000HA. Estou fazendo por meio do pacote linux-source-3.0.0 e aplicando as modificações sugeridas por esse tópico.

No entanto, não entendi uma parte da dica do 4d4c47: /usr/src/linux-2.6.xx/arch/x86/Kconfig.cpu        - linha 300
Citar#
# Define implied options from the CPU selection here
config X86_INTERNODE_CACHE_SHIFT
   int
   default "12" if X86_VSMP
   default "7" if NUMA
   default X86_L1_CACHE_SHIFT

config X86_CMPXCHG
   def_bool X86_64 || (X86_32 && !M386)

config CMPXCHG_LOCAL
   def_bool X86_64 || (X86_32 && !M386)

config X86_L1_CACHE_SHIFT
   int
   default "7" if MPENTIUM4 || MPSC
   default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
   default "4" if MELAN || M486 || M386 || MGEODEGX1
   default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX

config X86_XADD
   def_bool y
   depends on X86_64 || !M386

config X86_PPRO_FENCE
   bool "PentiumPro memory ordering errata workaround"
   depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1
   ---help---
     Old PentiumPro multiprocessor systems had errata that could cause
     memory operations to violate the x86 ordering standard in rare cases.
     Enabling this option will attempt to work around some (but not all)
     occurrences of this problem, at the cost of much heavier spinlock and
     memory barrier operations.

     If unsure, say n here. Even distro kernels should think twice before
     enabling this: there are few systems, and an unlikely bug.

Sei que o meu processador se enquadraria na família MATOM mas não entendi o que eu deveria alterar para que ele fosse definido.

Depois de realizar o processo, mesclando informações de tutoriais e tópicos de diferentes autorias, pretendo escrever um tópico detalhando o processo, com a escolhas que fiz para a configuração.
Samsung Ativ Book i3 - Ubuntu 20.04LTS

galactus

xluisfernando meu caro, que bom que você está botando mola aí! :)

Olha só, atente para o fato da dica apontar para modificar os march, mtune e mcpu para native ou generic conforme o caso!

Como você está tentando modificar um Kernel bem mais recente de quando a dica foi colocada, é normal as linhas não baterem. Então procure pelos march, mtune e mcpu, pode usar o localizar do gedit por exemplo!
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

xluisfernando

Galactus

Sim. Inclusive eu só entendi isso depois que li uma discussão sua no tópico do kernel Omnislash. No Makefile_32.cpu eu fiz isso em todas as opções e prestei bastante atenção na opção que seria relativa ao meu processador. Mas, Kconfig.cpu eu não encontrei nada parecido. A linha 300 citada pelo 4d4c47 está em branco e logo abaixo dela começa o trecho que postei, que entendi como sendo a configuração para o tipo de processador. O que não entendi foi o que alterar, pois a estrutura desse texto (como não tenho formação em computação e não compreendo linguagem de programação, estou interpretando a linguagem desse texto de configuração por lógica e pelas instruções nele contido...)

A única referência march= que encontrei nesse arquivo está numa linha comentada (407)
Citar# this should be set for all -march=.. options where the compiler
# generates cmov.

No geral, fiz todas as alterações sugeridas sem grande dificuldade e já estou estudando quais as configurações embutidas e de módulo se aplicam ao hardware desse netbook.
Samsung Ativ Book i3 - Ubuntu 20.04LTS

edusachs

Esse mesmo artigo serve para Core i5? Pois você comentou que fez isso num Core i7. Tem alguma virgula diferente para Core i5?

Valeu!

xluisfernando

Citação de: edusachs online 23 de Setembro de 2011, 23:06
Esse mesmo artigo serve para Core i5? Pois você comentou que fez isso num Core i7. Tem alguma virgula diferente para Core i5?

Valeu!
edusachs

O GCC 4.5 de que trata o tópico é um compilador, que no fim das contas transforma o código fonte do kernel na imagem a ser carregada pelo sistema durante o boot. O que foi destacado no tópico sobre o Core i7 e serve para qualquer processador é a edição de alguns arquivos do kernel a ser compilado, considerando uma vantagem que a versão 4.5 do GCC possui. Ao indicar march=native o compilador configura automaticamente a otimização para o processador reconhecido pelo sistema.

Então, você abre o terminal no computador em que pretende instalar o kernel otimizado e usa o comando:
Citarcc -march=native -E -v - </dev/null 2>&1 | grep cc1

A resposta que sair desse comando você usará na edição dos arquivos, seguindo o tópico e tendo como demonstração e exemplo o que foi feito com a saída do comando numa máquina Core i7.
Samsung Ativ Book i3 - Ubuntu 20.04LTS