Baixar Capítulo - Editora Alta Books

Transcrição

Baixar Capítulo - Editora Alta Books
Tópico 101.1: Identificação e configuração de hardware
3
Tópico 101: Arquitetura do
sistema
101.1: Identificação e configuração de
hardware
LPI: Esse é o Tópico 101.1, Peso 2 do exame de certificação LPIC-1 117-101.
Nota: Os candidatos deverão estar aptos para fazer configurações básicas de hardware.
Configuração básica do BIOS
É importante que você domine pelo menos o conhecimento básico apresentado
aqui porque ele sempre aparece em todos os exames LPI. No exame, você deverá
estar ambientado com conhecimentos sobre o hardware genérico para a plataforma
Intel-PC, entender os recursos de alocação do hardware como IRQ, Portas I/O e
DMA, entender expansão com cartões PCMCIA e genéricos, nomenclatura SCSI e
USB, detecção da interface de rede, e entender os passos básicos para a configuração
de modems a placas de som, bem como sua nomenclatura técnica.
BIOS e componentes principais
Muita gente sabe o que é BIOS, mas não consegue definir muito bem. É simples.
BIOS – Basic Input Output System nada mais é do que um programa que já
vem gravado no chip do computador o qual é responsável por testar a parte de
hardware e dispositivos conectados à placa mãe (main board ou mother board).
É o que chamamos de memória ROM – Ready Only Memory, a memória apenas
de leitura.
BIOS modernas fazem todas as configurações de forma automática, mas alguns
dispositivos requerem alguns “acertos”, e isso é feito manualmente para ajustes
mais finos. Veja a seguir o quem vem agregado à placa mãe do computador e que
também tem interação com a BIOS:
• RAM – Randomic Access Memory: É a memória de acesso aleatório. É uma
memória de armazenamento temporário, pois quando o computador é desligado
perde-se o seu conteúdo;
• Processador: É a parte do computador responsável pelos processamentos
das instruções matemáticas e lógicas e os programas que são carregados na
memória RAM;
• Co-Processador: Sua função é trabalhar em conjunto com o processador
principal para processar as instruções matemáticas. Nos computadores
modernos, ele já vem incluso no processador principal. Placas de aceleração 3D
também apresentam seu próprio processador matemático;
4
Tópico 101: Arquitetura do Sistema
•
•
Memória Cache: É a memória de armazenamento auxiliar do Processador. Possui
alta velocidade de funcionamento, geralmente a mesma que o processador. Sua
função é aumentar o desempenho de processamento. A memória cache pode
ser interna ou externa à placa mãe;
CMOS: É a memória temporária a qual é alimentada por uma bateria onde ficam
armazenadas as configurações do computador feitas pelo programa residente
em BIOS.
BIOS modernas são muito fáceis de configurar, ao contrário de BIOS antigas onde
tínhamos que praticamente “jampear” tudo na mão. Todo computador pode ter
a parte BIOS configurada por um programa residente o qual deve ser chamado
antes de entrar o sistema operacional. Geralmente, podemos fazer isso de diversas
formas usando combinações de teclas como [del], [F12], [control]+[alt]+[esc], etc,
porém isso pode depender do fabricante.
Figura 101.1.1 e Figura 101.1.2: Configuração da BIOS de um computador (várias opções) e seus
componentes internos.
Quando da configuração da BIOS, a partir desse ponto você entra no programa de configuração e ajustes do
seu equipamento. Porém, tome cuidado, pois dependendo da configuração que fazemos, o computador pode
apresentar super aquecimento, ou até mesmo não funcionar, o que precisaria, então, que se refizesse uma
configuração adequada.
A arquitetura BIOS
BIOS – Basic Input and Output System é o sistema básico de entrada e saída, que
na verdade nada mais é que a memória ROM – Read Only Memory, memória
apenas de leitura (não pode ser apagada) a qual contém as instruções básicas
para a inicialização do computador, reconhecimento e ativação dos periféricos
conectados à placa mãe. As BIOS mais modernas (a partir do 286) também trazem
um programa que é usado para configurar o computador modificando os valores
localizados na CMOS (memória temporária alimentada por uma bateria onde são
lidas/armazenadas as configurações do computador feitas pelo programa residente
na BIOS).
As placas controladoras padrão IDE dependem da BIOS em si, mas as placas
controladoras padrão SCSI possuem sua própria BIOS que identificam
automaticamente os periféricos conectados a ela.
O entendimento é simples, ainda mais se você já tiver feito algum curso de hardware
ou simplesmente gostar de mexer com a parte mecânica de computadores. Quando
Tópico 101.1: Identificação e configuração de hardware
5
abrimos o computador podemos ver dentro dele todos os componentes como a CPU
em si, ou seja, qual processador você tem em seu computador, como a memória
ROM, a memória CMOS para configuração da BIOS, uma bateria que guarda as
configurações, conexões para teclado, mouse, vídeo, placa de rede etc, e os slots
para encaixe de cartões, principalmente de memória, sendo que o tipo do slot pode
variar dependendo do barramento.
Tabela 101.1.1: Quadro dos principais barramentos em um Intel-PC.
Barramento
Descrição
ISA 8 Bits
É o Industry Standard Architecture. Esse é um padrão antigo e pode ainda ser
encontrado nos velhos computadores PC/XT, se ainda existirem.
ISA 16 Bits
É a evolução do ISA 8 bits. Permite uma taxa de transferência de 2 MB/s e
seu conector é maior.
VESA
É o Video Electronics Standard Association. Foi feito para placas de vídeo
rápidas. Apresenta taxa de transferência que pode chegar a 132MB/s.
EISA
É o Enhanced Industry Standard Architecture. É mais encontrado em servidores
e tem a capacidade de bus mastering, a qual possibilita a comunicação das
placas sem a interferência da CPU.
MCA
É o Micro Channel Architecture (32 bits). Desenvolvido pela IBM e foi usado
nos antigos PS/1 e PS/2.
PCI
É o Peripheral Component Interconnect. Produzido pela Intel, é rápido e tem
caracte-rística/velocidade do VESA. Pode se configurar automaticamente
através do Plug and Play (PNP).
AGP
É o Accelerated Graphics Port. É novo e foi criado exclusivamente para a
ligação de placas de vídeo. Muito bom para processamento de jogos.
PCMCIA
É o Personal Computer Memory Card International Association. Apresenta um
encaixe (slot) especial usado para conexões de placas externas. Esses cartões
podem adicionar mais memória ao sistema, conter um fax-modem, placa de
rede, disco rígido, e mais um monte de coisas legais.
O padrão IDE
O padrão de discos para a grande maioria da plataforma Intel PC é o IDE –
Integrated/Intelligent Drive Electronics. Os discos IDE variam em tamanho,
indo de meros 20 Mb até 80 GB para uma controladora padrão, porém, os mais
modernos do tipo ATA – Advanced Technology Attachment chegam a 137 GB, e
maior que isso são todos do tipo SATA – Serial Advanced Technology Attachment,
o qual é o sucessor da tecnologia ATA que foi renomeada para PATA – Parallel ATA
para se diferenciar da tecnologia SATA.
BIOS modernas usam o padrão IDE pelas seguintes razões:
• BIOS carrega a parte essencial do sistema operacional durante o processo de
inicialização;
• BIOS provê a informação correta sobre as mídias instaladas para o sistema
operacional. Essa informação nada mais é que o número de cilindros, cabeças e
setores do disco.
NOTA: Algumas distribuições não conseguem funcionar corretamente se a geometria do
disco estiver inconsistente. É possível corrigir isso com uma formatação de baixo nível do
disco, mas se o problema continuar é porque o disco já está com os dias contados. 
6
Tópico 101: Arquitetura do Sistema
A geometria do disco serve, dentre outras coisas, para informar exatamente onde
se encontram as informações. Quando o carregador do sistema operacional entra
em ação, ele consulta exatamente esses valores. A geometria de disco refere-se à
dimensão lógica do disco. Um dos locais onde podemos obter informações sobre o
hardware IDE em nosso sistema é em /proc/ide conforme para discos com padrão
IDE, ou /proc/scsi para discos com padrão SCSI. Os arquivos drivers, ide0, ide1 e
sis contêm informações sobre esses dispositivos e hda e hdc informações sobre o
HD/CD IDE.
Experimente examinar agora o conteúdo desses arquivos.
# ls -l /proc/ide/
total 2
-r--r--r--. 1 root
lrwxrwxrwx. 1 root
lrwxrwxrwx. 1 root
dr-xr-xr-x. 3 root
dr-xr-xr-x. 3 root
-r--r--r--. 1 root
root
root
root
root
root
root
0
8
8
0
0
0
2010-03-18
2010-03-18
2010-03-18
2010-03-18
2010-03-18
2010-03-18
15:00
15:00
15:00
15:00
15:00
15:00
drivers
hda -> ide0/hda
hdc -> ide1/hdc
ide0
ide1
sis
Para disco SCSI use o comando:
# ls -l /proc/scsi
total 0
-r--r--r--. 1 root root 0 2010-03-18 15:00 device_info
-r--r--r--. 1 root root 0 2010-03-18 15:00 scsi
dr-xr-xr-x. 2 root root 0 2010-03-18 15:00 sg
Veja o conteúdo do arquivo /proc/scsi/scsi. Essa listagem pode ser diferente
dependendo do equipamento:
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: ATA
Model: ST380011A
Type:
Direct-Access
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: HL-DT-ST Model: RW/DVD GCC-4320B
Type:
CD-ROM
Rev: 3.16
ANSI SCSI revision: 05
Rev: 1.00
ANSI SCSI revision: 05
Há dois comandos úteis, o hwinfo e o hwscan, os quais têm a função de mostrar
informações e varrer dispositivos no computador. Além desses, em algumas
distribuições há o discover (Debian), o kudzu (Red Hat), o lsdev (maioria dos
sistemas Linux) e o hwsetup-knoppix (Knoppix).
Entendendo IRQ, I/O e DMA
As IRQs – Interrupt Request (Requisição de Interrupção) são chamadas especiais
que os dispositivos fazem ao processador quando precisam de “enlaces” de tempo,
ou seja, quando se movimenta o mouse, o dispositivo responsável pelo mouse
solicita uma atenção do processador para que o movimento seja feito, e isso ao
mesmo tempo pode acontecer quando a impressora está imprimindo, pois ela
também solicitou informações ao processador.
Tópico 101.1: Identificação e configuração de hardware
7
DICA: Os dispositivos PCI permitem o compartilhamento de IRQs, pois as manipulam de
forma diferente, mapeando uma interrupção para uma interrupção normal do sistema que
geralmente é interrupção entre a IRQ 9 e IRQ 12.
As IRQs servem para sinalizar para a CPU que há dados disponíveis. O processador
faz isso dando pequenos espaços de tempos, e isso para o usuário é totalmente
transparente. Na plataforma Intel PC temos no máximo 16 (dezesseis) IRQs, que
variam de 0 (zero) a 15 (quinze). Parece pouco, mas, felizmente, as IRQs podem ser
compartilhados, ao contrário das I/O. As IRQs que sempre são usados pelo sistema
e são numeradas como 1, 2, 6, 8, 14, 15, e os que estão livres com mais frequência
são 5, 9, 10, 11, 13, e os que podem ser liberados são 3, 4, 7, 12.
Os canais DMA, os quais servem para acesso direto à memória e os dispositivos
de entrada e saída, têm a função de permitir que alguns dispositivos escrevam
diretamente nela, onde cada dispositivo usa o seu próprio canal DMA. Na plataforma
PC há dois controladores de DMA, sendo que o primeiro controlador tem quatro
canais (0, 1, 2 e 3) e o segundo controlador também quatro (4, 5, 6 e 7), somando-se
então 8 (oito) canais.
A transferência de dados nos quatro primeiros canais dá-se a uma taxa de 1 byte, ou
seja, 8 bits, enquanto nos demais a taxa é de 2 bytes ou 16 bits. Os canais de DMA
altos (5, 6 e 7) somente podem ser acessados por dispositivos de 16 bits, e o canal
4 é usado como ligação entre eles, o que chamamos cascade (cascata). Os canais
DMA padrão são usados por dispositivos ISA, EISA e VESA, e os dispositivos PCI
usam o seu próprio controlador DMA chamado de Bus Mastering, pois assim a
transferência é muito mais alta. A taxa de transferência varia de 33 MB/s no modo
2 e 66 MB/s no modo 4.
Lembre-se que dos oito canais DMA, o canal 4 sempre está ocupado, pois ele é
responsável por fazer a comunicação entre os canais inferiores (0, 1, 2 e 3) com
barramento 8/16 bits e os superiores (5, 6 e 7) com barramento de 16 bits. Os
endereços de entrada e saída (I/O) são necessários porque cada dispositivo precisa
ser endereçado pela CPU, e esses endereços são usados para entrada e saída desses
dispositivos. Porém, na arquitetura atual, apenas um único dispositivo pode
usar esses endereçamentos num determinado momento, logo, não se permite
compartilhamento.
Tabela 101.1.2: Quadro dos canais DMA.
Canal
Barramento
Descrição
DMA 0
8/16 bits
Livre, mas é usado por circuitos de memória RAM.
DMA 1
8/16 bits
Utilizado por placas de som (canal 8 bits), porta paralela ECP,
adaptadoras SCSI, placas de rede ou controladora de scanner.
DMA 2
8/16 bits
Utilizado pela controladora de disquete e controladoras de
fitas.
DMA 3
8/16 bits
Utilizado pela porta paralela ECP, placa de som, controladoras
de fitas, controladoras SCSI ou controladora de scanner antiga.
Também pode ser usado pela placa de rede.
DMA 4
DMA 5, 6, 7
--8/16 bits
Modo Cascade. É usado como ponte para comunicação entre
os canais.
Livre, porém pode ser usado pela placa de som (canal 16 bits),
controladora de scanner ou placa de rede. O canal 5 é usado
por dispositivos SCSI.
8
Tópico 101: Arquitetura do Sistema
Algumas BIOS fazem alocação de recursos automaticamente com o intuito de evitar
conflitos, onde os dispositivos PCI e ISA plug and play compartilham interrupções
entre si. Pode acontecer de os dispositivos entrarem em conflito pelo uso ao mesmo
tempo desses endereçamentos. Isso resolve-se da seguinte maneira:
• Trocar as configurações dos dispositivos via configuração BIOS;
• Trocar os jumpers nos cartões/placas de expansão;
• Configurar o dispositivo em questão usando um programa específico.
Praticando a configuração básica da BIOS
Essa parte é de certa forma simples, pois aqui você deverá estar apto a fazer umas
configurações básicas de BIOS do sistema. Você deverá entender a diferença em
discos IDE e LBA – Large Block Address e discos maiores que 1024 cilindros.
Habilitar e desabilitar a integração de periféricos como, por exemplo, o teclado.
Faz-se necessário saber os principais comandos do sistema para poder fazer
consultas sobre as informações base da BIOS. Esse conhecimento sempre é exigido
junto aos exames LPI.
O diretório /proc
O diretório /proc é um diretório virtual no sistema Linux, pois ele existe apenas
quando a máquina está ligada, e geralmente todos os arquivos dentro desse diretório
tem 0 (zero) bytes, mas mesmo assim seus arquivos apresentam conteúdo. O maior
arquivo dentro desse diretório é o kcore, e geralmente ele apresenta o tamanho
próximo do total de memória presente no seu sistema. Veja a seguinte listagem
para um sistema com 256 MB de RAM:
# ls -l /proc/kcore
-r--------. 1 root root 536858624 2010-03-18 15:00 /proc/kcore
# ls -lh /proc/kcore
-r--------. 1 root root 512M 2010-03-18 15:00 /proc/kcore
Cuidado, como esse é um diretório virtual, usado na verdade pelo kernel, não é
possível escrever nele pelo método convencional. Caso você faça isso, vai receber
uma mensagem de erro. Lembre-se que o /proc é usado exclusivamente pelo kernel
para gerenciamento.
# touch /proc/teste
touch: cannot touch `/proc/teste’: No such file or directory
# echo “oi proc” > /proc/oi
-bash: /proc/oi: No such file or director
Alocação de recursos
A alocação de recursos serve para que possamos permitir periféricos e dispositivos
conectados ao PC se comunicarem diretamente com os recursos do sistema, em
particular a CPU. A alocação de recursos pode ser pesquisada usando os comandos
comuns de visualização de arquivos textos como, por exemplo, cat, less, more,
porém, os mais usados são o hwinfo, lshal, lspci e o dmesg. Fique atento
quanto a esses dois últimos.
Tópico 101.1: Identificação e configuração de hardware
9
Esses recursos são: IRQS, I/O e DMA.
• IRQs – Interrupt Requests Lines: As IRQs permitem que os diversos tipos de
dispositivos conectados ao computador requisitem “enlaces” de tempo para a
CPU. Quando isso ocorre, a CPU para a sua atividade do momento e processa a
atividade requisitada. Isso acontece o tempo todo;
• I/O – Input/Output: Entrada e saída representa um endereço específico do
sistema no mapa de memória. A comunicação do dispositivo com a CPU dá-se
pela leitura e escrita na memória em endereços específicos;
• DMA – Direct Memory Access: Alguns dispositivos podem ter acesso à memória
do sistema através dos canais DMA, e isso permite a escrita e o processamento
de dados sem o acesso direto à CPU.
Listando os recursos alocados
O kernel mantém informações relacionadas aos recursos alocados no diretório /
proc, conforme já havíamos comentado. Fique atento, pois esse diretório contém
informações importantes para o hardware e pode ser facilmente consultado,
e na grande maioria das vezes, apenas com o comando cat e similares. Mas há
comandos mais específicos os quais analisam as informações desse diretório para
gerar uma saída customizada.
Alguns dos principais comandos para listar esses recursos são:
• dmesg: Mostra as informações do kernel quando da hora da inicialização. É
muito útil por podermos analisar passo a passo todo o reconhecimento do
hardware feito pelo kernel. Essas mensagens encontram-se no arquivo /var/
log/dmesg;
• hwinfo, lshal: Esses dois comandos são muito úteis, pois nos fornecem
todas as informações detalhadas do sistema em forma de relatório;
• lspci: Mostra informações do chipset de todos os componentes padrão PCI.
Esse comando listará também IRQs e I/O se for usado o parâmetro “-v” ou
“-vv”;
• lsusb: Mostra informações sobre o suporte USB e informações adicionais
caso algum dispositivo USB esteja plugado na máquina.
Todas as informações/arquivos do diretório /proc são importantes, porém algumas
se destacam nesse momento. A numeração dessa listagem representa os diretórios
criados por processos no sistema.
# cd /proc; echo *
1 10 1076 1078 1079 11 1103 1121 1134 1163 1171 1184 1194 1195 12 1204 1225 1233
1236 1237 13 1328 1362 1365 1380 1393 1398 14 1402 1405 1413 1445 1461 1470 1480
1491 15 1502 1510 1512 1519 1526
(...) acpi asound buddyinfo bus cgroups cmdline cpuinfo crypto devices diskstats
dma dri driver execdomains fb filesystems fs interrupts iomem ioports irq
kallsyms kcore keys key-users kmsg kpagecount kpageflags latency_stats loadavg
locks mdstat meminfo misc modules mounts mtrr net pagetypeinfo partitions sched_
debug schedstat scsi self slabinfo stat swaps sys sysrq-trigger sysvipc timer_
list timer_stats tty uptime version vmallocinfo vmstat zoneinfo
Por exemplo, caso queira saber como está mapeada a memória, simplesmente
digite o comando cat/proc/meminfo (esse comando apresenta mais informações
técnicas) ou, se quiser apenas uma simples checagem, use o comando a seguir. Veja
a parte reservada que está sendo usada para swap (área de troca ou temporária)
10
Tópico 101: Arquitetura do Sistema
no sistema; mas em máquinas com maior capacidade de memória como 4 GB, 8
GB e 16 GB de memória, ela raramente é usada. O uso dela depende do destino
da máquina. Se for para tarefas normais, simples, do dia-a-dia, e a máquina tiver
pouca memória, ela será usada. Caso contrário, não.
# free
total
Mem:
510720
-/+ buffers/cache:
Swap:
1048568
used
461368
295360
10128
free
49352
215360
1038440
shared
0
buffers
4796
cached
161212
Veja outros parâmetros para brincar com o comando free:
• free: Exibe uso de memória em kilobytes (-k padrão);
• free -m: Exibe uso de memória em megabytes;
• free -g: Exibe uso de memória em gigabytes;
• free -b: Exibe uso de memória em blocos;
• free -mt: Exibe uso de memória + Swap;
• free -s 5: Exibe uso de memória a cada cinco segundos.
Para informações de memória com mais detalhes usamos o comando vmstat (use
vmstat -d para ver estatísticas do disco) ou o cat /proc/meninfo. Esses dois
comandos são úteis para uma inspeção com mais detalhes:
# vmstat -S M
498
450
137
208
47
4
157
1023
9
1014
32439
0
6464
80397
5972
73
(...)
-s
M total memory
M used memory
M active memory
M inactive memory
M free memory
M buffer memory
M swap cache
M total swap
M used swap
M free swap
non-nice user cpu ticks
nice user cpu ticks
system cpu ticks
idle cpu ticks
IO-wait cpu ticks
IRQ cpu ticks
# cat /proc/meminfo
MemTotal:
510720
MemFree:
48876
Buffers:
4952
Cached:
161384
SwapCached:
284
Active:
141228
Inactive:
213948
Active(anon):
68552
Inactive(anon):
124648
Active(file):
72676
Inactive(file):
89300
Unevictable:
8
Mlocked:
8
HighTotal:
0
HighFree:
0
LowTotal:
510720
(...)
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
Um outro comando útil é o slabtop que serve para ver o cache (área secundária)
do kernel. Ele mostra o comportamento dos objetos, nome, e consumo em nível
de kernel (outros comandos úteis são o iostat e o lsof; use a página de manual
para aprender mais sobre eles):
# slabtop
Active / Total Objects (% used)
Active / Total Slabs (% used)
Active / Total Caches (% used)
Active / Total Size (% used)
Minimum / Average / Maximum Object
OBJS ACTIVE
USE OBJ SIZE
:
:
:
:
:
554898 / 582805 (95.2%)
4586 / 4586 (100.0%)
63 / 77 (81.8%)
17935.39K / 21606.70K (83.0%)
0.01K / 0.04K / 4.00K
SLABS OBJ/SLAB CACHE SIZE NAME
Tópico 101.1: Identificação e configuração de hardware
294912 293642
157696 157690
26944 18494
22144 22046
12720
6092
12648
7137
9798
9710
8840
8831
(...)
99%
99%
68%
99%
47%
56%
99%
99%
0.02K
0.01K
0.06K
0.03K
0.13K
0.04K
0.09K
0.05K
1152
308
421
173
424
124
213
104
256
512
64
128
30
102
46
85
4608K
1232K
1684K
692K
1696K
496K
852K
416K
11
kmalloc-16
kmalloc-8
buffer_head
kmalloc-32
dentry
selinux_inode_security
vm_area_struct
sysfs_dir_cache
Para verificar os pontos de montagens no sistema nesse momento (veja como a
saída desse comando é diferente do comando df):
# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext4 rw,relatime,barrier=1,data=ordered 0 0
/dev /dev tmpfs rw,relatime,mode=755 0 0
/proc /proc proc rw,relatime 0 0
/sys /sys sysfs rw,relatime 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
devpts /dev/pts devpts rw,relatime,mode=600,ptmxmode=000 0 0
/dev/sda2 /boot ext3 rw,relatime,errors=continue,user_xattr,acl,data=ordered 0
0
tmpfs /dev/shm tmpfs rw,relatime 0 0
(...)
Para saber qual é a sua partição de troca (swap) use o comando (dois exemplos):
# cat /proc/swaps
 Formatado normalmente com Ext3.
Filename
Type
Size
Used
Priority
/dev/sda5
partition
1020088 64
-1
# cat /proc/swaps
 Formatado com LVM.
Filename
Type
Size
/dev/mapper/vg_ns1-lv_swap
partition
Used
Priority
1048568 10128
-
Tabela 101.1.3: Quadro dos principais diretórios do diretório /proc.
Diretório
Descrição
asound/
Informações sobre a placa de som.
bus/
Informações sobre dispositivos como mouse, PCI e USB.
driver/
Informações sobre tipos de driver, geralmente USB.
fs/
Informações sobre sistema de arquivos (file system) no sistema. Geralmente,
nfsd e supermount.
ide/
Informações sobre dispositivos IDE no sistema.
irq/
Diretório reservado para IRQs.
net
Informações sobre conexões.
sys/
A partir do kernel 2.6 é o novo diretório para configurações plug and play.
tty/
Informações sobre dispositivos seriais etc.
12
Tópico 101: Arquitetura do Sistema
Já sabemos que cada arquivo dentro do diretório /proc se faz importante, e que
todos podem ser lidos com os comandos cat, more e less. Mas tenha uma atenção
especial quanto aos seguintes arquivos:
• cmdline: Local onde se encontra o kernel e opções de carregamento;
• cpuinfo: Informações genéricas sobre processador, modelo, velocidade etc;
• dma: Informação sobre DMA;
• interrupts: IRQs usadas pelos periféricos;
• iomem: Informações sobre a memória;
• ioports: Portas de entrada e saída;
• modules: Lista todos os módulos do sistema.
• partitions: Lista as partições presentes no sistema;
• pci: Informações sobre slots PCI e AGP.
DICA: Os dispositivos padrão ISA, VESA, EISA e SCSI não permitem o compartilhamento
de uma mesma IRQ, pois não foram projetados para isso. Existem algumas “soluções”,
mas não são muito eficazes.
No processador há endereços de memória reservados que realizam entrada e saída
de informações. Nós os chamamos de portas, portanto, portas de entrada e saída –
I/O – Input/Output. Essas portas têm como objetivo principal a troca de dados entre
o processador e os dispositivos de forma simplificada. Cada dispositivo conectado
à CPU apresenta um endereço de porta I/O que não pode ser compartilhado com
outros dispositivos.
Para visualizar as portas de entrada e saída use o comando a seguir:
# cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0070-0071 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : 0000:00:07.1
0170-0177 : ata_piix
01f0-01f7 : 0000:00:07.1
01f0-01f7 : ata_piix
02f8-02ff : serial
(...)
Lembre-se que os dispositivos PCI permitem o compartilhamento da mesma IRQ,
pois as manipulam de forma diferente. Eles fazem isso mapeando uma interrupção
para uma interrupção normal do sistema que geralmente é interrupção entre a
IRQ 9 e IRQ 12. As interrupções do sistema podem ser visualizadas com o seguinte
comando:
# cat /proc/interrupts
CPU0
0:
280
IO-APIC-edge
1:
4035
IO-APIC-edge
timer
i8042
Tópico 101.1: Identificação e configuração de hardware
4:
7:
8:
9:
12:
14:
15:
16:
19:
21:
1
0
1
0
89242
20969
23503
1
26
0
22:
389
23:
0
NMI:
0
LOC: 476004
RES:
0
CAL:
0
TLB:
0
TRM:
0
SPU:
0
ERR:
0
MIS:
0
13
IO-APIC-edge
IO-APIC-edge
IO-APIC-edge
IO-APIC-fasteoi
IO-APIC-edge
IO-APIC-edge
IO-APIC-edge
IO-APIC-fasteoi
IO-APIC-fasteoi
IO-APIC-fasteoi
parport0
rtc0
acpi
i8042
pata_via
pata_via
nouveau@pci:0000:01:00.0
CS4281
ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb3,
uhci_hcd:usb4
IO-APIC-fasteoi
VIA8233
IO-APIC-fasteoi
eth0
Non-maskable interrupts
Local timer interrupts
Rescheduling interrupts
Function call interrupts
TLB shootdowns
Thermal event interrupts
Spurious interrupts
NOTA: Não confunda o comando cat /proc/ioports que lista as portas I/O (entrada
e saída) com o comando cat /proc/iomem que lista endereçamento de memória para
os dispositivos de entrada e saída. Fique atento, pois aparece em exames LPI.
Assim como temos as portas I/O, temos o DMA que é o acesso direto à memória
que serve para permitir a transferência de dados entre os dispositivos e a memória
sem a intervenção do processador. Isso se dá através de canais (channels) onde a
maioria dos computadores apresenta 2 (dois) controladores de DMA. É importante
que você saiba que temos um total de 8 (oito) canais onde o primeiro controlador
de DMA cuida dos canais 0, 1, 2 e 3 e o segundo cuida dos canais 4, 5, 6 e 7. O
DMA é importante, pois ele livra a carga do processador e resulta em uma rápida
transferência de dados.
Para informações sobre DMA usamos o seguinte comando:
# cat /proc/dma
2: floppy
4: cascade
Comandos relacionados com as informações sobre dispositivos PCI:
• lspci: Lista todos os dispositivos PCI;
• cat /proc/pci: semelhante ao comando lspci;
• setpci: Configura dispositivos PCI;
• pcitweak: Lê, escreve e lista configurações para dispositivos PCI e scanpci:
Faz uma varredura e testa dispositivos PCI;
• /sbin/hotplug: Script que em algumas distribuições fornece informações
sobre dispositivos PCI e USB, assim como módulos ativos. O utilitário hotplug
não é mais usado em algumas distribuições.
14
Tópico 101: Arquitetura do Sistema
Para listar todos os dispositivos PCI:
# lspci -b
00:00.0 Host bridge: VIA Technologies, Inc. VT8377 [KT400/KT600 AGP] Host
Bridge
00:01.0 PCI bridge: VIA Technologies, Inc. VT8235 PCI Bridge
00:0c.0 Multimedia audio controller: Cirrus Logic Crystal CS4281 PCI Audio (rev
01)
00:0e.0 Communication controller: Agere Systems V.92 56K WinModem (rev 02)
00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
(rev 80)
00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
(rev 80)
00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
(rev 80)
00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82)
00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge
00:11.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/
A/C PIPC Bus Master IDE (rev 06)
00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237
AC97 Audio Controller (rev 50)
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
01:00.0 VGA compatible controller: nVidia Corporation NV18 [GeForce4 MX 440 AGP
8x] (rev a2
Para listar todos os dispositivos PCI com detalhamento. Use o parâmetro “-vv” para
mais detalhes (o comando scanpci fornece uma saída resumida; verifique se esse
comando está presente):
# lspci -v
00:00.0 Host bridge: VIA Technologies, Inc. VT8377 [KT400/KT600 AGP] Host
Bridge
Subsystem: ASUSTeK Computer Inc. A7V8X motherboard
Flags: bus master, 66MHz, medium devsel, latency 0
Memory at f8000000 (32-bit, prefetchable) [size=64M]
Capabilities: [80] AGP version 3.5
Capabilities: [c0] Power Management version 2
Kernel driver in use: agpgart-via
00:01.0 PCI bridge: VIA Technologies, Inc. VT8235 PCI Bridge (prog-if 00 [Normal
decode])
Flags: bus master, 66MHz, medium devsel, latency 0
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
Memory behind bridge: f2000000-f3efffff
Prefetchable memory behind bridge: f3f00000-f7ffffff
Capabilities: [80] Power Management version 2
(...)
Lembre-se que podemos usar o comando dmesg com “|” (pipes) para buscar
somente uma determinada informação do hardware como, por exemplo, a placa
de rede do tipo Ethernet (eth0) ou Wireless (wlan0). Veja como poderíamos usar o
comando dmesg para esse tipo de pesquisa:
# dmesg | grep eth0
eth0: VIA Rhine II at 0xef800000, 00:0c:6e:4e:41:ec, IRQ 23.
eth0: MII PHY found at address 1, status 0x7849 advertising 01e1 Link 0000.
eth0: link down
ADDRCONF(NETDEV_UP): eth0: link is not ready
Para mostrar todas as informações de hardware reconhecidas pelo kernel (a
listagem é extensa) usamos o comando dmesg sem nenhum parâmetro. A listagem
Tópico 101.1: Identificação e configuração de hardware
15
é longa, bem detalhada e, acredite, ela vai te ajudar muito no seu dia-a-dia. Porém,
a listagem poderá ser diferente daquela da sua máquina:
# dmesg
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.31.5-127.fc12.i686.PAE ([email protected].
com) (gcc version 4.4.2 20091027 (Red Hat 4.4.2-7) (GCC) ) #1 SMP Sat Nov 7
21:25:57 EST 2009
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
NSC Geode by NSC
Cyrix CyrixInstead
Centaur CentaurHauls
Transmeta GenuineTMx86
Transmeta TransmetaCPU
(...)
O retorno do comando lshal pode ter mais de duas mil linhas dependendo do seu
hardware. Veja a seguir como buscar informações sobre o kernel e a placa de rede
no sistema. O sistema detectado tem uma arquitetura do tipo 686 (confirme com o
comando arch), e o driver da placa de rede é 8139:
# lshal | grep kernel
system.kernel.machine = ‘i686’ (string)
system.kernel.name = ‘Linux’ (string)
system.kernel.version = ‘2.6.31.5-127.fc12.i686.PAE’
system.kernel.version.major = 2 (0x2) (int)
system.kernel.version.micro = 31 (0x1f) (int)
system.kernel.version.minor = 6 (0x6) (int)
(string)
# lshal | grep 8139
udi = ‘/org/freedesktop/Hal/devices/pci_10ec_8139’
info.linux.driver = ‘8139too’ (string)
info.product = ‘RTL-8139/8139C/8139C+’ (string)
info.udi = ‘/org/freedesktop/Hal/devices/pci_10ec_8139’ (string)
pci.product = ‘RTL-8139/8139C/8139C+’ (string)
pci.product_id = 33081 (0x8139) (int)
info.parent = ‘/org/freedesktop/Hal/devices/pci_10ec_8139’ (string)
net.originating_device
=
‘/org/freedesktop/Hal/devices/pci_10ec_8139’
(string)
net.physical_device = ‘/org/freedesktop/Hal/devices/pci_10ec_8139’ (string)
Em algumas situações onde o servidor possui mais de uma interface de rede, o
administrador pode sentir a necessidade de saber qual módulo de rede do kernel
está ligado a essa interface. Veja a seguir como ele poderia saber que o módulo
8139too está ligado à interface de rede eth0:
# lspci -v -s
tail -3 | head
Kernel
Kernel
$(lshal | grep eth0 | head -1 | cut -d” “ -f5 | cut -d”/” -f5) |
-2
driver in use: 8139too
modules: 8139too, 8139cp
Nota: Troque eth0 por eth1, eth2, eth3 etc para saber qual módulo está ligado à interface de rede do tipo
Ethernet. Essa combinação de comando é muito útil quando há interfaces de rede na máquina de diferentes
fabricantes.
16
Tópico 101: Arquitetura do Sistema
Endereçamento de recursos
O endereçamento de recursos dá-se pelas IRQs presentes no sistema, as quais na
plataforma Intel PC têm um total de 16 (dezesseis), na faixa de 0-15, sendo que
a IRQ 2 é responsável pelo cascateamento com o segundo controlador. Algumas
podem ser compartilhadas, mas outras são fixas para o sistema como, por exemplo,
a IRQ 0 (fixa) que é o Timer do Sistema, a IRQ 1 (fixa) que é o teclado e a IRQ 2 (fixa)
que é o controlador de interrupção programável. Essa interrupção é interessante,
pois ela serve como ponte para outras IRQs, mais especificamente as acima de 8
(9..15). As IRQs indisponíveis no sistema são:
• IRQ 0: Timer do sistema, IRQ 1: Teclado;
• IRQ 2: Cascateamento para o segundo controlador, IRQ 6: Unidade de
disquete;
• IRQ 8: Relógio do sistema, IRQ 13: Coprocessador matemático;
• IRQ 14: Controlador IDE primário, IRQ 15: Controlador IDE secundário.
Tabela 101.1.4: Quadro dos endereços dos principais recursos.
Dispositivo
I/O Port
IRQ
DMA
0x03f8
4
---
/dev/ttyS1 (COM 2)
0x02f8
3
---
/dev/ttyS2 (COM 3)
0x03e8
4
---
/dev/ttyS3 (COM 4)
0x02e8
3
---
/dev/lp0 (LPT 1:)
0x378
7
3 (ECP)
/dev/lp0 (LPT 2:)
0x278
5
3 (ECP)
/dev/lp0 (LPT 3:)
0x3bc
7
3 (ECP)
/dev/ttyS0 (COM 1)
/dev/fd0 e /dev/fd1 (A: e B:)
0x3f0, 0x3f7
6
2
/dev/fd2 e /dev/fd3
0x370, 0x377
10
3
0xd0000
10
---
0x220, 0x330, 0x388
11
---
0x1f0, 0x3f6
14
---
0x170-0x177, 0x376
15
---
Ethernet (Placa de rede)
Sound Card (Placa de som)
/dev/hda1 (C:)
/dev/hdc (D: ou CDROM)
Nota: Em kernel antigo, de versão anterior a 2.2.x, em vez de ser /dev/ttyS[0-4], a nomenclatura
será /dev/cua[1-3].
Como podemos ver, não é muito complicado. Tudo é questão de memorização. Por
exemplo, a IRQ 14 é usada pela primeira controladora de discos e não pode ser
compartilhada, e a IRQ 15 é usada pela segunda controladora a qual não pode ser
compartilhada.
Configuração básica de dispositivos SCSI
O conhecimento requerido nessa parte é estar apto a configurar dispositivos SCSI
através da própria BIOS ou de utilitários do sistema Linux. Também é interessante
saber as diferenças entre os diversos tipos de dispositivos SCSI – Small Computer
System Interfaces. O objetivo dos exames inclui a manipulação do BIOS SCSI
para detectar e habilitar as configurações corretas que serão usadas na hora da
inicialização.
Tópico 101.1: Identificação e configuração de hardware
17
A arquitetura SCSI
Dispositivos SCSI podem se comunicar entre si e, geralmente, a comunicação entre
eles é muito rápida, a qual pode variar de 5 MB a 320 MB. Os dispositivos SCSI
são dispositivos para armazenamento de dados, os quais podem ser CD-ROM,
DVD-ROM, HD, Fitas Dat, Scanners, Zip/Jaz Drivers etc. Além da velocidade alta,
podemos ter 8 (oito) dispositivos (incluindo a controladora) por barramento para
uma controladora SCSI 8 bits e 16 (dezesseis) dispositivos (incluindo a controladora)
por barramento para uma controladora SCSI 16 bits.
Para que os dispositivos SCSI funcionem em um sistema Linux, o kernel deve dar
suporte a isso. Felizmente, isso acontece há muito tempo, porém pode acontecer
de ser preciso passar alguns parâmetros adicionais para se obter mais desempenho
desses dispositivos.
Estes dispositivos são classificados em 3 categorias:
• SCSI I: Usa um cabo de 25 condutores para a ligação de periféricos. Normalmente
usado em scanners, impressoras e outros dispositivos;
• SCSI II: Também chamado de Fast SCSI. Usa um cabo de 50 condutores para
a ligação de periféricos. Permite que sejam ligados até 7 periféricos em uma
mesma controladora. É o mais comum encontrado hoje em dia;
• SCSI III: Também chamado de Fast SCSI SE ou LVD. Usa um cabo de 68
condutores para ligação de periféricos. Permite que sejam ligados até 16
periféricos em uma mesma controladora.
É importante saber que um cabo SCSI pode ter o comprimento de até cinco metros
de extensão. Os periféricos SCSI são identificados através de números chamados de
identificador SCSI ou SCSI ID. Estes números vão de 0 a 6 para o padrão SCSI II e
de 0 a 15 para o padrão SCSI III.
DICA: Para discos SCSI, fitas e CDs nenhum software adicional é requerido, uma vez
que o protocolo para esses dispositivos fazem parte do protocolo SCSI. Hoje em dia é só
conectar e reiniciar que o sistema Linux reconhece automaticamente.
Dispositivos SCSI
Já sabemos que o comando cat /proc/pci mostra os dispositivos PCI e o comando
cat /proc/scsi/scsi mostra todos os dispositivos SCSI que atualmente estão
carregados pelo kernel. Observe que os dispositivos têm um identificador que é o
SCSI ID; e ele também aparece nessa listagem. Um ponto importante que é bom
sabermos é que todos os dispositivos USB são tratados como dispositivos SCSI pelo
sistema Linux.
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: VMware, Model: VMware Virtual S
Type:
Direct-Access
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: HL-DT-ST Model: RW/DVD GCC-4320B
Type:
CD-ROM
Host: scsi3 Channel: 00 Id: 00 Lun: 00
Rev: 1.0
ANSI SCSI revision: 02
Rev: 1.00
ANSI SCSI revision: 05
Tópico 101.1: Identificação e configuração de hardware
19
própria controladora monitora o estado do disco e disponibiliza um log numa área
reservada, que pode ser lida pelo sistema operacional.
O comando smartctl pode ser usado para extrair um relatório detalhado sobre o
disco IDE/SCSI presente no sistema. Esse comando pode ser executado em ambos
os tipos de discos IDE (/dev/hd??) e SCSI (/dev/sd??):
# smartctl -i /dev/sda ou smartctl -i /dev/hda
 Informação resumida.
# smartctl -a /dev/sda ou smartctl -a /dev/hda
 Informação detalhada.
smartctl version 5.38 [i386-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF INFORMATION SECTION ===
Model Family:
IBM Travelstar 48GH, 30GN, and 15GN family
Device Model:
IC25N010ATDA04-0
Serial Number:
170172M9962
Firmware Version: DACOA76A
User Capacity:
10,056,130,560 bytes
Device is:
In smartctl database [for details use: -P show]
ATA Version is:
5
ATA Standard is: ATA/ATAPI-5 T13 1321D revision 3
Local Time is:
Tue Aug 6 16:25:45 2013 BRT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
(...)
Nota: Aqui podemos ver que o suporte ao smart está habilitado, caso não tivesse, usaríamos o comando
smartctl -s on /dev/sda, para habilitar nesse tipo de disco.
O parâmetro “-H” exibe um diagnóstico rápido da saúde do disco, fornecido pela
própria controladora:
# smartctl -H /dev/sda | grep result
SMART overall-health self-assessment test result: PASSED
Nota: Em casos de problemas iminentes o resultado será FAILING. Se isso ocorrer, recomenda-se trocar o
disco o mais rápido possível.
O comando hdparm pode ser usado para extrair um relatório detalhado sobre o
disco IDE/SCSI presente no sistema. Esse comando pode ser executado em ambos
os tipos de discos IDE (/dev/hd??) e SCSI (/dev/sd??). Use esse comando com
cuidado, pois é possível ajustar alguns parâmetros do disco, mas se fizer isso errado
poderá ter problemas:
# hdparm -I /dev/sda ou hdparm -I /dev/hda
/dev/sda:
ATA device, with non-removable media
Model Number:
IC25N010ATDA04-0
Serial Number:
170172M9962
Firmware Revision: DACOA76A
Standards:
Used: ATA/ATAPI-5 T13 1321D revision 3
Supported: 5 4 3 & some of 6
Configuration:
Logical
max
current
20
Tópico 101: Arquitetura do Sistema
cylinders
16383
16383
heads
16
16
sectors/track
63
63
-CHS current addressable sectors:
16514064
LBA
user addressable sectors:
19640880
Logical/Physical Sector size:
512 bytes
device size with M = 1024*1024:
9590 MBytes
device size with M = 1000*1000:
10056 MBytes (10 GB)
cache/buffer size = 347 KBytes (type=DualPortCache)
(...)
O comando ainda permite que seja feita uma checagem de performance do disco:
# hdparm -Tt /dev/sda ou hdparm -Tt /dev/hda
/dev/sda:
Timing cached reads:
174 MB in 2.01 seconds = 86.53 MB/sec
Timing buffered disk reads:
24 MB in 3.09 seconds =
7.76 MB/sec
Para uma listagem completa sobre dispositivos SCSI em seu sistema:
# dmesg | grep “sd[a-z]”
sd 0:0:0:0: [sda] 19640880 512-byte logical blocks: (10.0 GB/9.36 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn’t support
DPO or FUA
sda: sda1 sda2
sd 0:0:0:0: [sda] Attached SCSI disk
dracut: Scanning devices sda2 for LVM volume groups
EXT4-fs (sda1): barriers enabled
kjournald2 starting: pid 535, dev sda1:8, commit interval 5 seconds
EXT4-fs (sda1): internal journal on sda1:8
EXT4-fs (sda1): delayed allocation enabled
EXT4-fs (sda1): mounted filesystem with ordered data mode
SELinux: initialized (dev sda1, type ext4), uses xattr
(...)
Nota: Essa listagem pode ter sutis diferenças conforme particionamento do disco, sistema de arquivos etc.
NOTA: Os dispositivos SCSI quando ligados na mesma placa recebem um endereçamento
único que podemos chamar de SCSI ID. Esse código de identificação SCSI é simples e vai
de 0 (zero) a 7 nas placas que operam a 8 bits e de 0 (zero) a 15 nas placas que operam
a 16 bits. O identificador ID 7 é reservado para as próprias placas.
Tabela 101.1.7: Quadro das categorias dos dispositivos SCSI.
Nome
Bits
Descrição
SCSI 1
8
Transferência de 5 MB/s, usa um cabo de 50 pinos.
SCSI 2
8
Transferência de 5 MB/s, usa um cabo de 50 pinos, permite ligação
de até 7 dispositivos na mesma controladora.
Wide SCSI
16
Transferência de 10 MB/s, usa um cabo de 68 pinos.
Fast SCSI
8
Transferência de 10 MB/s, usa um cabo de 50 pinos.
Fast Wide
16
Transferência de 20 MB/s, usa um cabo de 68 pinos (a tecnologia
foi melhorada).
Tópico 101.1: Identificação e configuração de hardware
Nome
Bits
Ultra SCSI
8
21
Descrição
Transferência de 20 MB/s, usa um cabo de 50 pinos.
Ultra Wide SCSI
16
Transferência de 40 MB/s, usa um cabo de 68 pinos, permite
ligação de até 16 dispositivos na mesma controladora. Também
chamada de SCSI 3.
Ultra SCSI 320
2 x 32
Transferência de 320 MB/s, usa um cabo de 68 pinos. Taxa bem
alta para transferências.
Atualmente tem-se um total de 8 (oito) categorias de dispositivos SCSI, sendo que
a parte hardware desses dispositivos não entra no escopo dos exames LPI, mas o
seu conhecimento sim, conforme a descrição. Para endereçar um dispositivo SCSI
em particular, o kernel adiciona alguns detalhes ao adaptador:
• host <número do adaptador>: O adaptador SCSI está em um bus SCSI. O
número inicia-se em 0 (zero) e é alocado aleatoriamente;
• bus <número do canal>: Um simples adaptador SCSI pode ter um número de
bus SCSI adicionado a ele;
• target <número ID>: Controladora no bus SCSI sendo endereçada;
• lun <número da unidade lógica>: Controladora com múltiplos dispositivos
sendo endereçadas.
Assim como o comando lspci lista os dispositivos PCI, o comando lsscsi lista
os dispositivos SCSI em seu sistema. No diretório /proc/scsi você encontrará
informações sobre SCSI; para isso, use o comando cat /proc/scsi/scsi o qual
lista os dispositivos SCSI.
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: VMware, Model: VMware Virtual S
Type:
Direct-Access
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: HL-DT-ST Model: RW/DVD GCC-4320B
Type:
CD-ROM
Host: scsi3 Channel: 00 Id: 00 Lun: 00
Vendor: SMSC
Model: USB FDC
Type:
Direct-Access
Host: scsi4 Channel: 00 Id: 00 Lun: 00
Vendor: Sony
Model: Sony DSC
Type:
Direct-Access
Rev: 1.0
ANSI SCSI revision: 02
Rev: 1.00
ANSI SCSI revision: 05
Rev: 2.10
ANSI SCSI revision: 00
Rev: 6.00
ANSI SCSI revision: 00
Para listar os diretórios dos dispositivos SCSI:
# ls -l /proc/scsi
total 0
dr-xr-xr-x. 2 root
-r--r--r--. 1 root
-r--r--r--. 1 root
dr-xr-xr-x. 2 root
dr-xr-xr-x. 2 root
root
root
root
root
root
0
0
0
0
0
2010-03-18
2010-03-18
2010-03-18
2010-03-18
2010-03-18
15:00
15:00
15:00
15:00
15:00
BusLogic
device_info
scsi
sg
usb-storage
Observe que temos um diretório para dispositivos USB e temos um de número 3.
Para saber que é o tal do dispositivo, basta um simples comando cat. E pelo jeito é
uma unidade de disquete externa:
22
Tópico 101: Arquitetura do Sistema
# ls -l /proc/scsi/usb-storage/
total 0
-rw-r--r--. 1 root root 0 2010-03-18 15:00 3
# cat /proc/scsi/usb-storage/3
Host scsi3: usb-storage
Vendor: Sony
Product: Sony DSC
Serial Number: None
Protocol: 8070i
Transport: Control/Bulk
Quirks: SINGLE_LUN
O kernel do Linux pode tratar dispositivos SCSI de modo transparente, porém,
tome cuidado com alguns dispositivos meio ortodoxos que existem por aí. Procure
documentação para poder obter a melhor performance desses tipos de dispositivos.
Os dispositivos SCSI precisam ser carregados pelo kernel se estiverem em forma
de módulos ou, então, quando da compilação do kernel, a opção para o dispositivo
deve ser inclusa nele.
Para ver os módulos (drive) para dispositivos SCSI que estão carregados. Fique
atento quanto à localização desse arquivo, bem como seu nome conforme a
distribuição em uso:
# cat /etc/modprobe.conf
alias eth0 pcnet32
alias scsi_hostadapter mptspi
alias scsi_hostadapter1 libata
alias scsi_hostadapter2 ata_piix
alias snd-card-0 snd-ens1371
options snd-card-0 index=0
options snd-ens1371 index=0
(...)
Algumas distribuições não usam mais o arquivo /etc/modprobe.conf, mas sim o
diretório /etc/modprobe.d/ onde se localizam vários arquivos de módulos. A ideia
seria “descentralizar” para ficar mais fácil:
# ls -l /etc/modprobe.d/*
-rw-r--r--. 1 root root
52
-rw-r--r--. 1 root root 845
-rw-r--r--. 1 root root
16
conf
-rw-r--r--. 1 root root 5616
-rw-r--r--. 1 root root 473
-rw-r--r--. 1 root root
26
2010-03-18 15:00 /etc/modprobe.d/anaconda.conf
2010-03-18 15:00 /etc/modprobe.d/blacklist.conf
2010-03-18 15:00 /etc/modprobe.d/blacklist-visor.
2010-03-18 15:00 /etc/modprobe.d/dist.conf
2010-03-18 15:00 /etc/modprobe.d/dist-oss.conf
2010-03-18 15:00 /etc/modprobe.d/floppy-pnp.conf
NOTA: Os arquivos /etc/conf.modules (kernel 2.2.x), /etc/modules.conf (kernel 2.4.x) e
/etc/modprobe.conf (kernel 2.6.x), possuem apenas leves mudanças em seus nomes, mas
têm o mesmo objetivo que é o arquivo que informa ao kernel quais módulos carregar.
Configuração básica de placas de expansão
Você deverá estar apto a configurar alguns tipos de cartões/placas em seu sistema
mediante a identificação das informações do seu hardware. Você deverá conhecer
Tópico 101.1: Identificação e configuração de hardware
23
a diferença entre cartões PCI e ISA e como configurá-los em seu sistema. Como
objetivo, os exames incluem a correta configuração pelas IRQs, DMA e portas I/O
dos respectivos cartões, especialmente se houver conflito entre eles. Também está
incluso o uso do isapnp se, por exemplo, a placa em questão for um dispositivo ISA
PNP padrão. O conhecimento a ser usado aqui é muito simples e muito fácil, e já
foram até mesmo comentados e ensinados nesse capítulo. Então, vamos revisá-los.
É importante saber usar os arquivos de informação os quais podem ser usados
junto com os comandos cat, more ou less. Os arquivos de informação são:
/proc/dma, /proc/interrupts, /proc/ioports e /proc/pci. Também é importante
saber usar os comandos de informação direta que são: pnpdump, isapnp, lspci,
lsusb e lsscsi. Para os exames LPI é importante que você não tenha dúvidas
sobre hardware e seus parâmetros com (IRQ, DMA e I/O). Entender como funciona
o diretório /proc e seus arquivos de informação, placas ISA PNP, e como configurar
e ler a hora do sistema e do hardware.
O que vem a ser uma placa de expansão? Simples, é um circuito eletrônico encaixado
na placa mãe que tem por objetivo adicionar novas funcionalidades ao computador.
Esta placa pode ser uma:
• Placa de som: Fornece suporte ao computador para sons, músicas, ligar um
joystick, etc;
• Placa de Fax-modem: Fornece suporte ao computador para enviar/receber fax,
conectar-se à internet, BBS, acesso remoto, bina, etc;
• Placa de rede: Fornece suporte ao computador para permitir a comunicação
com outros computadores em uma rede interna ou na Internet;
• Placa controladora de periféricos: Fornece suporte ao computador para ligar
discos rígidos, unidades de disquete, impressora, mouse, joystick, etc;
• Placa SCSI: Fornece suporte ao computador para ligar unidades de disco rígidos
e periféricos de alto desempenho;
• Placa controladora de scanner: Fornece suporte ao computador para ligar um
scanner externo.
A arquitetura BUS
O BUS é, fisicamente falando, um conjunto de condutores paralelos com a função
de conectar componentes/dispositivos em um computador. Esses componentes
usam o bus para comunicação enviando sinais elétricos de um para outro. Os
componentes que são conectados pelo bus são, por exemplo, a CPU, as memórias
RAM e ROM e os periféricos/dispositivos, como o controlador de interrupção, o
adaptador de vídeo, a interface de disco etc.
Os recursos alocados pelo bus, tanto em PCI quanto ISA, podem ser:
• Endereço de entrada e saída (I/O) para um específico componente como o
endereçamento I/O da própria CPU. Logo já se percebe porque o sistema bus
(I/O) não pode ser compartilhado;
• O endereçamento de memória para ler e escrever em uma determinada
localização na memória. A CPU usa esses endereçamentos de memória;
• As IRQs para quando um dispositivo qualquer precisar de “enlaces” de tempo
da CPU. O bus é inteligente, pois tem o número da interrupção o qual habilita o
kernel a saber qual dispositivo causou uma interrupção;
24
Tópico 101: Arquitetura do Sistema
•
•
Se dois dispositivos compartilham uma mesma IRQ, pode acontecer de haver
uma requisição ao mesmo tempo e o kernel responder a ambas de acordo com
suas prioridades;
O acesso direto à memória (DMA) permite que dispositivos copiem dados
diretamente da memória sem intervenção da CPU. Isso permite uma melhoria
na performance, mas não é possível o compartilhamento de canais DMA entre
esses dispositivos.
A identificação BUS
Através da numeração bus que já conhecemos é possível saber mais um monte de
informações, pois dispositivos PCI incluem alguns recursos de identificação como
parte de sua especificação. Por exemplo, sabemos que para uma placa de rede
funcionar, ela precisa de um módulo no sistema Linux, e esse módulo deve ser lido
pelo kernel. E para pesquisarmos por esse tipo de informação, um dos comandos
mais usados é o comando lspci.
O comando lspci tem a seguinte sintaxe:
# lspci [opções]
As opções mais comuns são (para mais informações use o comando man lspci
ou info lspci):
• -k: Muito útil, pois informa que módulo do kernel está anexado ao dispositivo
PCI;
• -m: Exibe informações com mais detalhes que o simples comando lspci;
• -mm: Semelhante ao “-m”, porém com mais detalhes ainda;
• -n e -nn: Mostra codificação dos dispositivos e codificação, mais informações do
vendedor;
• -s e -d: Usado para pesquisas com mais detalhes sobre um dispositivo
especifico;
• -v: Modo verboso;
Para saber qual módulo (driver) do kernel é responsável pelo dispositivo PCI, por
exemplo. Aqui percebemos que o módulo da interface de rede é o pcnet32.
# lspci -k
(...)
00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237
AC97 Audio Controller (rev 50)
Subsystem: ASUSTeK Computer Inc. A7V8X-X Motherboard
Kernel driver in use: VIA 82xx Audio
Kernel modules: snd-via82xx
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
Subsystem: ASUSTeK Computer Inc. A7V8X-X Motherboard
Kernel driver in use: via-rhine
Kernel modules: via-rhine
01:00.0 VGA compatible controller: nVidia Corporation NV18 [GeForce4 MX 440 AGP
8x] (rev a2)
Kernel modules: nouveau
Os módulos no sistema Linux terminam em “.ko” ou “.o”. Veja como saber onde ele
está, o que nesse caso descobrimos que está em ../../drivers/net:
# locate pcnet32 | egrep “.ko$|.o$”
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/drivers/net/pcnet32.ko
Tópico 101.1: Identificação e configuração de hardware
25
Para saber como essa interface de rede trabalha quando da transmissão/recepção,
basta usar o comando modinfo com um filtro simples de comando grep. Veja:
# modinfo $(locate pcnet32 | egrep “.ko$|.o$”) | grep “plex”
parm:
full_duplex:pcnet32 full duplex setting(s) (1) (array of int
Para o comando anterior, se desejar as informações técnicas do dispositivo, basta
retirar o filtro grep:
# modinfo $(locate pcnet32 | egrep “.ko$|.o$”)
filename:
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/drivers/net/
pcnet32.ko
license:
GPL
description:
Driver for PCnet32 and PCnetPCI based ethercards
author:
Thomas Bogendoerfer
srcversion:
BE4E52164A7079455A3B16D
alias:
pci:v00001023d00002000sv*sd*bc02sc00i*
alias:
pci:v00001022d00002000sv*sd*bc*sc*i*
alias:
pci:v00001022d00002001sv*sd*bc*sc*i*
depends:
mii
vermagic:
2.6.31.5-127.fc12.i686.PAE SMP mod_unload 686
parm:
debug:pcnet32 debug level (int)
parm:
max_interrupt_work:pcnet32 maximum events handled per interrupt
(int)
parm:
rx_copybreak:pcnet32 copy breakpoint for copy-only-tiny-frames
(int)
parm:
tx_start_pt:pcnet32 transmit start point (0-3) (int)
parm:
pcnet32vlb:pcnet32 Vesa local bus (VLB) support (0/1) (int)
parm:
options:pcnet32 initial option setting(s) (0-15) (array of
int)
parm:
full_duplex:pcnet32 full duplex setting(s) (1) (array of int)
parm:
homepna:pcnet32 mode for 79C978 cards (1 for HomePNA, 0 for
Ethernet, default Ethernet (array of int)
O código do dispositivo de interface de rede é 00:12.00 (para esse hardware); e
para saber informações mais específicas sobre ele podemos fazer uma pesquisa
direta. Nos exemplos a seguir poderíamos usar também 12:0:
# lspci -s 12.0  Pesquisa direta sem detalhes.
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
# lspci -s 12.0 -v  Pesquisa direta com detalhes.
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
Subsystem: ASUSTeK Computer Inc. A7V8X-X Motherboard
Flags: bus master, stepping, medium devsel, latency 32, IRQ 23
I/O ports at a800 [size=256]
Memory at ef800000 (32-bit, non-prefetchable) [size=256]
Capabilities: [40] Power Management version 2
Kernel driver in use: via-rhine
Kernel modules: via-rhine
Usando o comando lspci, podemos consultar informações dos tipos de módulos
que o kernel poderá trabalhar.
# lspci
00:00.0 Host bridge: VIA Technologies, Inc. VT8377 [KT400/KT600 AGP] Host Bridge
00:01.0 PCI bridge: VIA Technologies, Inc. VT8235 PCI Bridge
00:0c.0 Multimedia audio controller: Cirrus Logic Crystal CS4281 PCI Audio (rev 01)
26
Tópico 101: Arquitetura do Sistema
00:0e.0 Communication controller: Agere Systems V.92 56K WinModem (rev 02)
00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
(rev 80)
00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
(rev 80)
00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
(rev 80)
00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82)
00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge
00:11.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/
A/C PIPC Bus Master IDE (rev 06)
00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237
AC97 Audio Controller (rev 50)
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
01:00.0 VGA compatible controller: nVidia Corporation NV18 [GeForce4 MX 440 AGP
8x] (rev a2)
Conseguiu entender até aqui? Bom, e agora? Qual é o próximo passo? Use o lspci
-n para saída resumida.
# lspci
00:00.0
00:01.0
00:0c.0
00:0e.0
00:10.0
00:10.1
00:10.2
00:10.3
00:11.0
00:11.1
00:11.5
00:12.0
01:00.0
-n
0600:
0604:
0401:
0780:
0c03:
0c03:
0c03:
0c03:
0601:
0101:
0401:
0200:
0300:
1106:3189
1106:b168
1013:6005
11c1:048c
1106:3038
1106:3038
1106:3038
1106:3104
1106:3177
1106:0571
1106:3059
1106:3065
10de:0181
(rev
(rev
(rev
(rev
(rev
(rev
01)
02)
80)
80)
80)
82)
(rev
(rev
(rev
(rev
06)
50)
74)
a2)
Para uma listagem resumida, mas com informações mais úteis como o código do
vendedor e dos dispositivos:
# lspci -nn
00:00.0 Host bridge [0600]: VIA Technologies, Inc. VT8377 [KT400/KT600 AGP] Host
Bridge [1106:3189]
00:01.0 PCI bridge [0604]: VIA Technologies, Inc. VT8235 PCI Bridge
[1106:b168]
00:0c.0 Multimedia audio controller [0401]: Cirrus Logic Crystal CS4281 PCI
Audio [1013:6005] (rev 01)
00:0e.0 Communication controller [0780]: Agere Systems V.92 56K WinModem
[11c1:048c] (rev 02)
00:10.0 USB Controller [0c03]: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1
Controller [1106:3038] (rev 80)
00:10.1 USB Controller [0c03]: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1
Controller [1106:3038] (rev 80)
00:10.2 USB Controller [0c03]: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1
Controller [1106:3038] (rev 80)
00:10.3 USB Controller [0c03]: VIA Technologies, Inc. USB 2.0 [1106:3104] (rev
82)
00:11.0 ISA bridge [0601]: VIA Technologies, Inc. VT8235 ISA Bridge [1106:3177]
00:11.1 IDE interface [0101]: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/
VT823x/A/C PIPC Bus Master IDE [1106:0571] (rev 06)
Tópico 101.1: Identificação e configuração de hardware
27
00:11.5 Multimedia audio controller [0401]: VIA Technologies, Inc. VT8233/
A/8235/8237 AC97 Audio Controller [1106:3059] (rev 50)
00:12.0 Ethernet controller [0200]: VIA Technologies, Inc. VT6102 [Rhine-II]
[1106:3065] (rev 74)
01:00.0 VGA compatible controller [0300]: nVidia Corporation NV18 [GeForce4 MX
440 AGP 8x] [10de:0181] (rev a2)
Para uma listagem detalhada de todos os dispositivos, porém, aqui só tem o que
nos interessa no momento:
# lspci -vvv
(...)
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
Subsystem: ASUSTeK Computer Inc. A7V8X-X Motherboard
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErrStepping+ SERR- FastB2B- DisINTxStatus: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort<MAbort- >SERR- <PERR- INTxLatency: 32 (750ns min, 2000ns max), Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 23
Region 0: I/O ports at a800 [size=256]
Region 1: Memory at ef800000 (32-bit, non-prefetchable) [size=256]
Capabilities: [40] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=0 PMEKernel driver in use: via-rhine
Kernel modules: via-rhine
(...)
DICA: Os módulos no sistema Linux possuem a extensão “.ko” ou “.o” e, geralmente,
residem dentro do diretório /lib/modules/versão_do_kernel/kernel/drivers/. Eles
são carregados dinamicamente com os comandos insmod ou modprobe e podem ser
declarados no arquivo /etc/modprobe.conf.
Foi usado aqui como exemplo um cartão/placa de rede modelo Pcnet32 como única
placa de rede. Para que ele seja carregado automaticamente, umas das alternativas
seria usar uma chamada para o carregamento desse módulo no arquivo /etc/
modprobe.conf. Então, sua interface era a eth0. Quando estiver mais de uma interface
de rede presente no sistema, a próxima interface é eth1, e assim por diante.
O conteúdo do arquivo modprobe.conf muda conforme o seu hardware e conforme
a distribuição, e em raros casos (antes era comum), o administrador precisará editar
esse arquivos e criar manualmente as entradas para os módulos (drivers) para o
sistema funcionar adequadamente com determinado tipo de hardware. Veja um
exemplo desse arquivo em uma distribuição Red Hat:
# ls /etc/modprobe.conf
(...)
alias usb-uhci uhci-hcd
alias usb-ohci ohci-hcd
alias uhci uhci-hcd
alias
alias
alias
alias
char-major-116-* snd
sound-service-*-0 snd-mixer-oss
sound-service-*-1 snd-seq-oss
sound-service-*-3 snd-pcm-oss
28
Tópico 101: Arquitetura do Sistema
alias sound-service-*-8 snd-seq-oss
alias sound-service-*-12 snd-pcm-oss
install
sound-slot-*
slot[_-]}
/sbin/modprobe
snd-card-${MODPROBE_MODULE##sound[_-]
alias nfs4 nfs
alias rpc_pipefs sunrpc
alias rpc_svc_gss_pipefs sunrpc
install eth1394 /bin/true
(...)
Nota: Dependendo da distribuição e do que foi instalado e o tipo de hardware, esse arquivo apresenta sutis
diferenças.
Algumas distribuições atuais mudaram a ideia desse arquivo, pois agora usam o
diretório /etc/modprobe.d/ e, dentro dele, os arquivos de módulos. Dessa forma,
ficou menos centralizado para oferecer um melhor controle:
# ls /etc/modprobe.d/
anaconda.conf
blacklist-visor.conf
blacklist.conf dist-alsa.conf
dist.conf
dist-oss.conf
floppy-pnp.conf
openfwwf.conf
Nota: Dependendo da distribuição e do que foi instalado e o tipo de hardware, outros arquivos poderão estar
presente nesse diretório.
Módulos para placas de rede existem aos milhares para Linux, para carregar via
linha de comando um módulo para uma placa de rede como o módulo via-rhine,
por exemplo. Esses comandos carregam o módulo para a memória e o kernel faz o
devido tratamento. Geralmente, quando usamos o comando isnmod, precisamos
passar o caminho completo, e com o comando modprobe, apenas o nome do
módulo:
# insmod /lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/drivers/net/via-rhine.
ko ou
# modprobe via-rhine
Para verificar via linha de comando se esse módulo está carregado:
# lsmod | grep rhine
via_rhine
mii
19872
4028
0
1 via_rhine
NOTA: O comando rmmod <módulo> remove, ou tenta remover, um módulo da
memória. Tome muito cuidado com ele, pois se você remover um módulo errado terá
sérios problemas, principalmente se esse módulo for um módulo de interface de rede.
Todas as suas conexões de rede estarão seriamente comprometidas.
Quando o módulo já faz parte da instalação do sistema, tudo funciona a mil
maravilhas; mas e se o módulo existe, porém não veio com o sistema? Bom, aí
precisaremos ler as instruções na página do desenvolvedor de como fazer o
procedimento correto. Lembre-se que uma entrada no arquivo /etc/modules.conf
ou /etc/conf. modules ou /etc/modprobe.conf para esse módulo deverá existir, e o
módulo deverá ser copiado em um local padrão do sistema para que os comandos
Tópico 101.1: Identificação e configuração de hardware
29
de pesquisa e geração de cache funcionem. Só para exemplificar, usaremos o
módulo pcnet32.ko, o qual deverá ser copiado no local correto.
E na sequência, execute o comando depmod -va para que seja criado/verificado o
arquivo /lib/modules/2.6.29.4-167.fc11.i686.PAE/modules.dep se o módulo é mais
novo ou não, e para que ele possa estar ativo no sistema na próxima inicialização.
A função desse arquivo é guardar o caminho para os diversos módulo do sistema.
Essa listagem é para o kernel PAE presente no sistema:
# grep ‘rhine’ /lib/modules/2.6.29.4-167.fc11.i686.PAE/modules.dep --color
kernel/drivers/net/via-rhine.ko: kernel/drivers/net/mii.ko
Agora, por último (faça a pesquisa anteriormente mostrada para saber como
identificar o número/código do dispositivo PCI), usaremos o comando lspci -s
12.0 -v que vai listar mais informações sobre a interface de rede (identificação
12:0):
# lspci -s 12:0 -v ou lspci -s 00:12.0 -v  Pesquisa direta com detalhes.
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)
Subsystem: ASUSTeK Computer Inc. A7V8X-X Motherboard
Flags: bus master, stepping, medium devsel, latency 32, IRQ 23
I/O ports at a800 [size=256]
Memory at ef800000 (32-bit, non-prefetchable) [size=256]
Capabilities: [40] Power Management version 2
Kernel driver in use: via-rhine
Kernel modules: via-rhine
Nota: Se desejar apenas a linha informativa, retire o parâmetro “-v”.
Se tudo funcionou, poderemos consultar as informações quando do procedimento
de inicialização através do comando dmesg.
# dmesg | grep “via-rhine”
via-rhine.c:v1.10-LK1.4.3 2007-03-06 Written by Donald Becker
via-rhine 0000:00:12.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23
Os dispositivos PCI são identificados por um único ID como se fosse um endereço
MAC de uma placa de rede. As informações sobre essa identificação, dependendo
da distribuição, podem ficar em diretórios um pouco diferentes:
• /usr/share/pci.ids: Para uma distribuição SuSE;
• /usr/share/hwdata/pci.ids: Para uma distribuição Red Hat ou Debian;
• /usr/share/mics/pci.ids: Uma distribuição Debian mais antiga.
Os arquivos anteriores podem ser visualizados com o comando cat, more ou less,
e o comando update-pciids faz uma atualização desses arquivos da internet
baseado na hora atual:
# update-pciids
--15:00:00-- http://pciids.sourceforge.net/pci.ids.bz2
=> `/usr/share/pci.ids.new’
Resolving pciids.sourceforge.net...
Algumas informações que são necessárias saber são:
• O suporte Linux para PCI (Bus ID=00) é completo e não precisa de configuração
manual;
30
Tópico 101: Arquitetura do Sistema
•
•
•
•
•
O AGP PCI bus (Bus ID=01) é reservado para cartões/placa de vídeo e tem
apenas um slot (encaixe) feito para transferência de dados entre chip de vídeo e
o PC;
O sistema de endereçamento para o bus PCI segue a mesma lógica do
endereçamento SCSI: BusNo:SlotNo:FunçãoNo (Dispositivo No);
O comando lspci é usado para listar dispositivos PCI no sistema e também
retorna o fabricante a partir do arquivo /usr/share/pci.ids. Se usarmos o
parâmetro “-n” não será feita a leitura a partir desse arquivo.
A partir do kernel 2.1.82 há mais informações sobre os dispositivos PCI no
diretório /proc/pci;
As portas seriais, conhecidas como COM 1, COM 2 etc no sistema Linux, são
referenciadas como ttyS0, ttyS1 etc, e as impressoras paralelas, como lpt1, lpt2,
são referenciadas como lp0, lp1 etc.
Configuração básica de dispositivos de comunicação
Os conhecimentos para essa parte são praticamente os mesmos usados para a
configuração do modem, com a diferença que aqui tem mais algumas observações
importantes. Os mesmos objetivos requisitados para a configurações do modem
são requisitados aqui e mais alguma complementação sobre protocolos.
Funcionamento de uma conexão PPP
As redes como, por exemplo, a ethernet, frame relay e ATM conectam um número
muito grande de computadores entre si, e cada computador conectado nessa rede
pode trocar informações com diferentes tipos de computadores simultaneamente
sobre a mesma conexão. Uma das formas mais comuns de interconexão é a ponto
a ponto (p2p), e um exemplo disso é o seu computador conectado ao computador
do seu provedor de acesso. E para esse tipo de conexão há vários métodos para
disponibilizá-las:
• Modem analógico: Usando uma linha telefônica do computador para o
computador do provedor onde os modems podem “conversar” entre si, e dessa
“conversa” passa a existir uma conexão;
• Modem ISDN: É praticamente a mesma ideia que o modem analógico, porém
aqui o sinal é digital;
• Modem DSL: Aqui já é um pouco mais complexo, pois aproveitamos a mesma
banda de voz para usar dados. Esses modems são sofisticados e podem até
mesmo ter implementações de Firewall embutida neles.
A função elementar do modem é prover um canal de comunicação em duas direções,
e para isso, pode ser usado um protocolo de comunicação ponto a ponto (point
to point) ou simplesmente PPP, o qual usa protocolos de rede para comunicação.
Quando dois computadores estão interligados usando o protocolo PPP, um processo
é executado, o qual informações são enviadas para o kernel para processamento de
rede.
Modems analógicos
O protocolo PPP em modems analógicos requer autenticação em ambos os lados
da conexão ponto a ponto. Geralmente funciona assim: É iniciada uma discagem
Tópico 101.1: Identificação e configuração de hardware
31
para o provedor (ISP – Internet Solution Provider) e lá, então, o servidor requisita
a autenticação. Se estiver tudo certo, completa-se a conexão e um processo pppd
passa a existir.
Esse tipo de modem geralmente é configurado da seguinte maneira:
• Usa uma das portas de comunicação do sistema como, por exemplo, /dev/ttyS0
ou /dev/ttyS1;
• Se o modem for WinModem, um módulo específico para o kernel deverá ser
carregado antes disso. Se for modem interno, deverá ser configurado com o
comando setserial;
• Será necessário o telefone do provedor para discar;
• Um nome de usuário (login) e uma senha (password) válida;
DICA: Depois que esses requisitos estiverem todos certos, pode-se usar inúmeros
programas para configurar parâmetros extras do protocolo PPP como o wvdial, kppp
etc. No entanto, a explicação desses utilitários está fora do escopo desse material.
Há na maioria dos sistemas um script que podemos chamá-lo com o comando /
sbin/ifup ppp0 para ativar o link de comunicação. Como seria uma conexão usando
então o processo pppd? Simples, mas é preciso fazer tudo à mão. Vamos seguir o
procedimento para ativar um link de comunicação com o provedor: Cria-se um
arquivo texto chamado “provedor” no diretório /etc/ppp/peers/. Esse arquivo
vai ser consultado quando executarmos o comando pppd call provedor. O
conteúdo dele é:
/dev/cua0 38400 crtscts
connect "chat /etc/ppp/lpi-isp/conectar"
user adilson
 /dev/cua0 pode ser /dev/ttyS0.
Depois, cria-se um diretório chamado “lpi-isp” dentro do diretório /etc/ppp, e
depois cria-se um arquivo chamado “conectar” (chamado de chap script) nesse
diretório com o seguinte conteúdo:
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "BUSY"
ABORT "Username/Password incorreto..."
"" "at"
OK "at&d0&c1"
OK "atdt11123456789"  Telefone a ser chamado.
CONNECT
Agora, dependendo do modo de autenticação que vai ser usado, o arquivo /etc/ppp/
chap-secrets ou /etc/ppp/pap-secrets deve conter o nome do usuário e a senha.
Se quiser, pode-se colocar a mesma informação de um em outro. Esses arquivos
apresentarão o seguinte conteúdo (nome de login e senha):
"adilson"
*
"lpi2010"
Agora é só executar o comando pppd call provedor. Dependendo de como
está configurado o syslogd vai ser gerado uma saída de log em /var/log/messages.
32
Tópico 101: Arquitetura do Sistema
Espere pela conexão, e depois navegue à vontade. O protocolo CHAP é mais seguro
que o PAP porque é criptografado, enquanto o outro não.
Modems DSL
Esses modems, que são muito populares, usam uma técnica chamada PPP sobre
Ethernet, ou pppoe. Nos CDs de sua distribuição instale esse pacote para ter os
utilitários corretos. Seu funcionamento é simples e é preciso que a placa de rede
esteja configurada corretamente, e então é só seguir os passos para ter um link de
comunicação com o provedor.
Dependendo da distribuição a ser usada, cada uma pode trazer seus próprios
utilitários de configuração; e após instalados os pacotes necessários (geralmente
quase todos) rp-pppoe-gui-[versão], rp-pppoe-server-[versão] e rp-pppoe[versão], estará presente também alguns scripts de conexão:
• adsl-connect, adsl-setup: Usado para conectar e configurar a autenticação em
uma conta ADSL;
• adsl-start: Inicia uma conexão;
• adsl-status: Mostra status da conexão;
• adsl-stop: Para a conexão.
Em algumas distribuições os comandos todos começam com adsl; mas cuidado,
pois na maioria das distribuições os comandos iniciam por ppp, sendo os comandos
adsl-start e adsl-stop links para os comandos ppp responsáveis. Veja:
# ppp <tab><tab>
pppd
pppoe pppoe-discovery
pppoe-server
pppoe-sniff
p p p o e status
pppstats
pppdump
pppoe-connect
pppoe-relay
pppoe-setup
pppoe-start
pppoe-stop ppp-watch
# file $(which adsl-start)
/usr/sbin/adsl-start: symbolic link to `../../sbin/pppoe-start’
# file $(which adsl-stop)
/usr/sbin/adsl-stop: symbolic link to `../../sbin/pppoe-stop’
Um utilitário, o tkpppoe, para o modo gráfico para o pacote pppoe poderá ser
encontrado em http://www.roaringpenguin.com/pppoe, caso sua distribuição não
o tenha.
Configuração básica de dispositivos USB
Você deverá estar apto a ativar e compreender o suporte a dispositivos USB –
Universal Serial Bus em um sistema Linux, o que é de certa forma muito simples
de ser feito. Nessa parte vamos aprender como fazer a seleção correta do chipset
USB e os módulos correspondentes. Também vamos ter uma base do modelo de
camada da arquitetura básica de dispositivos USB. O uso correto dos comandos
para dispositivos USB e a compreensão dos módulos e utilitários de acordo com a
versão do kernel.
Tópico 101.1: Identificação e configuração de hardware
33
A arquitetura USB
O USB – Universal Serial Bus foi concebido com o intuito de facilitar a conexão
de periféricos existentes para computador. Entre eles, estão os dispositivos mais
comuns como teclados, mouses, impressoras e webcams, e placas de rede com fio
ou wireless. Mas espere ver por aí muita coisa exótica como caixas de som, mini
ventiladores, e, acredite, tem até barbeador e mini lanternas. Estou falando sério!
Cada vez mais popular, o USB é uma boa solução para unificar e facilitar a adição
de periféricos a um computador.
Atualmente, a detecção e a configuração de dispositivos USB são feitas
automaticamente através do subsistema hotplug e udev. Quando um dispositivo
é conectado ao barramento USB da máquina, o próprio kernel o reconhece e
envia uma mensagem ao programa hotplug/udev, que se encarrega de carregar
os módulos necessários ao seu funcionamento, bem como executar outras tarefas
como, por exemplo, o acerto de permissões.
Eventualmente, claro, pode haver um dispositivo muito recente que pode não ser
suportado pelo kernel, aí você terá que arregaçar as mangas e recompilar o kernel.
Mas felizmente muitos fabricantes têm optado por padrões como, por exemplo, o
usb-storage, o que torna o periférico totalmente suportado. O suporte ao padrão
USB em sistemas Linux está presente desde o kernel 2.2.18, mas é a partir do
kernel 2.4 que o suporte a esse padrão melhorou muito. E a ideia do padrão USB
veio como uma mão na roda para todos os tipos de usuários; e quem for do tempo
do kernel 2.0, sabe do que estou falando.
O padrão é muito flexível e muito funcional, basta plugar um dispositivo USB (mouse,
cd-rom, scanner, câmera, pendrive, players, teclado, unidades de disquetes e fitas
etc) que o sistema já detecta automaticamente. O barramento USB pode operar em
velocidades baixas de 1,5 MB/s até velocidades altas como 12 MB/s.
A configuração de dispositivos USB no sistema Linux é extremamente simples e
pode ser feito de duas maneiras: a frio e a quente onde:
• A frio (coldplug): Conecta-se todos os dispositivos USB, por exemplo, ligase o micro, e tudo vai sendo detectado automaticamente. Outros exemplos
de dispositivos coldplug são placas PCI, ISA, e dispositivos IDE e pentes de
memória;
• A quente (hotplug): Depois do micro ligado, conecta-se os dispositivos e aguardase um tempo para que o sistema detecte um novo hardware. Seu funcionamento
é simples. Assim que um dispositivo é conectado ou desconectado, o hotplug
dispara um evento que atualiza os arquivos de dispositivos em /dev (diretório
de dispositivos) e faz o devido reconhecimento do tipo de dispositivo.
NOTA: No entanto, o padrão USB 1.0 também evoluiu e, em 1999, foi anunciada a versão
2.0 muito mais rápida que a anterior. O padrão USB 1.0 permitia que 127 (cento e vinte
e sete) dispositivos fossem conectados ao mesmo tempo e operava a velocidades de 12
Mbit/s. Porém, na prática, a velocidade máxima não poderia ultrapassar 8,5 Mbit/s, nem
mesmo sobre as melhores condições. Com a versão 2.0 do padrão USB a velocidade
mudou bastante e hoje se trabalha na velocidade de 480 Mbit/s, porém, a tecnologia USB
3.0 (xHCI) promete ser 10 (dez) vezes mais rápida que o USB 2.0.
34
Tópico 101: Arquitetura do Sistema
Para quem ainda não sabe, o padrão USB foi desenvolvido em 1994, em conjunto
com a Compac, Intel, NEC e Microsoft, e tinha os seguintes objetivos: a) facilidade
de uso, b) PCs baseados em telefonia devem ser possíveis e previstos, e c) portas de
expansão, assim você não fica limitado ao número físico de portas do computador.
Para ver como foi reconhecido seus dispositivos USB, use o comando:
# dmesg | grep usb | uniq
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: OHCI Host Controller
usb usb1: Manufacturer: Linux 2.6.31.5-127.fc12.i686.PAE ohci_hcd
usb usb1: SerialNumber: 0000:00:01.2
usb usb1: configuration #1 chosen from 1 choice
usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb2: Product: OHCI Host Controller
usb usb2: Manufacturer: Linux 2.6.31.5-127.fc12.i686.PAE ohci_hcd
usb usb2: SerialNumber: 0000:00:01.3
usb usb2: configuration #1 chosen from 1 choice
usbcore: registered new interface driver hiddev
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
usb 1-1: new low speed USB device using ohci_hcd and address 2
usb 1-1: New USB device found, idVendor=046d, idProduct=c016
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: Optical USB Mouse
usb 1-1: Manufacturer: Logitech
usb 1-1: configuration #1 chosen from 1 choice
input: Logitech Optical USB Mouse as /devices/pci0000:00/0000:00:01.2/usb1/11/1-1:1.0/input/input2
generic-usb 0003:046D:C016.0001: input,hidraw0: USB HID v1.10 Mouse [Logitech
Optical USB Mouse] on usb-0000:00:01.2-1/input0
SELinux: initialized (dev usbfs, type usbfs), uses genfs_contexts
(...)
Agora foi anexada uma câmera digital e executado novamente o comando, e no final
da listagem já está registrado o reconhecimento desse hardware. Acompanhe:
# dmesg | grep usb | uniq
(...)
usbcore: registered new interface driver hiddev
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
usb 1-6: new high speed USB device using ehci_hcd and address 6
usb 4-2: new full speed USB device using uhci_hcd and address 2
usb 4-2: not running at top speed; connect to a high speed hub
usb 4-2: New USB device found, idVendor=054c, idProduct=0010
usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 4-2: Product: Sony DSC
usb 4-2: Manufacturer: Sony
usb 4-2: configuration #1 chosen from 1 choice
usbcore: registered new interface driver usb-storage
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
usb-storage: device scan complete
Tópico 101.1: Identificação e configuração de hardware
35
Agora identificamos esse hardware através do comando lsusb que é semelhante
ao lspci. Esse comando lsub possui alguns parâmetros de pesquisa:
# lsusb
# lsusb
Bus 001 Device 001: ID 1d6b:0002
Bus 004 Device 002: ID 054c:0010
Cybershot/Mavica Digital Camera
Bus 004 Device 001: ID 1d6b:0001
Bus 003 Device 001: ID 1d6b:0001
Bus 002 Device 001: ID 1d6b:0001
Linux Foundation 2.0 root hub
Sony Corp. DSC-S30/S70/S75/F505V/F505/FD92/W1
Linux Foundation 1.1 root hub
Linux Foundation 1.1 root hub
Linux Foundation 1.1 root hub
Para listar informações mais detalhadas sobre um dispositivo USB, nesse caso
uma máquina digital da Sony anexada como mass storage (comportamento como
pendrive), poderemos usar o comando lsusb -s bus:num -v, assim:
# lsusb -s 002.002 -v
Bus 004 Device 002: ID 054c:0010 Sony Corp. DSC-S30/S70/S75/F505V/F505/FD92/W1
Cybershot/Mavica Digital Camera
Device Descriptor:
bLength
18
bDescriptorType
1
bcdUSB
2.00
bDeviceClass
0 (Defined at Interface level)
bDeviceSubClass
0
bDeviceProtocol
0
bMaxPacketSize0
64
idVendor
0x054c Sony Corp.
idProduct
0x0010 DSC-S30/S70/S75/F505V/F505/FD92/W1 Cybershot/Mavica
Digital Camera
bcdDevice
6.00
iManufacturer
1 Sony
iProduct
2 Sony DSC
(...)
O comando ls -F /proc/bus/usb/ lista os dispositivos conectados ao sistema,
e nesse diretório podem ser vistos dois arquivos (devices e drivers). Esses arquivos
contêm informações sobre os dispositivos conectados ao sistema. Experimente
usar o comando cat /proc/bus/usb/devices ou cat /proc/bus/usb/
drivers para fazer uma análise.
# ls -F /proc/bus/usb/
001/ 002/ 003/ 004/
devices
Veja como podemos identificar o hardware da máquina digital. No arquivo devices
estarão presentes todos os dispositivos USB abertos no sistema:
# cat /proc/bus/usb/devices
(...)
T: Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=054c ProdID=0010 Rev= 6.00
S: Manufacturer=Sony
S: Product=Sony DSC
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=08(stor.) Sub=ff Prot=01 Driver=usb-storage
36
Tópico 101: Arquitetura do Sistema
E: Ad=01(O) Atr=02(Bulk) MxPS=
E: Ad=82(I) Atr=02(Bulk) MxPS=
E: Ad=83(I) Atr=03(Int.) MxPS=
(...)
64 Ivl=0ms
64 Ivl=0ms
8 Ivl=255ms
DICA: O diretório /proc/bus/usb vai apresentar as entradas numeradas (001, 002, 003
...) para cada dispositivo USB no sistema. Assim, para listar o conteúdo do dispositivo 1,
usamos o comando ls /mnt/usb-storage/device-0/, por exemplo. A maioria das
distribuições está montada nos dispositivos USB no diretório /media.
A arquitetura dos módulos USB
Embora ainda não seja exigido como conhecimento obrigatório diretamente nos
exames LPI, é extremamente importante que saibamos como que é o funcionamento
da arquitetura dos módulos USB, os quais são simples de se entender.
Os principais módulos USB são:
• HID (hid.o) Human Interface Device: Dispositivo para interface humana;
• Input Core (input.o): Dispositivos para entradas é somente USB;
• keyboard (usbkbd.o): Módulo para teclado;
• Mouse (usbmouse.o): Módulo para mouse;
• Joystick (joydev.o): Módulo para joystick;
• Impressora (printer.o): Módulo para impressora;
• Armazenamento (usb-storage.o): Módulo para dispositivos de armazenamento
como pendrive, floppy, máquina digital, mp3 e etc.
Os módulos no sistema Linux têm o sufixo “.o” ou “.ko” e podem estar em diversos
locais de seu sistema. Geralmente estão em /lib/modules, alguns estão em /sys/
module, e outros estão em /usr/lib etc. Mas os módulos que nos interessam ficam
em /lib/modules/2.6.29.4-167.fc11.i686.PAE/kernel/drivers/usb/, sendo 2.6.29,
nesse caso, o kernel do sistema. Para as impressoras USB, quando o módulo
printer.o for carregado, em /dev/usb/lp0 vai ter a respectiva entrada para ela.
Para uma lista completa dos módulos USB em seu sistema, use o comando find,
mas lembre-se que o seu sistema pode ter outros módulos. Se retirarmos “| fmt -w
80”, teremos a listagem de um módulo por linha.
# find /lib/modules/ -iname “*usb*” -exec basename {} \; | fmt -w 80
usb snd-usb-caiaq.ko snd-usb-lib.ko snd-usb-usx2y.ko snd-usb-us122l.ko
snd-usb-audio.ko i2400m-usb.ko at76c50x-usb.ko p54usb.ko usb8xxx.ko
ar9170usb.ko rt2x00usb.ko rt73usb.ko rt2500usb.ko rt2800usb.ko
libertas_tf_usb.ko irda-usb.ko usb plusb.ko usbnet.ko pcwd_usb.ko bfusb.ko
btusb.ko hfcsusb.ko usb_gigaset.ko i1480-dfu-usb.ko i2c-tiny-usb.ko
at76_usb at76_usb.ko usbtouchscreen.ko lirc_igorplugusb.ko lirc_mceusb.ko
lirc_ttusbir.ko ttusb-budget dvb-ttusb-budget.ko b2c2-flexcop-usb.ko smsusb.ko
dvb-usb dvb-usb-dw2102.ko dvb-usb-gp8psk.ko dvb-usb-m920x.ko dvb-usb-ce6230.ko
dvb-usb-digitv.ko dvb-usb-au6610.ko dvb-usb-dibusb-common.ko dvb-usb-a800.ko
dvb-usb.ko dvb-usb-vp7045.ko dvb-usb-dib0700.ko dvb-usb-vp702x.ko
dvb-usb-dtv5100.ko dvb-usb-gl861.ko dvb-usb-cinergyT2.ko dvb-usb-umt-010.ko
dvb-usb-ttusb2.ko dvb-usb-af9015.ko dvb-usb-dibusb-mc.ko dvb-usb-dtt200u.ko
dvb-usb-opera.ko dvb-usb-anysee.ko dvb-usb-af9005.ko dvb-usb-cxusb.ko
dvb-usb-dibusb-mb.ko dvb-usb-af9005-remote.ko dvb-usb-nova-t-usb2.ko ttusb-dec
(...)
Tópico 101.1: Identificação e configuração de hardware
37
Aqui tivemos uma listagem de mais de setenta módulos para dispositivos USB.
Esses módulos são os módulos modernos por apresentarem o sufixo “.ko” no nome
do arquivo, porém, em kernel 2.2 o sufixo será “.o”. O carregamento dinâmico
dos módulos se dá quando inserimos dispositivos USB, nesse ponto dois sistemas
estarão disponíveis dependendo da versão do kernel em uso:
hotplug: USB, PCMCIA e FireWire(ieee1394);
usbmgr: Gerenciamento USB apenas para esses dispositivos. Presente em kernel
2.2.
Tipos de drivers e chipset USB
Atualmente há dois tipos “oficiais” de drivers e um terceiro que é compatível com os
outros dois. Esses drivers são módulos que podemos carregar no kernel do sistema
devido às duas especificações de controladores USB.
• usb-ohci.o: É o OHCI – Open Host Controller Interface (Compaq), que é usado
pela Nvidia.
• usb-uhci.o: É o UHCI – Universal Host Controller Interface (Intel) que é
padronizado, porém, simples em hardware, mas complexo em software.
Também é usado nos chipset VIA.
• usb-ehci.o: É compatível com os demais. Esse é o USB 2.0
Para saber quais módulos para os tipos de USB foram reconhecidos pelo kernel:
# dmesg | grep hci | uniq | nl
1
ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver
2
ohci_hcd: USB 1.1 ‘Open’ Host Controller (OHCI) Driver
3
ohci_hcd 0000:00:01.2: found PCI INT D -> IRQ 5
4
ohci_hcd 0000:00:01.2: sharing IRQ 5 with 0000:00:01.3
5
ohci_hcd 0000:00:01.2: OHCI Host Controller
6
ohci_hcd 0000:00:01.2: new USB bus registered, assigned bus number 1
7
ohci_hcd 0000:00:01.2: irq 5, io mem 0xdffd0000
8
usb usb1: Manufacturer: Linux 2.6.31.5-127.fc12.i686.PAE ohci_hcd
9
ohci_hcd 0000:00:01.3: found PCI INT D -> IRQ 5
10
ohci_hcd 0000:00:01.3: sharing IRQ 5 with 0000:00:01.2
11
ohci_hcd 0000:00:01.3: OHCI Host Controller
12
ohci_hcd 0000:00:01.3: new USB bus registered, assigned bus number 2
13
ohci_hcd 0000:00:01.3: irq 5, io mem 0xdffe0000
14
usb usb2: Manufacturer: Linux 2.6.31.5-127.fc12.i686.PAE ohci_hcd
15
uhci_hcd: USB Universal Host Controller Interface driver
16
usb 1-1: new low speed USB device using ohci_hcd and address 2
Para esse padrão USB, seu sistema vai apresentar os seguintes módulos: ohci.o,
uhci.o e ehci-hcd.o. Para sabermos quais desses módulos seu sistema está usando
é simples:
# lspci -v | grep -i usb
00:01.2 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev
07) (prog-if 10 [OHCI])
Subsystem: Silicon Integrated Systems [SiS] USB 1.1 Controller
00:01.3 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev
07) (prog-if 10 [OHCI])
Subsystem: Silicon Integrated Systems [SiS] Onboard USB Controller)
38
Tópico 101: Arquitetura do Sistema
Tabela 101.1.8: Quadro dos fabricantes com modelo USB.
OHCI (USB 1.0)
UHCI (USB 1.1)
EHCI (USB 2.0)
Compac
Intel
Intel
ALI
VIA
VIA
NEC
---
NEC
Opti Chipset
---
Phillips
O padrão USB 2.0 (EHCI) tem suporte a partir do kernel 2.4.19, mas é no kernel
2.6 que esse suporte está bem completo e melhorado como, por exemplo, alta
velocidade de transferência. Mas o seu hardware deve ser USB 2.0 para que essa
sincronia seja completa. Para verificar se seu hardware tem algum suporte a USB
2.0, use o comando lspci -v | grep HCI.
Arquivos ligados aos módulos (ehci, ohci e uhci) ficam nesse caminho:
# ls -F /sys/bus/pci/drivers/ | grep hci
ahci/
ehci_hcd/
ohci_hcd/
uhci_hcd/
Depois da montagem do sistema de arquivos propriamente dita, baseada no
conteúdo do diretório /proc/bus/usb, os módulos usb-ohci ou usb-uhci são
carregados, e cada diretório numerado (001, 002, 003 etc) equivale a montagem de
um dispositivo USB. E dentro desses diretórios há o respectivo arquivo numérico
no formato binário.
O sistema Linux usa o arquivo /etc/conf.modules ou o /etc/modules.conf ou, ainda
no caso de um sistema não muito antigo, o /etc/modprobe.conf. Esse arquivo
tem a finalidade de guardar os módulos que serão carregados pelo sistema. Ele
é consultado pelos programas modprobe e depmod. Aqui já percebemos que o
sistema está usando OHCI.
# cat /etc/modprobe.conf | grep -i usb
alias usbdevfs usbcore
alias usb ohci-hcd
Os módulos (drivers) no sistema Linux são arquivos que tem o sufixo “.o” ou “.ko”.
Veja esse exemplo:
# find /lib/modules/2.6.31.5-127.fc12.i686.PAE/ -iname "*.ko" -print | grep
audio
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pcmcia/pdaudiocf/sndpdaudiocf.ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/usb/snd-usb-audio.ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/sndlayla20.ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/snd-mona.ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/snd-mia.ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/snd-indigo.
ko
Tópico 101.1: Identificação e configuração de hardware
39
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/snddarla24.ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/snddarla20.ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/snd-echo3g.
ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/sndindigoio.ko
/lib/modules/2.6.31.5-127.fc12.i686.PAE/kernel/sound/pci/echoaudio/sndindigoiox.ko
(...)
Como o padrão USB tornou-se muito popular, veja os módulos para USB
encontrados nos sistemas Linux:
• mousedev: Mouse USB e keybdev: Teclado USB;
• usb-storage: CD-ROM, HD, ZIP drive, e/ou pen-drives e máquinas fotográficas
digitais;
• audio: Placas de som USB e joydev: Joystick USB.
Os módulos ativos para dispositivos USB ficam no arquivo /etc/modules.conf, mas
dependendo da distribuição pode haver uma pequena mudança no nome desse
arquivo, como /etc/modprobe.conf, ou até mesmo uma nova lógica de organização
de arquivos de módulos. Portanto, fique atento.
A seguir, veja o exemplo de um arquivo desses com módulos USB para alguns
dispositivos. Esse arquivo está presente em distribuições mais antigas:
# cat /etc/modules.conf
(...)
alias usb uhci
post-install uhci modprobe printer
post-install printer modprobe joydev
post-install joydev modprobe hid
Montagem de dispositivos USB
Como a grande maioria dos dispositivos USB é reconhecida automaticamente
no sistema Linux, basta espetá-los em uma porta USB que a montagem será
automática e será criado um ícone na área de trabalho do usuário representando
aquele dispositivo. Até aqui tudo bem, mas nem sempre é assim. E se, por algum
motivo, o dispositivo não for montado automaticamente? E se o objetivo for fazer
um acesso ao dispositivo via shell script? Pois é, tem horas que é interessante a
montagem automática, e tem horas que não.
Mas, como proceder? Simples. Entenda que os discos podem ser IDE ou SCSI/
SATA. Sendo assim, para os discos IDE temos a nomenclatura hda, hdb, hdc etc
e para os discos SCSI temos a nomenclatura sda, sdb, sdc etc. E sabendo disso, as
distribuições tratam os dispositivos USB que armazenam dados como um segundo
disco, e as distribuições mais modernas reservam sdb ou sdc para os dispositivos
USB. Então, se há apenas um disco hda ou das, o dispositivo USB será reconhecido
como sdb1, mas é preciso uma verificação para ter mais certeza, pois pequenas
mudanças podem ocorrer.
40
Tópico 101: Arquitetura do Sistema
Primeiramente uma pesquisa, e descobrimos que o disco sda tem três partições:
# dmesg | grep sda
sd 0:0:0:0: [sda] 156250000 512-byte hardware sectors: (80.0 GB/74.5 GiB)
(...)
sda: sda1 sda2 sda3
sd 0:0:0:0: [sda] Attached SCSI disk
EXT3 FS on sda2, internal journal
Seguindo essa linha de pensamento, descobrimos que o dispositivo USB foi
reconhecido como sdb1. Esse é o procedimento correto para todos os dispositivos
USB, caso eles não sejam detectados automaticamente em modo gráfico. E pelo
modo texto usamos essa ideia:
# dmesg | grep sdb
sd 2:0:0:0: [sdb] 4014080 512-byte hardware sectors: (2.05 GB/1.91 GiB)
(...)
sd 2:0:0:0: [sdb] Assuming drive cache: write through
sdb: sdb1
sd 2:0:0:0: [sdb] Attached SCSI removable disk
O objetivo é de podermos acessar esse dispositivo e sabermos que o nosso disco
principal é do tipo sda e que o disco secundário sdb foi reconhecido. O grande
macete é você entender que esses dispositivos usam armazenamento ou servem
para isso. O padrão do sistema de arquivos deles adotado é FAT (Windows) ou
VFAT (Linux).
Assim, em nosso exemplo, pela nossa análise sabemos que sdb1 será usado para
acessar a máquina digital a qual, nesse caso, possui memória para armazenamento
e funciona como disco. Então criaremos no diretório /media um diretório para esse
dispositivo:
# mkdir /media/sony
E agora as respectivas montagens dos dispositivos (lembrando que eles não estão
montados). Após isso, o usuário poderá gravar seus arquivos normalmente. O
sdb1 foi usado porque esse dispositivo foi reconhecido assim. Proceda de forma
semelhante para outros dispositivos:
# mount -t vfat /dev/sdb1 /media/sony
Agora é só usar o dispositivo, mas lembre-se que, se não for mais usar o dispositivo,
terá que desmontá-lo, e para isso não poderá estar “dentro” dele. Para desmontar
esses dispositivos use os comandos a seguir:
# umount /media/sony
Tópico 101.1: Identificação e configuração de hardware
41
RESUMOS IMPORTANTES PARA O EXAME LPIC1 - 117-102:
Conhecimento chave:
ƒ Ativar/desativar periféricos integrados ao sistema.
ƒ Configuração do sistema para inicializar sem periféricos externos, como teclados
ƒ Diferenciar os vários tipos de mídias de armazenamento.
ƒ Conhecer o identificador (ID) de hardware correto para os diversos tipos de
dispositivos
ƒ Conceituar os termos coldplug e hotplug.
ƒ Identificar os recursos de hardware de um dispositivo qualquer.
ƒ Uso de ferramentas de informação de hardware como lspci, lsdev, lsusb, hwinfo e
afins.
ƒ Conhecer ferramentas de manipulação de dispositivos USB.
ƒ Conceituar os termos sysfs, udev, hald, dbus e afins.
Os seguintes itens são uma listagem parcial dos arquivos usados, termos e
utilitários:
ƒ /sys, /proc, /dev, modprobe.
ƒ lsmod, lspci, lsusb.