Herbert Moroni
Analista de Sistemas, autor, consultor, instrutor. Especializado na plataforma .NET da Microsoft.

Estudo para Certificação Linux LPI prova 101 - Parte 4 - Hardware (determinar e configurar)

17. junho 2009 07:50

A partir deste post iniciamos o que eu vou chamar de FASE 2. Até o Post anterior nós estudamos o que vai cair na prova, tivemos um idéia geral de como  se relaciona o conteúdo, do que vai ser mais cobrado na prova, mas principalmente a FASE 1 (posts 1 a 3) nos fez identificar o que precisamos aprender para passar na prova.

Eu considero a FASE 1 essencial para o estudo, porque nos da uma idéia geral do que vai cair, é como se falassemos para o nosso cerébro "reservar" aquele espaço para o conteudo porque é isso que vamos aprender. Muita gente não faz isso de forma consciente, mas isso só atrasa o estudo.

Eu estudo sempre do geral para o particular, monto meu estudo como um projeto que quando for finalizado vai ter me proporcionado o aprendizado desejado. Essa técnica do geral para o particular também permite revisões automaticas, ou seja, sem o esforço consciente da revisão você revisa o conteudo anterior sempre que adiciona um ponto mais especifico.

Como você viu eu defini no mais geral 23 itens, depois 157 itens um pouco mais especificos e agora vou adicionar m ais itens, crescendo como uma arvore de conteúdo. Por isso gosto muito dos mapas mentais, que permitem que eu visualize essa "arvore de conteudo" rapidamente, ajudando muito na revisão também.

Nesta FASE 2 eu tenho como objetivo definir os 157 itens. De forma geral eu quero saber para que cada um deles serve, posteriormente vou me aprofundar mais neles respondendo aquele questionario/perguntas do post de parte 3. E depois vou adicionar talvez mais algum conteúdo conforme for fazendo os simulados.

Então vamos lá.

Nosso primeiro assunto é: 

1 - Hardware - determinar e configurar

Revisando:

Hardware é tudo que é fisico no computador, eu costumo brincar que Hardware é  "tudo que podemos chutar" , enquanto Software é tudo que "podemos apenas chingar". Você chinga o Windows, mas chuta o monitor, uma placa mãe é um hardware, um disco rigido (HD) também é um hardware assim como um teclado ou mouse.

Determinar e configurar Hardware no linux (na minha opinião) não é uma tarefa facil. A alguns dos fabricantes de hardware não desenvolvem drivers para Linux. Então não é todo hardware que funciona adequadamente no Linux. Sem um driver ou módulo um sistema operacional não sabe como utilizar o hardware. Sem o driver/módulo correto o hardware pode simplesmente não funcionar ou não funcionar adequadamente, exemplo, sem o driver apropriado de video o sistema pode ficar lento e não conseguir utilizar todos os recursos de video que a placa de video da suporte. 

O pessoal do linux pode ficar bravo comigo por dizer driver, no linux eles chamam de módulo, para mim os dois são a mesma coisa mas existe discussão encima. Mas saliento, sem o módulo no linux o hardware não funciona adequadamente assim como sem o driver no Windows o hardware também não funciona adequadamente, tanto o módulo no linux como o driver no windows servem para dizer para o sistema operacional como utilizar o hardware a que ele se refere. Mas no linux trata-se sempre como módulo e no windows como driver.

Dentro do assunto Hardware determinar e configurar a LPI nos cobra o conhecimento sobre os seguintes itens:

1 - /sys  2 - /proc  3 - /dev  4 - modprobe  5 - lsmod  6 - lspci  7 - lsusb

Os três primeiros itens são pastas e os demais são comandos. Lógicamente esperamos que esses comandos nos permitam determinar e configurar os hardwares e as pastas em questão devem armazenar as informações sobre os mesmos.

Vamos definir os itens, não vou definir na ordem para ter um pouco mais de didatica agora.

A primeira coisa que precisamos saber quando falamos de dispositivos é como listá-los, para isso usamos o comando lspci, como mostra a imagem:

O comando lspci é utilizados para listar todos os dipositivos PCI conectados no sistema, como placa de som, rede, video, etc. (ls de listar + pci de dispositivos pci). Por padrão (como mostra a imagem acima) ele mostra uma breve lista dos dispositivos.

Você pode usar a opção -v (de verbose) para exibir informações detalhadas sobre os dispositivos, assim:

lspci -v

como a listagem pode ser grande utilize o |more por exemplo para melhorar a visualização, assim:

lspci -v |more

Existem diversas outras opções para o comando, para saber mais digite:

lspci --help

ou

man lspci

O --help mostra todas as opções do comando.

O man é uma ajuda do linux, uma especie de manual, tem informações detalhadas sobre o comando e suas opções. Você pode utilizar essas opções (--help e o man) para outros comandos, não só o lspci.

Para sair do man digite q.

Observação: você pode usar as opções -v ou -vv ou -vvv. Cada uma delas trás mais detalhes.

O comando lsusb é semelhante o lspci, mas lista os dispositivos USB. Você também pode utilizar a opção -v para informações detalhadas e utilizar o --help ou o man. Para utilizar todos os recursos do lsusb seu kernel precisa ser versão 2.3.15 ou superior porque é necessário suporte a interface /proc/bus/usb. Para ver sua versão do kernel digite o comando:

uname -r

Antes de falarmos sobre os comandos lsmod e modprobe (que trabalham com módulos especificamente) é importante compreender que temos 2 tipos de módulos:

  1. Built-in - já vem compilado com o kernel, ou seja, o dispositivo vai funcionar corretamente sem nossa intervenção.
  2. Não Built-in -  não estão junto com o kernel, ou seja, não são carregados automaticamente. Precisamos carrregar esses módulos manualmente para isso usaremos os comandos lsmod e modprobe.

O comando lsmod lista todos os módulos que estão ativos no sistema, mesmo que o módulo não esteja sendo usado no momento. Na verdade o lsmod exibe de forma organizada o conteudo do arquivo modules que esta na pasta /proc, então obviamente você também pode ver os modulos ativos visualizando o conteúdo deste arquivo.

O comando modprobe é responsavel por ativar/desativar um módulo.

Para ativar:

modprobe nome_do_modulo

Para desativar:

modprobe -r nome_do_modulo

Alguns módulos para funcionarem dependem que outros modulos estejam levantados, por exemplo, a placa de som precisa além do módulo da placa em si do soundcore (módulo de som). O mais legal do modprobe é que ele resolve essas dependencias automaticamente para você, ou seja, se você pedir para levantar o módulo da placa de som e o soundcore não estiver levantado, o modprobe levanta o soundcore automaticamente. Mas como ele faz isso? Como ele obtem informações sobre as dependencias?

A resposta a pergunta anterior é: através de um arquivo chamado modules.dep, ele tem uma lista de dependencias de todos os módulos.

O arquivo modules.dep fica na pasta /lib/modules/$(uname -r)

$(uname -r) vai retornar a versão do kernel que é o nome da pasta dentro de /lib/modules onde o arquivo modules.dep esta. Isto porque você pode ter mais de um kernel na sua maquina e para cada um deles terá um arquivo modules.dep separado. É claro que voce pode navegar até lá sem usar o uname só coloquei no post porque sua versão do kernel pode ser diferente da minha então você não ia localizar o arquivo.

Um comando importante (associado ao modprobe) que cai na LPI muito frequentemente é o:

depmod

Ele que cria ou atualiza o modules.dep,  então se você apagar o arquivos modules.dep e precisar criar o mesmo novamente é só executar esse comando.

A opção -a do depmod é padrão, ou seja, é executada se você não colocar nada, ela diz para criar dependencia de todos os módulos, frequentemente você vai ver a chamada deste comando assim:

depmod -a 

que é a mesma coisa de chamar:

depmod

Voltando ao modprobe a opção -l do mesmo lista todos os módulos compilados, ou seja, disponiveis para uso:

modprobe -l

Então vemos todos os módulos que podemos utilizar através do modprobe -l e visualizamos os modulos carregados através do lsmod.

Vamos falar agora sobre as pastas /proc, /sys e /dev.

O diretório /proc tem um conteúdo interessante, seu conteúdo não faz parte dos arquivos do HD. Ele é apenas um sistema de arquivos virtual que disponibiliza informação sobre os processos que estão rodando no sistema e informações do kernel no formato de arquivos.

Nele encontramos "arquivos" com a configuração atual do sistema, dados estatísticos, dispositivos montados, interrupções, endereços e estados das portas de I/O, dados sobre as redes, etc. Além disso, possuem subdiretórios com os nomes que correspondem ao PID (process id) de cada processo corrente na máquina, onde se encontram informações detalhadas sobre o estado do processo, linha de comando, etc.

Você pode ver informaçõe sobre a CPU através do arquivo cpuinfo por exemplo:

cat /proc/cpuinfo

A imagem abaixo mostra o conteudo do diretório /proc da minha maquina virtual. Note vários números em azul nas primeiras colunas, são pastas que representam processos que estão sendo executados, cada número é o PID de um processo, ou seja, o número ou código único que representa o mesmo. Cada pasta de processo tem várias informações sobre o mesmo. Temos também arquivos como cpuinfo e meminfo com informações sobre o sistema e outras pastas como bus, acpi e asound que ajudam a organizar as informações em categorias.

O man pode tem várias informações relevantes sobre a pasta /proc (principalmente relacionados as informações dos processos) através do comando:

man proc

O diretório /sys foi introduzido a partir do kernel 2.6 e como o diretório /proc também é virtual. Ele tem informações sobre os dispositivos Plug and Play e pode ser usado para configura-los também.

No diretório /sys cada dispositivo que existe no seu sistema tem seu próprio diretório que contém arquivos mostrando os recursos que lhe foram atribuídos. O nome dos diretórios que representam os dispositivos são estranhos, como 000:00:02.0 mas você pode  usar o comando lspci -v  para confrontar esse código e identificar corretamente qual dispositivo ele representa.

O diretório /dev contém os arquivos de dispositivos. Ele pode ser do tipo devfs ou udev. Este último é o formato mais atual e é suportado a partir do kernel 2.6.15 e deve substituir totalmente o devfs. A principal diferença entre os dois é que o udev não ocupa espaço no HD por ser montado na memória RAM ao contrário do devfs.

O Linux trabalha com dispositivos (falando em hardware) como arquivos. Ou seja, para cada dispositivo que eu tenho na máquina tenho um arquivo dispositivo para ele em /dev. Esses arquivos não são armazenados no HD, mas sim "links" para dispositivos de hardware. Por exemplo, todos os arquivos gravados no arquivo /dev/dsp serão reproduzidos pela placa de som. Esta organização é para  facilitar a vida dos programadores, que podem acessar o hardware do micro simplesmente fazendo seus programas lerem e gravarem em arquivos.

Concluindo:

Você pode ver passo-a-passo como configurar um dispositivo:

Placa de som

Placa de rede

Em resumo você usa os comandos lspci e lsusb para ter informações dos dispositivos do seu computador. Lembre-se que pode usar as opções -v, -vv ou -vvv para exibir mais detalhes.

O comando lsmod exibe todos os módulos ativos e o comando modprobe -l todos os módulos disponiveis, você usa o modprobe nome_do_modulo para carregar um modulo e para desativar adiciona a opção -r. O modprobe resolve as dependencias automaticamente através do arquivo modules.dep. Para gerar esse arquivo ou atualizar o mesmo você usa o comando depmod.

Os módulos podem ser Built-in ou não Built-in. Os Built-in vem compilados com o Kernel e você não precisa fazer nada para que um dispositivo que os use funcione corretamente. Você pode personalizar seu kernel compilando o mesmo com os módulos de sua preferência mas isso é assunto para outro post.

Durante a instalação do Linux ele verifica todos os dispositivos e já levanta os módulos não Built-in correspondentes. Já temos assistentes no Linux que atuam nesse processo também quando o sistema operacional já esta instalado como o Plug-and-Play do Windows.

Na pratica você utiliza os comandos aprendidos neste artigo quando adiciona ou troca um dispositivo na sua máquina e o módulo do mesmo não é Built-in. Então você procura qual o módulo usando o modprobe -l e ativa o mesmo, também desativa o anterior.

Dica de segurança:

O que eu quero salientar aqui como especialista em segurança (e que o pessoal não fala muito no mundo linux por ser uma falha do mesmo) é que os módulos podem ser um sério problema de segurança no seu sistema, mas como? Eu explico.

Quando você instala um dispositivo novo ou o Linux não detecta o mesmo durante a instalação pode ser que o módulo para o mesmo não esteja no na sua distribuição do Linux. Ai você pesquisa na internet e localiza um arquivo do módulo ou um processo para compilar o mesmo na sua máquina. Arquivos de módulos lidam diretamente com o kernel e possuem privilegios que podem ser um sério risco de segurança na sua máquina. O invasor mal intencionado pode fazer praticamente qualquer coisa, abrir caminho para roubo de informações ou até mesmo danificar seu hardware. No Windows temos o mesmo problema também, não é uma coisa só do mundo Linux, mas o que ameniza bastante o problema no Windows são os driver assinados digitalmente, o que não temos no Linux. Fora o problema da segurança um módulo pode ter sido mal projetado e ocasionar diversos erros no seu sistema.

Mas como me prevenir quanto a isso?

Primeiro: não baixe módulos em fóruns e sites não confiáveis, veja se o fabricante tem o módulo no site do mesmo, se não encontrar troque o hardware.

Pergunta comum: Mas trocar o hardware? Isso não é muito drástico?

Resposta correta, que muita gente não gosta de receber.....

Sim trocar o hardware. Temos o mal costume de pensar a nivel de hardware primeiro e depois sistema operacional e isso é errado. Tanto no mundo Linux quanto Windows também.

O certo é verificarmos qual sistema operacional vamos utilizar e então verificar quais os dispositivos de hardware são compativeis com o mesmo e então adquirir os mesmos de acordo com a nossa necessidade.

Isso evita diversos problemas tanto em sistemas operacionas Linux quanto Windows, muitos dos problemas encontrados no Windows inclusive relacionados a tela azul são relacionados a drivers mal construidos ou adulterados. O Windos tem uma lista chamada HCL de dispositivos testados com o sistema operacional e garantidos pela Microsoft como compativeis, você não precisa instalar drivers para esses dispositivos por exemplo porque eles já vem com o Windows.

No caso do linux verifique os módulos que vem com a distribuição que você escolheu, essa é a maior segurança que você tem. No Windows você ainda pode instalar um driver verificando sua assinatura digital e ter certeza que o mesmo não foi adulterado, no Linux essa certeza só é obtida quando o módulo já esta na distribuição (é claro que a distribuição deve ser confiável já que qualquer um pode compilar seu Kernel ou personalizar sua distribuição).

Abaixo segue alguns links onde você pode encontrar mais informações sobre os assuntos tratados neste post:

Diretório /sys:

http://en.wikipedia.org/wiki/Sysfs

http://linux.about.com/od/pap_howto/a/hwtpap07t06.htm

Diretório /proc:

http://en.wikipedia.org/wiki/Procfs

Diretório /dev:

http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs

http://www.kroah.com/linux/talks/ols_2003_udev_paper/Reprint-Kroah-Hartman-OLS2003.pdf

 

Categorias: ,