{"id":23121,"date":"2014-11-09T23:19:25","date_gmt":"2014-11-09T23:19:25","guid":{"rendered":"http:\/\/antonini.med.br\/blog\/?p=23121"},"modified":"2021-04-02T05:03:35","modified_gmt":"2021-04-02T05:03:35","slug":"kernel-v3-x-no-debian-compilacao-em-7-passos-praticos","status":"publish","type":"post","link":"https:\/\/antonini.ddns.net\/?p=23121","title":{"rendered":"Kernel v3.x no Debian &#8211; Compila\u00e7\u00e3o em 7 passos pr\u00e1ticos"},"content":{"rendered":"<p style=\"text-align: justify;\">Aprendendo de forma pr\u00e1tica e simples o processo de compila\u00e7\u00e3o do kernel, onde o usu\u00e1rio ter\u00e1 facilidade em executar. Ser\u00e3o sete passos bem pr\u00e1ticos, onde iremos explicar cada comando utilizado pelo usu\u00e1rio para que ele n\u00e3o venha s\u00f3 a memorizar uma sequ\u00eancia de comandos, mas saber tudo o que est\u00e1 fazendo.<!--more--><\/p>\n<h1 style=\"text-align: justify;\">Introdu\u00e7\u00e3o \/ Procedimentos<\/h1>\n<div class=\"floatright\" style=\"text-align: justify;\"><\/div>\n<div>\n<div style=\"text-align: justify;\">\n<h1>Introdu\u00e7\u00e3o<\/h1>\n<p>Uma das grandes vantagens dos sistemas Unix, \u00e9 de poder utilizar um kernel espec\u00edfico. No <a href=\"http:\/\/www.vivaolinux.com.br\/linux\/\">GNU\/Linux<\/a>, o c\u00f3digo do sistema operacional (kernel) \u00e9 aberto, isto torna-se ainda mais f\u00e1cil.<\/p>\n<p>Quais as vantagens de compilar o kernel?<\/p>\n<ul>\n<li>Otimizar o tipo do processador da sua m\u00e1quina;<\/li>\n<li>Remo\u00e7\u00e3o dos drivers desnecess\u00e1rios para economizar processamento e, principalmente, mem\u00f3ria.<\/li>\n<\/ul>\n<p>Exemplo:<\/p>\n<ul>\n<li>Desligar emula\u00e7\u00e3o matem\u00e1tica, SCSI, roteamento avan\u00e7ado, etc.<\/li>\n<li>Suporte a dispositivos que tinham sido desabilitados em compila\u00e7\u00e3o anterior.<\/li>\n<li>Se determinado driver est\u00e1 inst\u00e1vel e \u00e9 necess\u00e1rio testar com um kernel mais novo (driver mais novo).<\/li>\n<li>O kernel que estou usando n\u00e3o tem suporte a determinado dispositivo, logo, sou obrigado a instalar um kernel mais novo.<\/li>\n<\/ul>\n<p>Vou agora dar 7 passos explicando o que iremos fazer para compilar\/atualizar o nosso kernel de uma forma bem simplificada, onde iremos automatizar esse processo que ir\u00e1 gerar pacotes do gerenciador do <span class=\"palavraDestaque\">dpkg<\/span> e depois instalamos esses pacotes <span class=\"palavraDestaque\">.deb<\/span>.<\/p>\n<p>Esses pacotes j\u00e1 configuram o GRUB, instalam o kernel nos locais corretos e voc\u00ea n\u00e3o precisa fazer in\u00fameras configura\u00e7\u00f5es, principalmente, no gerenciador de boot. M\u00e3o na massa.<\/p>\n<h1>Procedimentos pr\u00e1ticos para a compila\u00e7\u00e3o do kernel<\/h1>\n<p>1. O nosso primeiro procedimento ser\u00e1 instalar os pacotes necess\u00e1rios para a compila\u00e7\u00e3o do kernel, onde esses pacotes ser\u00e3o respons\u00e1veis pela compila\u00e7\u00e3o:<\/p>\n<p><strong># apt-get install build-essential module-init-tools kernel-package initramfs-tools libaal-dev wget liblzo2-dev gzip libncurses5-dev dpatch udev<\/strong><\/p>\n<p>2. Baixar o fonte do kernel<\/p>\n<p>Como sabemos qual a \u00faltima vers\u00e3o do kernel? Acessando o site oficial do kernel do <a href=\"http:\/\/www.vivaolinux.com.br\/linux\/\">Linux<\/a>:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.kernel.org\/\">The Linux Kernel Archives<\/a><\/li>\n<\/ul>\n<p>Voc\u00ea vai localizar a \u00faltima vers\u00e3o do kernel ou a vers\u00e3o que voc\u00ea precisa, no meu caso, instalei o kernel 3.17.1 (stable), pois \u00e9 a \u00faltima vers\u00e3o est\u00e1vel do kernel no momento que este artigo \u00e9 escrito.<\/p>\n<p>Ao acessar o site do kernel, voc\u00ea vai ver listada as 10 \u00faltimas vers\u00f5es do kernel, sendo que a vers\u00e3o &#8220;stable&#8221;, ou seja est\u00e1vel, \u00e9 uma vers\u00e3o j\u00e1 conclu\u00edda, n\u00e3o ir\u00e1 sofrer mais altera\u00e7\u00f5es em seu fonte. A \u00faltima vers\u00e3o est\u00e1vel do kernel ser\u00e1 conhecida pelo nome: <span class=\"palavraDestaque\">Latest Stable Kernel<\/span>.<\/p>\n<p>Iremos utilizar o comando <span class=\"palavraDestaque\">wget<\/span> para baixar o fonte <span class=\"palavraDestaque\">.tar.xz<\/span>:<\/p>\n<p>Exemplo:<\/p>\n<p><strong># wget<\/strong> <a href=\"https:\/\/www.kernel.org\/pub\/linux\/kernel\/v3.x\/linux-3.17.1.tar.xz\">https:\/\/www.kernel.org\/pub\/linux\/kernel\/v3.x\/linux-3.17.1.tar.xz<\/a><\/p>\n<p>3. Preparar o ambiente para compila\u00e7\u00e3o<\/p>\n<p>Por padr\u00e3o, toda compila\u00e7\u00e3o do kernel \u00e9 feita na pasta <span class=\"palavraDestaque\">\/usr\/src<\/span>, independentemente de onde voc\u00ea baixou o kernel <span class=\"palavraDestaque\">.tar.xz<\/span>. Descompactaremos o fonte do kernel na pasta <span class=\"palavraDestaque\">\/usr\/src<\/span> com o comando:<\/p>\n<p><strong># tar -xvf linux-3.17.1.tar.xz -C \/usr\/src<\/strong><\/p>\n<p>Dentro do diret\u00f3rio:<\/p>\n<p><strong># cd \/usr\/src<\/strong><\/p>\n<p>Com o comando <span class=\"palavraDestaque\">ls<\/span> voc\u00ea vai poder visualizar o diret\u00f3rio de compila\u00e7\u00e3o do kernel. Ex.: <span class=\"palavraDestaque\">linux-3.17.1<\/span>.<\/p>\n<p>Crie um link simb\u00f3lico apontando para o diret\u00f3rio do kernel, para deixar tudo bem organizado:<\/p>\n<p><strong># ln -s \/usr\/src\/linux-3.17.1 \/usr\/src\/linux<\/strong><\/p>\n<p>Onde ele ir\u00e1 criar um arquivo <span class=\"palavraDestaque\">linux<\/span> apontando para o diret\u00f3rio kernel (linux-3.17.1).<\/p>\n<p>4. Copiar as configura\u00e7\u00f5es do kernel atual<\/p>\n<p><strong># cd \/usr\/src\/linux<\/strong> <span class=\"comentario\">#Todo nosso trabalho ser\u00e1 feito dentro desse diret\u00f3rio.<\/span><br \/>\n<strong># cat \/boot\/config-`uname -r` &gt; .config<\/strong><\/p>\n<p>Esse \u00faltimo comando ir\u00e1 gerar um arquivo <span class=\"palavraDestaque\">.confi<\/span>g (arquivo de configura\u00e7\u00e3o do kernel que voc\u00ea ir\u00e1 compilar) com as informa\u00e7\u00f5es do arquivo <span class=\"palavraDestaque\">\/boot\/config-`uname -r`<\/span> &#8211; que \u00e9 o seu kernel atual.<\/p>\n<p>No meu caso, estou atualizando o <span class=\"palavraDestaque\">kernel 3.2.0-4-amd64<\/span>, eu poderia colocar tamb\u00e9m o nome do diret\u00f3rio sem problema nenhum.<\/p>\n<p><strong># cat \/boot\/config-3.2.0-4-amd64 &gt; .config<\/strong><\/p>\n<p>Copiamos as configura\u00e7\u00f5es do kernel atual para nos servir de base para a compila\u00e7\u00e3o do novo kernel. Porque isso \u00e9 interessante?<\/p>\n<ul>\n<li>Isso vai lhe poupar tempo, porque o kernel j\u00e1 tem a configura\u00e7\u00e3o padr\u00e3o dele.<\/li>\n<li>Caso voc\u00ea esque\u00e7a de alguma configura\u00e7\u00e3o (ex.: esqueci de marcar o m\u00f3dulo da minha placa de rede e esqueci de marcar o m\u00f3dulo da minha placa de v\u00eddeo). Se esqueceu, tem que compilar o kernel de novo.<\/li>\n<\/ul>\n<p>Ent\u00e3o, voc\u00ea vai usar uma configura\u00e7\u00e3o totalmente funcional para utilizar no seu novo kernel. Ir\u00e1 facilitar muita coisa.<\/p>\n<p>5. Menu de configura\u00e7\u00e3o do kernel<\/p>\n<p><strong># make menuconfig<\/strong> <span class=\"comentario\">#Esse \u00e9 o menu de configura\u00e7\u00e3o do kernel.<\/span><\/p>\n<p>Nele, voc\u00ea pode habilitar ou desabilitar op\u00e7\u00f5es de configura\u00e7\u00e3o, caso voc\u00ea queira padronizar o seu kernel. Eu aconselho a deixar como est\u00e1, pois o arquivo de configura\u00e7\u00e3o j\u00e1 foi gerado, pois j\u00e1 escolhemos a nossa configura\u00e7\u00e3o. Se voc\u00ea acessou <span class=\"palavraDestaque\">menuconfig<\/span>, d\u00ea um <span class=\"palavraDestaque\">Exit<\/span>.<\/p>\n<p>6. Iniciando a compila\u00e7\u00e3o<\/p>\n<p><strong># make-kpkg clean<\/strong><\/p>\n<p>Para limpar constru\u00e7\u00f5es anteriores do kernel (ex.: uma compila\u00e7\u00e3o do kernel que deu um erro ou uma configura\u00e7\u00e3o errada de um processo de compila\u00e7\u00e3o antigo), ou seja, ele apaga as configura\u00e7\u00f5es anteriores.<\/p>\n<p><strong># time fakeroot make-kpkg -j4 &#8211;initrd kernel_image kernel_headers<\/strong><\/p>\n<p>Essa sequ\u00eancia de comandos ir\u00e1 fazer a compila\u00e7\u00e3o do kernel, ir\u00e1 testar a compila\u00e7\u00e3o do kernel, gerar as imagens e o cabe\u00e7alho do nosso kernel.<\/p>\n<p>Obs.: a compila\u00e7\u00e3o come\u00e7ou, logo em seguida, ir\u00e3o ser feitas algumas solicita\u00e7\u00f5es de algumas funcionalidades do kernel. Deixe tudo como padr\u00e3o, aperte <span class=\"palavraDestaque\">Enter<\/span> quantas vezes for necess\u00e1rio sem digitar nada.<\/p>\n<p>Voc\u00ea ir\u00e1 dar v\u00e1rios <span class=\"palavraDestaque\">Enter<\/span>, at\u00e9 iniciar o processo. O final dessa compila\u00e7\u00e3o \u00e9 a cria\u00e7\u00e3o dos dois arquivos <span class=\"palavraDestaque\">.deb<\/span> dentro do diret\u00f3rio <span class=\"palavraDestaque\">\/usr\/src<\/span>.<\/p>\n<p>7. Instalar pacotes do novo kernel<\/p>\n<p><strong># cd \/usr\/src<\/strong><br \/>\n<strong># dpkg -i linux-image-3.17*.deb linux-headers-3.17*.deb<\/strong> <span class=\"comentario\">#Comando para instalar os dois pacotes que foram gerados ap\u00f3s a compila\u00e7\u00e3o.<\/span><br \/>\n<strong># reboot<\/strong> <span class=\"comentario\">#Comando para reiniciar o sistema.<\/span><br \/>\n<strong># uname -a<\/strong> <span class=\"comentario\">#Para voc\u00ea conferir no sistema a atualiza\u00e7\u00e3o.<\/span><\/p>\n<p>Parab\u00e9ns, o seu kernel foi atualizado com sucesso.<\/p>\n<p style=\"text-align: center;\">[<a href=\"?p=19160\">Voltar<\/a>]<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aprendendo de forma pr\u00e1tica e simples o processo de compila\u00e7\u00e3o do kernel, onde o usu\u00e1rio ter\u00e1 facilidade em executar. Ser\u00e3o sete passos bem pr\u00e1ticos, onde iremos explicar cada comando utilizado pelo usu\u00e1rio para que ele n\u00e3o venha s\u00f3 a memorizar uma sequ\u00eancia de comandos, mas saber tudo o que est\u00e1 fazendo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-23121","post","type-post","status-publish","format-standard","hentry","category-noticias"],"_links":{"self":[{"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/23121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=23121"}],"version-history":[{"count":4,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/23121\/revisions"}],"predecessor-version":[{"id":23126,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=\/wp\/v2\/posts\/23121\/revisions\/23126"}],"wp:attachment":[{"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=23121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=23121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/antonini.ddns.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=23121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}