{"id":39,"date":"2010-04-17T20:41:00","date_gmt":"2010-04-17T20:41:00","guid":{"rendered":"http:\/\/artigos.marcomapa.com\/?p=39"},"modified":"2011-09-11T19:31:56","modified_gmt":"2011-09-11T19:31:56","slug":"entendendo-o-kernel","status":"publish","type":"post","link":"https:\/\/marcomapa.com\/artigos\/entendendo-o-kernel\/","title":{"rendered":"Entendendo o Kernel"},"content":{"rendered":"<p>Hoje em dia, quando falamos em \"Linux\" estamos normalmente nos referindo \u00e0 plataforma como um todo, incluindo as diferentes distribui\u00e7\u00f5es e softwares. Mas, no in\u00edcio, o Linux era apenas o kernel desenvolvido pelo Linus Torvalds. Mesmo hoje em dia, alguns puristas ainda insistem na id\u00e9ia de que o \"Linux\" \u00e9 apenas o kernel e todos os outros componentes s\u00e3o softwares que rodam sobre ele. O principal argumento a favor dessa id\u00e9ia \u00e9 que outros sistemas Unix, como o FreeBSD e o Solaris s\u00e3o baseados em outros kernels (e s\u00e3o por isso considerados sistemas diferentes) mas, apesar disso, rodam o X, KDE, Firefox e outros softwares, assim como no caso das distribui\u00e7\u00f5es Linux. De qualquer forma, a id\u00e9ia de usar o termo Linux para a plataforma como um todo \u00e9 bem mais simples e natural, por isso adotamos essa terminologia no dia a dia.<\/p>\n<p>O Kernel \u00e9 a pe\u00e7a fundamental do sistema, respons\u00e1vel por prover a infra-estrutura b\u00e1sica necess\u00e1ria para que os programas funcionem, al\u00e9m de ser o respons\u00e1vel por dar suporte aos mais diferentes perif\u00e9ricos: placas de rede, som e o que mais voc\u00ea tiver espetado no micro.<\/p>\n<p>Esta \u00e9 justamente uma das principais diferen\u00e7as entre o Windows e as distribui\u00e7\u00f5es Linux. No Windows, o sistema inclui um conjunto relativamente pequeno de drivers e voc\u00ea depende dos CDs de instala\u00e7\u00e3o e dos drivers disponibilizados pelos fabricantes. No Linux, quase todos os drivers dispon\u00edveis s\u00e3o incorporados diretamente no Kernel e j\u00e1 v\u00eam pr\u00e9-instalados nas distribui\u00e7\u00f5es. Isso faz com que os perif\u00e9ricos suportados sejam detectados automaticamente.<\/p>\n<p>Isso faz com que a import\u00e2ncia de usar uma distribui\u00e7\u00e3o atual seja muito maior, j\u00e1 que uma distribui\u00e7\u00e3o antiga ou desatualizada incluir\u00e1 n\u00e3o apenas softwares antigos, mas tamb\u00e9m um conjunto desatualizado de drivers, que far\u00e3o com que muitos comentes do PC n\u00e3o sejam reconhecidos.<\/p>\n<p>Come\u00e7ando do in\u00edcio, se voc\u00ea der uma olhada dentro da pasta \"\/boot\" de qualquer distribui\u00e7\u00e3o Linux, vai encontrar o execut\u00e1vel do Kernel, no meio de um pequeno conjunto de arquivos. Ele \u00e9 o primeiro componente carregado pelo gerenciador de boot durante a inicializa\u00e7\u00e3o do sistema<\/p>\n<p>Voc\u00ea deve estar se perguntando por que o arquivo se chama \"vmlinuz\" e n\u00e3o \"vmlinux\", como seria mais l\u00f3gico. Na verdade, esta \u00e9 uma longa hist\u00f3ria, mas, em resumo, o \"z\" no nome \u00e9 usado porque o arquivo do Kernel \u00e9 guardado no HD na forma de um arquivo compactado.<\/p>\n<p>Nas primeiras distribui\u00e7\u00f5es Linux, todos os drivers e outros componentes eram compilados diretamente nesse arquivo principal e voc\u00ea podia escolher os componentes a ativar na hora de compilar o Kernel. Se voc\u00ea habilitasse tudo, n\u00e3o teria problemas com nenhum dispositivo suportado, tudo iria funcionar facilmente. Mas, por outro lado, voc\u00ea teria um Kernel gigantesco, que rodaria muito devagar no seu 486 com 8 MB de RAM. Se, por outro lado, voc\u00ea compilasse um Kernel enxuto e esquecesse de habilitar o suporte a algum recurso necess\u00e1rio, teria que recompilar tudo de novo para ativ\u00e1-lo. Como resultado disso, as distribui\u00e7\u00f5es passaram a incluir diversas op\u00e7\u00f5es de kernel, compiladas com op\u00e7\u00f5es diferentes. Voc\u00ea tinha ent\u00e3o que escolher qual usar, de acordo com os componentes do micro. <\/p>\n<p>Este problema foi resolvido durante o desenvolvimento do Kernel 2.0, atrav\u00e9s do suporte a m\u00f3dulos. Os m\u00f3dulos s\u00e3o pe\u00e7as independentes que podem ser ativadas ou desativadas com o sistema em uso. Do Kernel 2.2 (lan\u00e7ado em 1999) em diante, quase tudo pode ser compilado como m\u00f3dulo, o que tornou as coisas muito mais pr\u00e1ticas e abriu as portas para os sistemas de detec\u00e7\u00e3o autom\u00e1tica de hardware que s\u00e3o usados nas distribui\u00e7\u00f5es atuais.<\/p>\n<p>Os m\u00f3dulos nada mais s\u00e3o do que arquivos, que s\u00e3o armazenados dentro da pasta \"\/lib\/modules\/vers\u00e3o_do_kernel\". Veja que os m\u00f3dulos ficam organizados em pastas: a pasta \"kernel\/drivers\/net\/\" cont\u00e9m drivers para placas de rede, a pasta \"kernel\/drivers\/usb\/\" agrupa os que d\u00e3o suporte dispositivos USB e assim por diante.<\/p>\n<p>Na maioria dos casos, os m\u00f3dulos possuem nomes que d\u00e3o uma id\u00e9ia do dispositivo a que oferecem suporte. O \"8139too.ko\" d\u00e1 suporte \u00e0s placas de rede com o chipset Realtek 8139, o \"sis900.ko\" d\u00e1 suporte \u00e0s placas SiS 900, enquanto o \"e100.ko\" ativa as placas Intel E100, por exemplo. Se voc\u00ea fizer uma pesquisa pelo nome de um m\u00f3dulo espec\u00edfico no Google, vai quase sempre chegar \u00e0 p\u00e1gina do projeto ou a alguma p\u00e1gina ou manual explicando o que ele faz.<\/p>\n<p>Para ativar suporte a um certo dispositivo, voc\u00ea (ou o utilit\u00e1rio de detec\u00e7\u00e3o inclu\u00eddo no sistema) precisa apenas carregar o m\u00f3dulo referente a ele. O resto \u00e9 feito pelo pr\u00f3prio Kernel, que se encarrega de ativar o dispositivo e criar um caminho de acesso para ele.<\/p>\n<p>Cada vez mais, o trabalho de detec\u00e7\u00e3o e carregamentos dos m\u00f3dulos est\u00e1 passando a ser feito de forma autom\u00e1tica pelas distribui\u00e7\u00f5es, atrav\u00e9s dos c\u00f3digos de identifica\u00e7\u00e3o inclu\u00eddos nos pr\u00f3prios dispositivos. Uma placa de rede com chipset Realtek, por exemplo, retorna algo como \"Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139\/8139C\/8139C+\". Com base nesses c\u00f3digos, o sistema pode descobrir quais perif\u00e9ricos est\u00e3o instalados e carregar os m\u00f3dulos apropriados, de forma autom\u00e1tica. Voc\u00ea pode checar os c\u00f3digos de identifica\u00e7\u00e3o dos dispositivos instalados usando os comandos \"lspci\" e \"lsusb\".<\/p>\n<p>Em casos em que voc\u00ea precisa carregar um m\u00f3dulo manualmente, \u00e9 usado o comando \"modprobe\", seguido do m\u00f3dulo desejado, como em:<\/p>\n<p># modprobe ndiswrapper<\/p>\n<p>Para descarregar um m\u00f3dulo, \u00e9 usado o \"modprobe -r\", como em:<\/p>\n<p># modprobe -r ndiswrapper<\/p>\n<p>Algumas distribui\u00e7\u00f5es oferecem uma op\u00e7\u00e3o de carregar m\u00f3dulos adicionais durante a instala\u00e7\u00e3o, justamente pensando nos raros casos onde voc\u00ea precisa de um determinado m\u00f3dulo para ativar a placa SCSI onde est\u00e1 instalado o HD para poder prosseguir com a instala\u00e7\u00e3o, por exemplo.<\/p>\n<p>Os m\u00f3dulos s\u00e3o gerados durante a compila\u00e7\u00e3o do Kernel. Voc\u00ea n\u00e3o precisa se preocupar com isso se n\u00e3o quiser, pois as distribui\u00e7\u00f5es quase sempre incluem vers\u00f5es bem completas do kernel por padr\u00e3o, mas, de qualquer forma, existe sempre a possibilidade de recompilar o kernel, mexendo nas op\u00e7\u00f5es e ativando ou desativando os m\u00f3dulos que quiser.<\/p>\n<p>Na pr\u00e1tica, a situa\u00e7\u00e3o mais comum onde voc\u00ea precisa lidar com m\u00f3dulos \u00e9 quando precisa instalar manualmente algum driver modificado ou propriet\u00e1rio, necess\u00e1rio para ativar algum dispositivo em particular. Infelizmente, isso \u00e9 ainda relativamente comum ao usar componentes rec\u00e9m-lan\u00e7ados, ou em algumas configura\u00e7\u00f5es problem\u00e1ticas, como em alguns notebooks com chipset SiS ou VIA (nada contras os fabricantes, mas tem hora que eles fazer merd...........).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoje em dia, quando falamos em \"Linux\" estamos normalmente nos referindo \u00e0 plataforma como um todo, incluindo as diferentes distribui\u00e7\u00f5es<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,8],"tags":[],"class_list":["post-39","post","type-post","status-publish","format-standard","hentry","category-hardware","category-linux"],"_links":{"self":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/39","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/comments?post=39"}],"version-history":[{"count":1,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/39\/revisions"}],"predecessor-version":[{"id":154,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/39\/revisions\/154"}],"wp:attachment":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/media?parent=39"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/categories?post=39"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/tags?post=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}