Sei sulla pagina 1di 4

O Sistema de Arquivos sysfs

O kernel do Linux 2.6 introduziu o sistema de arquivos sysfs. O sistema de arquivos sysfs considerado uma fuso dos
sistemas de arquivos proc, devfs, e devpty. O sistema de arquivossysfs enumera os dispositivos e barramentos
conectados a um sistema em uma hierarquia que pode ser acessada do espao de usu!rio. O sysfs pro"etado para lidar
com op#es espec$ficas de dispositivos e drivers que anteriormente eram mantidas no /proc/, e trazia a incluso din%mica
de dispositivos oferecida anterioemente pelo devfs.
O sistema de arquivos sysfs montado em /sys/ e contm diret&rios que or'anizam os dispositivos conectados ao sistema
de diversas maneiras diferentes. Os sudiret&rios de /sysfs/incluem(
). O diret&rio /devices/
*ste diret&rio contm o diret&rio /css0/. +eus subdiret&rios representam todos os subcanais detectados pelo kernel do
Linux. ,iret&rios de subcanais so nomeados como 0.0.nnnn, onde nnnn o n-mero hexadecimal do subcanal entre .... e
ffff. ,iret&rios de subcanais contm arquivos de status e um outro subdiret&rio que representa o dispositivo em si. O
diret&rio do dispositivo nomeado como 0.0.xxxx, onde xxxx o endereo unit!rio do dispositivo. O
diret&rio /devices/ tambm contm informa#es sobre o status, bem como op#es de confi'urao para o dispositivo.
2. O diret&rio /bus/
*ste diret&rio contm os sub/diret&rios /ccw/ e /ccwgroup/. Os dispositivos 001 so acessados atravs de palavras de
comando de canal. Os dispositivos do diret&rio /ccw/usam somente um subcanal no sub/sistema do canal do mainframe. Os
dispositicos de 'rupo 001 tambm so acessados com palavras de comando de canal, mas utilizam mais de um subcanal por
dipositivo. 2or exemplo( um dispositivo 334./3 ,5+, usa um subcanal, enquanto uma conexo de rede 6,7O para um
adaptador O+5 usa tr8s subcanais. 5mbos os diret&rios /ccw/ e /ccwgroup/ contm diret&rios chamados devices
9dispositivos: e drivers(
O diret&rio /devices/ contm um link simb&lico para os diret&rios do dispositivo no diret&rio /sys/devices/css0/.
O diret&rio /drivers/ contm diret&rios para cada driver de dispositivo atualmente carre'ado no sistema. ,rivers
associados a dispositivos como dasd, console, qeth, e zfcp possuem entradas neste diret&rio. O
diret&rio /driver/ contm confi'ura#es para o driver do dispositivo, bem como links simb&licos para os dispositivos sendo
usados 9no diret&rio /sys/devices/css0/:.
3. O diret&rio /class/
*ste diret&rio contm diret&rios que a'rupam dispositivos similares, como tt;s, drives de fita +0+7, dispositivos de rede e
outros dispositivos diversos.
<. O diret&rio /block/
*ste diret&rio contm diret&rios para cada dispositivo de bloco do sistema. +o, na maioria, dispositivos tipo disco, como
,5+, reais, dispositivos de retorno de lao e dispositivos de bloco de raid de soft=are. 5 diferena notada entre sistemas
Linux mais anti'os e aqueles que usam sysfs a necessidade de referenciar os dispositivos pelos seus nomes sysfs. >uma
ima'em do ?ernel 2.<, o driver zFCP era passado como endereos de seus dispositivos. >o sistema da ima'em do ?ernel 2.6,
o driver passado como 0.0.1600.

Devs e hotplug

Podemos dividir o processo de ativao de um dispositivo no Linux em trs passos: em primeiro lugar carregado o mdulo que d suporte a ele, em seguida criado
um device (como "devsda"!, um arquivo especial atravs do qual ele acessado e, opcionalmente, executado algum script ou ao adicional"
#o plugar uma $e%cam, seria carregado (por exemplo! o mdulo "spca&xx" e criado o device "devvideo'", atravs do qual os programas podem acessar a c(mera"
#o plugar um pendrive seria carregado o mdulo "us%)storage" e, assim por diante" *m muitos casos, preciso carregar mais de um mdulo" Para sincroni+ar o ,pilot
com um Palm -./, por exemplo, preciso carregar os mdulos us%serial e visor"
-m device a com%inao de dois endereos de ,ernel: um ma0or num%er e um minor num%er" 1 ma0or num%er usado para indicar uma categoria de dispositivos,
enquanto o minor num%er identi2ica o dispositivo em si" Por exemplo, o ma0or num%er "34'" usado em relao a impressoras -./" # primeira impressora conectada
rece%e o device "devus%lp'", que 2ormado pela com%inao do ma0or num%er "34'" e o minor num%er "3"" # segunda impressora conectada rece%e o device
"devus%lp3", que 2ormado pelo ma0or num%er "34'" e pelo minor num%er "5" e assim por diante"
6radicionalmente, o responsvel por criar e manter os devices correspondentes a cada dispositivo era o devfs" *le cumpre a 2uno usando uma a%ordagem %em
simples: o diretrio "dev" contm devices prontos para todos os dispositivos suportados, mesmo que poucos deles este0am realmente em uso" 1s devices vo sendo
atri%u7dos con2orme novos dispositivos so ativados"
1 hotplug entra em cena com a 2uno de detectar novos dispositivos" 8 ele o responsvel por carregar os mdulos apropriados, a0ustar permiss9es e executar tare2as
diversas sempre que um novo dispositivo conectado" .em o :otplug, seu pendrive ainda 2unciona normalmente, mas voc passa a ter o tra%al:o de ter que carregar
os mdulos e montar o dispositivo sempre que quiser acess)lo; sua impressora passa a aparecer no gerenciador de impresso apenas depois que voc carrega os
mdulos apropriados e a con2igura manualmente atravs do <addprinter$i+ard (ou outro gerenciador!, e assim por diante"
1 :otplug surgiu originalmente como um script responsvel por detectar e ativar dispositivos -./ con2orme eram plugados no micro" *m%ora ten:a um 2uncionamento
interno relativamente simples, o :otplug se mostrou %astante e2iciente e passou a ser expandido para assumir a con2igurao de outros dispositivos" #tualmente, o
:otplug no se limita a apenas pendrives, impressoras e c(meras, mas d suporte a todo tipo de dispositivo 2ire$ire, P=>=?#, P=? e .=.?"
# partir do ,ernel 5"@, o :otplug se tornou um componente padro do sistema" *le vem pr)instalado em qualquer distri%uio que se pre+e" >esmo o .lac<$are que
espartano em termos de 2erramentas automticas de deteco passou a inclu7)lo a partir da verso A"5" Beri2ique apenas se o servio "hotplug" est ativo e, se
necessrio, ative)o com o comando:
# /etc/init.d/hotplug start
ou
# /etc/rc.d/rc.hotplug start
(no .lac<$are!
1s arquivos de con2igurao do :otplug esto concentrados dentro da pasta "/etc/hotplug"" 1 :otplug tra%al:a com os cdigos de identi2icao dos dispositivos,
carregando mdulos ou executando scripts com 2un9es diversas sempre que dispositivos con:ecidos so conectados"
Ca maioria das distri%ui9es, inclu7do o arquivo "etc:otplugus%"distmap", que contm uma grande quantidade de regras pr)con2iguradas" Boc pode incluir regras
adicionais usando o arquivo "etc:otplugus%"usermap"" # possi%ilidade mais interessante executar scripts personali+ados quando determinados dispositivos so
plugados" ?sto permite 2a+er desde coisas simples, como tocar um som, ou a%rir um determinado programa, at incluir scripts mais complexos, que 2a+em %ac<ups
automticos ou outras opera9es complicadas" Beremos isso com mais detal:es no cap7tulo so%re s:ell script"
1utro arquivo Dtil dentro da con2igurao do :otplug o "/etc/hotplug/blacklist", onde so especi2icados mdulos que no devem ser carregados automaticamente
pelo :otplug" *ste arquivo permite solucionar pro%lemas causados por mdulos "mal comportados", que causam travamentos ou pro%lemas diversos ao serem
carregados" ?sto relativamente comum com relao a mdulos proprietrios, como os drivers para so2tmodems e para algumas placas $ireless, que em muitas
situa9es c:egam a congelar o sistema caso o dispositivo a que do suporte no este0a presente, ou ao tentarem (incorretamente! ativar um dispositivo similar, mas
que no inteiramente compat7vel com ele"
-m exemplo o mdulo "?ntel&EF", que d suporte a modems ?ntel #m%ient" 1s modems ?ntel #m%ient "leg7timos" possuem um c:ip G.P grande, com a marca
"#m%ient" decalcada" *xistem muitos modems com c:ips ?ntel&EF## ou &EF*# (2ceis de recon:ecer, pois possuem c:ips %em menores! que no so compat7veis com
o driver" #o tentar carregar o mdulo ?ntel&EF com um destes modems instalado, o sistema em muitos casos simplesmente trava, mesmo que o modem nem este0a
em uso"
*m geral, as distri%ui9es 0 vm com o arquivo populado com vrios drivers que recon:ecidamente possuem pro%lemas" Co ,urumin, por exemplo, incluo os mdulos
dos so2tmodems, que podem ser carregados manualmente atravs dos 7cones no menu:
ltmodem
?ntel&EF
pctel
slamr
#lm dos peri2ricos -./, o :otplug capa+ de detectar outros tipos de dispositivos, que so con2igurados atravs de arquivos como o pci"agent, scsi"agent,
tape"agent, ieee3EAH"agent, net"agent e $lan"agent" 6odos estes arquivos so na verdade scripts, que so executados durante o %oot e con2orme o :otplug encontra
novos dispositivos" ?ndividualmente, os scripts so rpidos, mas execut)los em massa 2a+ com que a iniciali+ao das vers9es recentes do :otplug se0a relativamente
demorada, aumentando o tempo de %oot da mquina" =on2orme o :otplug cresce em complexidade e incorpora mais scripts, a tendncia que o tempo se torne cada
ve+ maior"
?sso apontado como um dos pontos negativos do :otplug em relao ao udev, que vem gan:ando espao e su%stituindo)o em muitas distri%ui9es

Entendendo o udev
Iecentemente, surgiu um terceiro componente, o udev, que su%stitui o dev2s e assume parte das 2un9es do :otplug, com a opo de se integrar a ele, o2erecendo
suporte aos scripts e outras personali+a9es, ou su%stitu7)lo completamente, opo adotada por muitas distri%ui9es"
# principal vantagem do udev que nele poss7vel de2inir devices "2ixos" para cada peri2rico" .ua impressora pode passar a rece%er sempre o device
"devprinterepson" e seu pendrive o "devpendrive", mesmo que voc ten:a outros dispositivos instalados" 8 poss7vel tam%m executar scripts quando eles so
conectados ou removidos, criando um leque muito grande de op9es"
1s devices so criados con2orme os peri2ricos so conectados, 2a+endo com que o dev conten:a entrada apenas para os peri2ricos detectados"
Co dev2s, o diretrio "dev" contm devices para todo tipo de componente que suportado pelo ,ernel, resultando num nDmero a%surdo de pastas e devices dentro do
diretrio" 1utra limitao que os peri2ricos podem ser associados a devices di2erentes, de acordo com a ordem em que so plugados" Gigamos que voc ten:a um
pendrive e um JG externo, am%os -./" .e voc plugar o pendrive primeiro, ele ser o "devsda", enquanto o JG ser o "devsd%"" >as, se voc inverter a ordem, o
JG que ser o "devsda"" .e voc tiver um JG serial #6#, ento o JG ser o "devsda", o pendrive ser o "devsd%" e o JG externo ser o "devsdc" e, assim por
diante" *ssa con2uso toda torna complicado 2a+er um script de %ac<up ou qualquer outra coisa que dependa do pendrive estar dispon7vel sempre no mesmo lugar"
1utra vantagem do udev que, por ser escrito em = e ter um 2uncionamento interno muito mais simples, ele tam%m mais rpido que o :otplug, o que 2a+ di2erena
em muitas situa9es"
# parte em que o udev e o :otplug se so%rep9em com relao a automati+ao de tare2as" 1 :otplug suporta o uso de scripts, que so executados sempre que um
dispositivo em particular, ou algum dispositivo dentro de uma categoria de2inida, plugado" *stes scripts permitem 2a+er com que se0a criado um 7cone no des<top ao
plugar um pendrive, 2a+er com que o con2igurador de impressoras se0a a%erto quando uma nova impressora -./ conectada, entre inDmeras outras possi%ilidades"
1 udev suporta o uso de "regras", que, entre outras coisas, tam%m permitem o uso de scripts" *le o2erece compati%ilidade com os scripts do :otplug, mas esta
2uncionalidade no vem ativada em todas as distri%ui9es" Ge uma 2orma geral, o udev est sendo adotado rapidamente em todas as principais distri%ui9es e, em
distri%ui9es que o utili+am, mais recomendado tra%al:ar com regras do udev do que com scripts do :otplug" >ais adiante, no cap7tulo so%re s:ell script, veremos
com mais detal:es como escrever tanto scripts para o :otplug quanto regras para o udev"
*m algumas distri%ui9es, o udev con2igurado de 2orma a su%stituir o :otplug completamente, enquanto outras optam por integrar os dois" Cestes casos, o :otplug
deixa de ser um servio separado e passa a ser iniciado 0untamente com o servio "udev":
# /etc/init.d/udev start
-ma o%servao , que ao contrrio do dev2s e mesmo do :otplug, o udev independente do ,ernel, ele pode ser instalado, removido e atuali+ado rapidamente, como
qualquer outro programa" .e algum peri2rico no estiver sendo detectado ou voc estiver tendo pro%lemas gerais, experimente atuali+ar o pacote "udev" a partir do
repositrio com atuali+a9es para a distri%uio em uso" Cas distri%ui9es derivadas do Ge%ian, voc pode atuali+)lo via apt)get:
# apt-get install udev
Ca maior parte das distri%ui9es, voc encontrar vrios arquivos com regras pr)con2iguradas dentro do diretrio "/etc/udev", destinados a executar 2un9es
previamente executadas pelo dev2s, :otplug e scripts diversos" 1 arquivo "etcudevdev2s"rules", por exemplo, tem a 2uno de criar os devices de acesso a diversos
dispositivos, incluindo as portas seriais e paralelas, mouses P.5, 0oKstic<s e muitos outros peri2ricos no plug)and)plaK"
1 arquivo "/etc/udev/links.conf" permite de2inir devices adicionais manualmente, de 2orma que eles se0am recriados a cada %oot" ?sto necessrio pois no udev o
diretrio dev din(mico, 2a+endo que dispositivos no utili+ados se0am perdidos a cada re%oot"
-ma con2igurao comum, adicionar regras que criam os devices utili+ados pelo B>$are, de 2orma que eles no se percam ao reiniciar, como em:
> vmmon ))mode @@@ c 3' 3@&
> vmnet' ))mode @@@ c 33A '
> vmnet3 ))mode @@@ c 33A 3
> vmnet4 ))mode @@@ c 33A 4
#s regras permitem tam%m criar lin<s" .e voc quer que se0a criado o lin< "devmodem", apontando para o modem que est na porta "devttK.E", adicione:
L modem devttK.E
# as letras "L" e ">" no in7cio das lin:as indicam o tipo de dispositivo que ser criado" 1 "L" indica que estamos 2alando de um dispositivo de caracteres (que incluem
modems, palms e tudo que visto pelo sistema como um dispositivo serial! e o ">" indica um dispositivo de %loco, como uma partio num JG ou pendrive, ou ainda
uma inter2ace de rede virtual, como no caso do B>$are" 1 "))mode" indica as permiss9es de acesso, enquanto os dois nDmeros depois do "c" indicam o ma0or e minor
num%er, os mesmos endereos que so 2ornecidos ao criar o dispositivo manualmente usando o comando "m<nod""
Entendendo o HAL
=arlos *" >orimoto criou 32ev5''A Ls 5':E3
A
Co post de sexta)2eira, comentei %revemente so%re as 2un9es de montagem automtica das parti9es em dispositivos remov7veis, que permitem que pendrives,
cart9es de memria, c(meras e outros dispositivos se0am acessados de maneira muito simples e sem que voc precise 2ornecer a sen:a de root"
*m distri%ui9es antigas, o tra%al:o era 2eito atravs de s:ell)scripts, que monitoravam as mensagens do ,ernel e executavam as a9es apropriadas" # partir do ,ernel
5"@, este tra%al:o 2icou %em mais simples, 0 que, graas ao sKs2s, sempre que um novo dispositivo plugado, adicionada uma entrada dentro da pasta "sKs""
Co caso de um pendrive, por exemplo, criada a pasta "sKs%loc<sd%" (ou sdc, sdd, etc"! e, dentro dela, uma su%)pasta para cada partio dentro do pendrive, como
"sKs%loc<sdasd%3"" # pasta criada quanto o pendrive detectado, e removida quando ele desconectado do sistema" Mraas a isso, um script de deteco
precisa apenas monitorar o conteDdo da pasta sKs, sem se preocupar em detectar quando o pendrive conectado ou desconectado, pois o prprio ,ernel (com a
a0uda do :otplug ou -G*B! se encarrega disso"
-m script de deteco, poderia ento usar uma regra para o udev como:
/-.N"us%", #=6?1CNN"add", ,*IC*LNN"sdOO", C#>*N"P<", I-CQN"usrlocal%indetectar
""" para ser executado sempre que um novo dispositivo 2osse encontrado e uma 2uno como:
detecta(!R
cd sKs%loc<
2or i in Sls T grep sdS; do
cd Ui; ls T grep Ui; cd sKs%loc<
done
V
Para veri2icar quais so as parti9es dispon7veis" Boc pode ver um exemplo simpli2icado de deteco de pendrives usando o -G*B no:
:ttp:$$$":ard$are"com"%rlivros2erramentas)linuxcriando)regras)para)udev":tml
*stes scripts em s:ell 2a+em o tra%al:o, mas eles no so exatamente uma soluo muito elegante para o pro%lema" *ntra em cena ento o J#L (Jard$are #%straction
LaKer!, um servio de sistema que se encarrega de 2a+er o "tra%al:o su0o", monitorando as mensagens do <ernel e transmitindo as in2orma9es para os aplicativos"
*le representado pelo servio ":ald" (que 2ica ativo por padro na maior parte das distri%ui9es atuais! e tra%al:a em con0unto com o servio "d%us", que controla a
comunicao entre ele e os aplicativos"
=aso este0a curioso, as in2orma9es coletadas por ele podem ser exi%idas usando o comando "ls:al", que exi%e a longa lista de in2orma9es que monitorada pelos
aplicativos"
.e voc rodar o comando "ps aux T grep :ald" em uma distri%uio atual, vai perce%er que existem vrias rami2ica9es do :ald, responsveis por monitorar di2erentes
dispositivos da mquina" 1 "pooling devsd% (everK 5 sec!" no screens:ot, por exemplo, indica que ele est monitorando o dispositivo da c(mera, reali+ando
c:ecagens a cada dois segundos:

1 J#L integrado a componentes do Mnome do ,G*, que se encarregam de mostrar mensagens quando novos dispositivos so plugados e executar outras 2un9es" #o
plugar uma c(mera digital, por exemplo, a presena de arquivos de imagem 2a+ com que o utilitrio o2erea a opo de a%r7)las diretamente com um gerenciador de
2otos, em ve+ de simplesmente mostrar os arquivos:

Co caso dos cart9es de memria e parti9es de dados, as parti9es so montadas automaticamente em pastas dentro do diretrio "media" e (na maioria das
distri%ui9es!, criado um 7cone no des<top, acompan:ado pela a%ertura de uma 0anela do gerenciador de arquivos:

#s parti9es so montadas de 2orma automtica con2orme voc clica so%re os 7cones, sem que voc precise 2ornecer a sen:a de root" 1 J#L se encarrega de a0ustar as
permiss9es de acesso de maneira que os arquivos 2iquem dispon7veis apenas para o seu login (os par(metros so detal:ados no arquivo "media":al)mta%"!"
*ste sistema permite tam%m manter a segurana em servidores de terminais e outros sistemas usados por diversos usurios simultaneamente" Boc vai notar
tam%m que as entradas re2erentes Ls parti9es de dispositivos remov7veis no so mais inseridas no 2sta%, uma ve+ que a montagem e a desmontagem 2eita
diretamente pelo J#L"
#lm de ser responsvel pelo acesso a dados em dispositivos remov7veis, o J#L utili+ado em diversas outras 2un9es do sistema" 8 ele o responsvel por detectar
quando um ca%o de rede plugado e transmitir a in2ormao ao Cet$or<>anager, para que ele possa ativar a rede automaticamente, ou por 2ornecer as in2orma9es
so%re o :ard$are da mquina para que o gerenciador de drivers restritos do -%untu possa instalar os mdulos necessrio, por exemplo"

Potrebbero piacerti anche